As tabelas de datas no Power Pivot são essenciais para navegar e calcular dados ao longo do tempo. Este artigo fornece uma compreensão detalhada das tabelas de datas e como pode criá-las no Power Pivot. Em particular, este artigo descreve:
-
Por que motivo uma tabela de datas é importante para navegar e calcular dados por datas e hora.
-
Como utilizar o Power Pivot para adicionar uma tabela de datas ao Modelo de Dados.
-
Como criar novas colunas de data, como Ano, Mês e Período numa tabela de datas.
-
Como criar relações entre tabelas de datas e tabelas de factos.
-
Como trabalhar com o tempo.
Este artigo destina-se a utilizadores novos no Power Pivot. No entanto, é importante já ter uma boa compreensão da importação de dados, da criação de relações e da criação de colunas e medidas calculadas.
Este artigo não descreve como utilizar funções de Time-Intelligence DAX em fórmulas de medida. Para obter mais informações sobre como criar medidas com funções de Análise de Tempo DAX, veja Análise de Tempo no Power Pivot no Excel.
Nota: No Power Pivot, os nomes "measure" e "calculated field" são sinónimos. Estamos a utilizar a medida de nome ao longo deste artigo. Para obter mais informações, veja Medidas no Power Pivot.
Conteúdos
Compreender as tabelas de datas
Quase todas as análises de dados envolvem a navegação e a comparação de dados ao longo de datas e horas. Por exemplo, pode querer somar os montantes de vendas do último trimestre fiscal e, em seguida, comparar esses totais com outros trimestres ou pode querer calcular um saldo final de mês para uma conta. Em cada um destes casos, está a utilizar datas como forma de agrupar e agregar transações ou saldos de vendas durante um determinado período de tempo.
Relatório do Power View
Uma tabela de datas pode conter muitas representações diferentes de datas e hora. Por exemplo, uma tabela de datas terá frequentemente colunas como Ano Fiscal, Mês, Trimestre ou Período que pode selecionar como campos de uma Lista de Campos ao cortar e filtrar os seus dados em tabelas dinâmicas ou relatórios do Power View.
Lista de Campos do Power View
Para que colunas de data como Ano, Mês e Trimestre incluam todas as datas dentro do respetivo intervalo, a tabela de datas tem de ter, pelo menos, uma coluna com um conjunto contíguo de datas. Ou seja, essa coluna tem de ter uma linha para cada dia para cada ano incluída na tabela de datas.
Por exemplo, se os dados que pretende procurar tiverem datas de 1 de fevereiro de 2010 a 30 de novembro de 2012 e reportar um ano de calendário, irá querer uma tabela de datas com, pelo menos, um intervalo de datas entre 1 de janeiro de 2010 e 31 de dezembro de 2012. Todos os anos na tabela de datas tem de conter todos os dias de cada ano. Se atualizar regularmente os seus dados com dados mais recentes, poderá querer executar a data de fim por um ou dois anos, para que não tenha de atualizar a tabela de datas à medida que a hora passa.
Tabela de datas com um conjunto contíguo de datas
Se reportar um ano fiscal, pode criar uma tabela de datas com um conjunto contíguo de datas para cada ano fiscal. Por exemplo, se o seu ano fiscal começar a 1 de março e tiver dados para os anos fiscais de 2010 até à data atual (por exemplo, em FY 2013), pode criar uma tabela de datas que começa em 01/03/2009 e inclui, pelo menos, todos os dias em cada ano fiscal até à última data do Ano Fiscal de 2013.
Se apresentar relatórios sobre o ano civil e o ano fiscal, não precisa de criar tabelas de datas separadas. Uma única tabela de datas pode incluir colunas para um ano civil, ano fiscal e até mesmo um calendário de treze período de quatro semanas. O importante é que a sua tabela de datas contém um conjunto contíguo de datas para todos os anos incluído.
Adicionar uma tabela de datas ao Modelo de Dados
Existem várias formas de adicionar uma tabela de datas ao seu Modelo de Dados:
-
Importar a partir de uma base de dados relacional ou de outra origem de dados.
-
Crie uma tabela de datas no Excel e, em seguida, copie ou ligue a uma nova tabela no Power Pivot.
-
Importar do Microsoft Azure Marketplace.
Vamos analisar cada um destes mais detalhadamente.
Importar a partir de uma base de dados relacional
Se importar alguns ou todos os seus dados de um armazém de dados ou de outro tipo de base de dados relacional, é provável que já exista uma tabela de datas e relações entre os mesmos e os restantes dados que está a importar. As datas e o formato provavelmente corresponderão às datas nos seus dados de factos, e as datas provavelmente começam bem no passado e vão muito para o futuro. A tabela de datas que pretende importar pode ser muito grande e conter um intervalo de datas para além do que terá de incluir no seu Modelo de Dados. Pode utilizar as funcionalidades de filtro avançadas do Assistente de Importação de Tabelas do Power Pivot para escolher seletivamente apenas as datas e as colunas específicas de que realmente precisa. Isto pode reduzir significativamente o tamanho do livro e melhorar o desempenho.
Assistente de Importação de Tabelas
Na maioria dos casos, não terá de criar colunas adicionais, como Ano Fiscal, Semana, Nome do Mês, etc. porque já existirão na tabela importada. No entanto, em alguns casos, depois de importar a tabela de datas para o modelo de dados, poderá ter de criar colunas de data adicionais, consoante uma determinada necessidade de relatórios. Felizmente, isto é fácil de fazer com o DAX. Irá saber mais sobre a criação de campos de tabela de datas mais tarde. Cada ambiente é diferente. Se não tiver a certeza se as origens de dados têm uma data ou tabela de calendário relacionada, fale com o administrador da base de dados.
Criar uma tabela de datas no Excel
Pode criar uma tabela de datas no Excel e, em seguida, copiá-la para uma nova tabela no Modelo de Dados. Isto é realmente muito fácil de fazer e dá-lhe muita flexibilidade.
Quando cria uma tabela de datas no Excel, começa com uma única coluna com um intervalo contíguo de datas. Em seguida, pode criar colunas adicionais, como Ano, Trimestre, Mês, Ano Fiscal, Período, etc. na folha de cálculo do Excel com fórmulas do Excel ou, depois de copiar a tabela para o Modelo de Dados, pode criá-las como colunas calculadas. A criação de colunas de data adicionais no Power Pivot é descrita na secção Adicionar Novas Colunas de Data à Tabela de Datas mais adiante neste artigo.
Como: Criar uma tabela de datas no Excel e copiá-la para o Modelo de Dados
-
No Excel, numa folha de cálculo em branco, na célula A1, escreva um nome de cabeçalho de coluna para identificar um intervalo de datas. Normalmente, seráalgo como Data, DateTime ou DateKey.
-
Na célula A2, escreva uma data de início. Por exemplo, 1/1/2010.
-
Clique na alça de preenchimento e arraste-a para baixo para um número de linha que inclua uma data de fim. Por exemplo, 31/12/2016.
-
Selecione todas as linhas na coluna Data (incluindo o nome do cabeçalho na célula A1).
-
No grupo Estilos , clique em Formatar como Tabela e, em seguida, selecione um estilo.
-
Na caixa de diálogo Formatar como Tabela , clique em OK.
-
Copie todas as linhas, incluindo o cabeçalho.
-
No Power Pivot, no separador Base , clique em Colar.
-
Em Colar Pré-visualização > Nome da Tabela , escreva um nome como Data ou Calendário. Deixe Utilizar a primeira linha como cabeçalhos de coluna selecionadose, em seguida, clique em OK.
A nova tabela de datas (denominada Calendário neste exemplo) no Power Pivot tem o seguinte aspeto:
Nota: Também pode criar uma tabela ligada com a opção Adicionar ao Modelo de Dados. No entanto, isto torna o seu livro desnecessariamente grande porque o livro tem duas versões da tabela de datas; um no Excel e outro no Power Pivot.
Nota: A data do nome é uma palavra-chave no Power Pivot. Se atribuir um nome à tabela que criar na Data do Power Pivot, terá de incluir o nome da tabela com plicas em quaisquer fórmulas DAX que a referenciem num argumento. Todas as imagens e fórmulas de exemplo neste artigo referem-se a uma tabela de datas criada no Power Pivot chamada Calendário.
Tem agora uma tabela de datas no seu Modelo de Dados. Pode adicionar novas colunas de data, como Ano, Mês, etc. com o DAX.
Adicionar novas colunas de data à tabela de datas
Uma tabela de datas com uma única coluna de data que tenha uma linha para cada dia para cada ano é importante para definir todas as datas num intervalo de datas. Também é necessário criar uma relação entre a tabela de factos e a tabela de datas. No entanto, essa coluna de data única com uma linha para cada dia não é útil ao analisar por datas num relatório de Tabela Dinâmica ou do Power View. Pretende que a tabela de datas inclua colunas que o ajudem a agregar os seus dados para um intervalo ou grupo de datas. Por exemplo, poderá querer somar os valores das vendas por mês ou trimestre ou pode criar uma medida que calcula o crescimento ao longo do ano. Em cada um destes casos, a tabela de datas precisa de colunas de ano, mês ou trimestre que lhe permitam agregar os seus dados para esse período.
Se tiver importado a tabela de datas de uma origem de dados relacional, esta poderá já incluir os diferentes tipos de colunas de data que pretende. Em alguns casos, poderá querer modificar algumas dessas colunas ou criar colunas de data adicionais. Isto é especialmente verdade se criar a sua própria tabela de datas no Excel e copiá-la para o Modelo de Dados. Felizmente, criar novas colunas de data no Power Pivot é bastante fácil com as Funções de Data e Hora no DAX.
Sugestão: Se ainda não trabalhou com o DAX, um ótimo local para começar a aprender é com o Início Rápido: Aprender noções Básicas do DAX em 30 Minutos no Office.com.
Funções de Data e Hora do DAX
Se já trabalhou com funções de data e hora em fórmulas do Excel, é provável que esteja familiarizado com as Funções de Data e Hora. Embora estas funções sejam semelhantes às suas equivalentes no Excel, existem algumas diferenças importantes:
-
As funções Data e Hora do DAX utilizam um tipo de dados datetime.
-
Podem utilizar valores de uma coluna como argumento.
-
Podem ser utilizadas para devolver e/ou manipular valores de data.
Estas funções são frequentemente utilizadas ao criar colunas de data personalizadas numa tabela de datas, pelo que são importantes de compreender. Vamos utilizar várias destas funções para criar colunas para Ano, Trimestre, MêsFiscal, etc.
Nota: As funções Data e Hora no DAX não são as mesmas que as funções de Análise de Tempo. Saiba mais sobre a Análise de Tempo no Power Pivot no Excel.
O DAX inclui as seguintes funções de Data e Hora:
Também pode utilizar muitas outras funções DAX nas suas fórmulas. Por exemplo, muitas das fórmulas descritas aqui utilizam Funções Matemáticas e Trigonométricas , como MOD e TRUNC, Funções Lógicas como SE e Funções de Texto como FORMAT Para obter mais informações sobre outras funções DAX, consulte a secção Recursos Adicionais mais adiante neste artigo.
Exemplos de fórmulas para um ano de calendário
Os exemplos seguintes descrevem fórmulas utilizadas para criar colunas adicionais numa tabela de datas denominada Calendário. Uma coluna, denominada Data, já existe e contém um intervalo contíguo de datas de 1/1/2010 a 31/12/2016.
Ano
=ANO([data])
Nesta fórmula, a função ANO devolve o ano do valor na coluna Data. Uma vez que o valor na coluna Data é do tipo de dados datetime, a função ANO sabe como devolver o ano da mesma.
Mês
=MÊS([data])
Nesta fórmula, tal como acontece com a função ANO, podemos simplesmente utilizar a função MÊS para devolver um valor mensal da coluna Data.
Trimestre
=INT(([Mês]+2)/3)
Nesta fórmula, utilizamos a função INT para devolver um valor de data como um número inteiro. O argumento que especificamos para a função INT é o valor da coluna Mês, adicione 2 e, em seguida, divida-o por 3 para obter o nosso trimestre, 1 a 4.
Nome do Mês
=FORMAT([date],"mmmm")
Nesta fórmula, para obter o nome do mês, utilizamos a função FORMAT para converter um valor numérico da coluna Data em texto. Especificamos a coluna Data como o primeiro argumento e, em seguida, o formato; queremos que o nome do nosso mês mostre todos os carateres, pelo que utilizamos "mmmm". O nosso resultado tem o seguinte aspeto:
Se quisermos devolver o nome do mês abreviado para três letras, utilizaríamos "mmm" no argumento de formato.
Dia da Semana
=FORMAT([date],"ddd")
Nesta fórmula, utilizamos a função FORMAT para obter o nome do dia. Uma vez que queremos apenas um nome de dia abreviado, especificamos "ddd" no argumento de formato.
Tabela Dinâmica de Exemplo
Assim que tiver campos para datas como Ano, Trimestre, Mês, etc., pode utilizá-los numa Tabela Dinâmica ou relatório. Por exemplo, a imagem seguinte mostra o campo SalesAmount da tabela de factos Vendas em VALORES e Ano e Trimestre da tabela de dimensões Calendário em LINHAS. SalesAmount é agregado para o contexto de ano e trimestre.
Exemplos de fórmulas para um ano fiscal
Ano Fiscal
=SE([Mês]<= 6,[Ano],[Ano]+1)
Neste exemplo, o ano fiscal começa a 1 de julho.
Não existe nenhuma função que possa extrair um ano fiscal de um valor de data porque as datas de início e de fim de um ano fiscal são muitas vezes diferentes das de um ano civil. Para obter o ano fiscal, utilizamos primeiro uma função SE para testar se o valor de Mês é menor ou igual a 6. No segundo argumento, se o valor de Mês for menor ou igual a 6, devolve o valor da coluna Ano. Caso contrário, devolva o valor de Year e adicione 1.
Outra forma de especificar um valor do mês final do ano fiscal é criar uma medida que especifica simplesmente o mês. Por exemplo, FYE:=6. Em seguida, pode referenciar o nome da medida em vez do número do mês. Por exemplo, =SE([Mês]<=[FYE],[Ano],[Ano]+1). Isto proporciona mais flexibilidade ao referenciar o mês final do ano fiscal em várias fórmulas diferentes.
Mês Fiscal
=SE([Mês]<= 6, 6+[Mês], [Mês]- 6)
Nesta fórmula, especificamos se o valor de [Mês] é menor ou igual a 6 e, em seguida, aceita 6 e adiciona o valor de Mês, caso contrário subtrai 6 do valor de [Mês].
Trimestre Fiscal
=INT(([MêsFiscal]+2)/3)
A fórmula que utilizamos para FiscalQuarter é praticamente a mesma que era para Trimestre no nosso ano civil. A única diferença é que especificamos [MêsFiscal] em vez de [Mês].
Feriados ou datas especiais
Poderá querer incluir uma coluna de data que indique que determinadas datas são feriados ou outra data especial. Por exemplo, poderá querer somar totais de vendas para o dia de Ano Novo ao adicionar um campo Feriado a uma Tabela Dinâmica, como uma segmentação de dados ou filtro. Noutros casos, poderá querer excluir essas datas de outras colunas de data ou de uma medida.
Incluir feriados ou dias especiais é bastante simples. Pode criar uma tabela no Excel que tenha as datas que pretende incluir. Em seguida, pode copiar ou utilizar Adicionar ao Modelo de Dados para adicioná-lo ao Modelo de Dados como uma tabela ligada. Na maioria dos casos, não é necessário criar uma relação entre a tabela e a tabela Calendário. Todas as fórmulas que a referenciem podem utilizar a função LOOKUPVALUE para devolver valores.
Segue-se um exemplo de uma tabela criada no Excel que inclui feriados a adicionar à tabela de datas:
Data |
Feriado |
---|---|
1/1/2010 |
Ano Novo |
11/25/2010 |
Ação de Graças |
12/25/2010 |
Natal |
1/1/2011 |
Ano Novo |
11/24/2011 |
Ação de Graças |
12/25/2011 |
Natal |
01/01/2012 |
Ano Novo |
22/11/2012 |
Ação de Graças |
12/25/2012 |
Natal |
1/1/2013 |
Ano Novo |
11/28/2013 |
Ação de Graças |
12/25/2013 |
Natal |
11/27/2014 |
Ação de Graças |
12/25/2014 |
Natal |
1/1/2014 |
Ano Novo |
11/27/2014 |
Ação de Graças |
12/25/2014 |
Natal |
1/1/2015 |
Ano Novo |
11/26/2014 |
Ação de Graças |
12/25/2015 |
Natal |
1/1/2016 |
Ano Novo |
11/24/2016 |
Ação de Graças |
12/25/2016 |
Natal |
Na tabela de datas, criamos uma coluna denominada Feriado e utilizamos uma fórmula como esta:
=VALORPROV.PROC(Feriados[Feriados];Feriados[data],Calendário[data])
Vamos analisar esta fórmula com mais cuidado.
Utilizamos a função LOOKUPVALUE para obter valores da coluna Feriados na tabela Feriados. No primeiro argumento, especificamos a coluna onde estará o nosso valor de resultado. Especificamos a coluna Feriados na tabela Feriados porque é esse o valor que queremos que seja devolvido.
=VALORPROV.PROC(Feriados[Feriados];Feriados[data],Calendário[data])
Em seguida, especificamos o segundo argumento, a coluna de pesquisa que tem as datas que queremos procurar. Especificamos a coluna Data na tabela Feriados , da seguinte forma:
=VALORPROV.PROC(Feriados[Feriados];Feriados[data],Calendário[data])
Por fim, especificamos a coluna na nossa tabela Calendário que tem as datas que queremos procurar na tabela Feriados . Esta é, naturalmente, a coluna Data na tabela Calendário .
=VALORPROV.PROC(Feriados[Feriados];Feriados[data],Calendário[data])
A coluna Feriados devolverá o nome do feriado para cada linha que tenha um valor de data que corresponda a uma data na tabela Feriados.
Calendário personalizado - treze períodos de quatro semanas
Algumas organizações, como o retalho ou o serviço alimentar, reportam frequentemente períodos diferentes, como treze períodos de quatro semanas. Com um calendário de treze quatro semanas, cada período é de 28 dias; portanto, cada período contém quatro segundas-feiras, quatro terças-feiras, quatro quartas-feiras, etc. Cada período contém o mesmo número de dias e, normalmente, os feriados serão incluídos no mesmo período de cada ano. Pode optar por iniciar um período em qualquer dia da semana. Tal como acontece com datas num calendário ou ano fiscal, pode utilizar o DAX para criar colunas adicionais com datas personalizadas.
Nos exemplos abaixo, o primeiro período completo começa no primeiro domingo do ano fiscal. Neste caso, o ano fiscal começa a 7/1.
Semana
Este valor dá-nos o número da semana a partir da primeira semana completa do ano fiscal. Neste exemplo, a primeira semana completa começa no domingo, pelo que a primeira semana completa do primeiro ano fiscal na tabela Calendário começa a 4/07/2010 e continua até à última semana completa na tabela Calendário. Embora este valor em si não seja tão útil na análise, é necessário calcular para utilização noutras fórmulas de período de 28 dias.
=INT([date]-40356)/7)
Vamos analisar esta fórmula com mais cuidado.
Em primeiro lugar, criamos uma fórmula que devolve valores da coluna Data como um número inteiro, da seguinte forma:
=INT([data])
Queremos então procurar o primeiro domingo do primeiro ano fiscal. Vemos que é 04/07/2010.
Agora, subtraia 40356 (que é o número inteiro para 27/06/2010, o último domingo do ano fiscal anterior) desse valor para obter o número de dias desde o início dos dias na nossa tabela Calendário, da seguinte forma:
=INT([date]-40356)
Em seguida, divida o resultado por 7 (dias numa semana), da seguinte forma:
=INT(([date]-40356)/7)
O resultado tem o seguinte aspeto:
Period
O período neste calendário personalizado contém 28 dias e começará sempre num domingo. Esta coluna devolverá o número do período que começa com o primeiro domingo do primeiro ano fiscal.
=INT(([Semana]+3)/4)
Vamos analisar esta fórmula com mais cuidado.
Em primeiro lugar, criamos uma fórmula que devolve um valor da coluna Semana como um número inteiro, da seguinte forma:
=INT([Semana])
Em seguida, adicione 3 a esse valor, da seguinte forma:
=INT([Semana]+3)
Em seguida, divida o resultado por 4, da seguinte forma:
=INT(([Semana]+3)/4)
O resultado tem o seguinte aspeto:
Ano Fiscal do Período
Este valor devolve o ano fiscal de um período.
=INT(([Período]+12)/13)+2008
Vamos analisar esta fórmula com mais cuidado.
Em primeiro lugar, criamos uma fórmula que devolve um valor de Period e adiciona 12:
= ([Período]+12)
Dividimos o resultado por 13, porque existem treze períodos de 28 dias no ano fiscal:
=(([Período]+12)/13)
Adicionamos 2010, porque é o primeiro ano na tabela:
=(([Período]+12)/13)+2010
Por fim, utilizamos a função INT para remover qualquer fração do resultado e devolver um número inteiro, quando dividido por 13, da seguinte forma:
=INT(([Período]+12)/13)+2010
O resultado tem o seguinte aspeto:
Período em Ano Fiscal
Este valor devolve o número do período, 1 a 13, começando pelo primeiro Período completo (a partir de domingo) em cada ano fiscal.
=SE(MOD([Período];13), MOD([Período];13);13)
Esta fórmula é um pouco mais complexa, pelo que vamos descrevê-la primeiro numa linguagem que compreendemos melhor. Esta fórmula indica, divida o valor de [Período] por 13 para obter um número do período (1-13) no ano. Se esse número for 0, devolva 13.
Primeiro, criamos uma fórmula que devolve o resto do valor de Período por 13. Podemos utilizar as funções MOD (Matemática e Trigonometria) da seguinte forma:
=MOD([Período];13)
Isto, na maior parte das vezes, dá-nos o resultado que queremos, exceto quando o valor de Período é 0, porque essas datas não se enquadram no primeiro ano fiscal, como nos primeiros cinco dias da nossa tabela de datas calendário de exemplo. Podemos tratar disto com uma função SE. Caso o nosso resultado seja 0, devolvemos 13, da seguinte forma:
=SE(MOD([Período];13);MOD([Período];13);13)
O resultado tem o seguinte aspeto:
Tabela Dinâmica de Exemplo
A imagem abaixo mostra uma Tabela Dinâmica com o campo SalesAmount da tabela de factos Vendas em VALORES e os campos PeriodFiscalYear e PeriodInFiscalYear da tabela de dimensão de data calendário em ROWS. SalesAmount é agregado para o contexto por ano fiscal e período de 28 dias no ano fiscal.
Relações
Depois de criar uma tabela de datas no seu Modelo de Dados, para começar a navegar nos seus dados em Tabelas Dinâmicas e relatórios e para agregar dados com base nas colunas na tabela de dimensão de datas, tem de criar uma relação entre a tabela de factos com os dados de transação e a tabela de datas.
Uma vez que precisa de criar uma relação com base em datas, deve certificar-se de que cria essa relação entre colunas cujos valores são do tipo de dados datetime (Date).
Para cada valor de data na tabela de factos, a coluna de pesquisa relacionada na tabela de datas tem de conter valores correspondentes. Por exemplo, uma linha (registo de transação) na tabela de factos Vendas com um valor de 15/08/2012 00:00 na coluna DateKey tem de ter um valor correspondente na coluna Data relacionada na tabela de data (denominado Calendário). Esta é uma das razões mais importantes pelas quais pretende que a sua coluna de datas na tabela de datas contenha um intervalo contíguo de datas que inclua qualquer data possível na sua tabela de factos.
Nota: Embora a coluna de data em cada tabela tenha de ser do mesmo tipo de dados (Data), o formato de cada coluna não importa..
Nota: Se o Power Pivot não lhe permitir criar relações entre as duas tabelas, os campos de data poderão não armazenar a data e a hora ao mesmo nível de precisão. Consoante a formatação das colunas, os valores podem ter o mesmo aspeto, mas são armazenados de forma diferente. Leia mais sobre como trabalhar com o tempo.
Nota: Evite utilizar chaves de substituição de número inteiro em relações. Quando importa dados de uma origem de dados relacional, muitas vezes as colunas de data e hora são representadas por uma chave de substituição, que é uma coluna de número inteiro utilizada para representar uma data exclusiva. No Power Pivot, deve evitar criar relações com chaves de data/hora de número inteiro e, em vez disso, utilizar colunas que contenham valores exclusivos com um tipo de dados de data. Embora a utilização de chaves de substituição seja considerada uma melhor prática nos armazéns de dados tradicionais, as chaves de número inteiro não são necessárias no Power Pivot e podem dificultar o agrupamento de valores em Tabelas Dinâmicas por diferentes períodos de data.
Se receber um erro de erro de correspondência de Tipo ao tentar criar uma relação, é provável que a coluna na tabela de factos não seja do tipo de dados Data. Isto pode acontecer quando o Power Pivot não consegue converter automaticamente um tipo de dados não data (normalmente um tipo de dados de texto) num tipo de dados de data. Ainda pode utilizar a coluna na tabela de factos, mas terá de converter os dados com uma fórmula DAX numa nova coluna calculada. Veja Converter datas de tipo de dados de texto para um tipo de dados de data mais adiante no apêndice.
Múltiplas relações
Em alguns casos, pode ser necessário criar múltiplas relações ou criar múltiplas tabelas de datas. Por exemplo, se existirem vários campos de data na tabela de factos Vendas, como DateKey, ShipDate e ReturnDate, todos podem ter relações com o campo Data na tabela de datas do Calendário, mas apenas um deles pode ser uma relação ativa. Neste caso, uma vez que DateKey representa a data da transação e, por conseguinte, a data mais importante, isto serviria melhor como a relação ativa . Os outros têm relações inativas.
A tabela dinâmica seguinte calcula o total de vendas por Ano Fiscal e Trimestre Fiscal. Uma medida com o nome Total de Vendas, com a fórmula Total sales:=SUM([SalesAmount]), é colocada em VALORES e os campos FiscalYear e FiscalQuarter da tabela de datas calendário são colocados em LINHAS.
Esta tabela dinâmica direta funciona corretamente porque queremos somar o total de vendas até à data de transação em DateKey. A nossa medida Total de Vendas utiliza as datas em DateKey e é somada por ano fiscal e trimestre fiscal porque existe uma relação entre DateKey na tabela Vendas e a coluna Data na tabela de datas calendário.
Relações inativas
E se quisísse somar as vendas totais não por data de transação, mas por data de envio? Precisamos de uma relação entre a coluna DataDeEnvio na tabela Vendas e a coluna Data na tabela Calendário. Se não criarmos essa relação, as nossas agregações baseiam-se sempre na data de transação. No entanto, podemos ter múltiplas relações, embora apenas uma possa estar ativa e, uma vez que a data de transação é a mais importante, obtém a relação ativa com a tabela Calendário.
Neste caso, a DataDeEnvio tem uma relação inativa, pelo que qualquer fórmula de medida criada para agregar dados com base em datas de envio tem de especificar a relação inativa utilizando a função USERELATIONSHIP .
Por exemplo, uma vez que existe uma relação inativa entre a coluna DataDeEnvio na tabela Vendas e a coluna Data na tabela Calendário, podemos criar uma medida que soma o total de vendas por data de envio. Utilizamos uma fórmula como esta para especificar a relação a utilizar:
Total Sales by Ship Date:=CALCULATE(SUM(Sales[SalesAmount]), USERELATIONSHIP(Sales[ShipDate], Calendar[Date]))
Esta fórmula indica simplesmente: Calcule uma soma para SalesAmount, mas filtre utilizando a relação entre a coluna DataDeEnvio na tabela Vendas e a coluna Data na tabela Calendário.
Agora, se criarmos uma tabela dinâmica e colocarmos a medida Total de Vendas por Data de Envio em VALORES e Ano Fiscal e Trimestre Fiscal em LINHAS, vemos o mesmo Total Geral, mas todos os outros montantes de soma para o ano fiscal e o trimestre fiscal são diferentes porque se baseiam na data de envio e não na data de transação.
A utilização de relações inativas permite-lhe utilizar apenas uma tabela de datas, mas requer que quaisquer medidas (como Total de Vendas por Data de Envio) referenciem a relação inativa na respetiva fórmula. Existe outra alternativa, ou seja, utilizar várias tabelas de datas.
Várias tabelas de datas
Outra forma de trabalhar com múltiplas colunas de data na tabela de factos é criar várias tabelas de datas e criar relações ativas separadas entre as mesmas. Vejamos novamente o exemplo da tabela Vendas. Temos três colunas com datas nas quais podemos querer agregar dados:
-
Uma DateKey com a data de venda para cada transação.
-
DataDeEnvio – com a data e hora em que os itens vendidos foram enviados para o cliente.
-
A ReturnDate – com a data e hora em que um ou mais itens devolvidos foram recebidos.
Lembre-se de que o campo DateKey com a data de transação é o mais importante. Faremos a maioria das nossas agregações com base nestas datas, pelo que iremos certamente querer uma relação entre a mesma e a coluna Data na tabela Calendário. Se não quisermos criar relações inativas entre ShipDate e ReturnDate e o campo Data na tabela Calendário, exigindo assim fórmulas de medida especiais, podemos criar tabelas de datas adicionais para data de envio e data de devolução. Em seguida, podemos criar relações ativas entre as mesmas.
Neste exemplo, criámos outra tabela de datas denominada ShipCalendar. Isto, naturalmente, também significa criar colunas de data adicionais e, uma vez que estas colunas de data estão numa tabela de datas diferente, queremos dar-lhes um nome que as difere das mesmas colunas na tabela Calendário. Por exemplo, criámos colunas denominadas ShipYear, ShipMonth, ShipQuarter, etc.
Se criarmos a nossa tabela dinâmica e colocarmos a nossa medida Total sales em VALUES e ShipFiscalYear e ShipFiscalQuarter em ROWS, vemos os mesmos resultados que vimos quando criámos uma relação inativa e um campo calculado Total de Vendas Totais especiais por Data de Envio.
Cada uma destas abordagens requer uma consideração cuidadosa. Ao utilizar múltiplas relações com uma única tabela de datas, poderá ter de criar medidas especiais que transitem relações inativas através da função USERELATIONSHIP. Por outro lado, a criação de múltiplas tabelas de datas pode ser confusa numa Lista de Campos e, uma vez que tem mais tabelas no Modelo de Dados, será necessária mais memória. Experimente o que funciona melhor para si.
Propriedade Tabela de Datas
A propriedade Tabela de Datas define os metadados necessários para que Time-Intelligence funções como TOTALYTD, PREVIOUSMONTH e DATESBETWEEN funcionem corretamente. Quando um cálculo é executado com uma destas funções, o motor de fórmulas do Power Pivot sabe para onde ir para obter as datas de que precisa.
Aviso: Se esta propriedade não estiver definida, as medidas que utilizam funções de Time-Intelligence DAX podem não devolver resultados corretos.
Quando define a propriedade Tabela de Datas, especifica uma tabela de datas e uma coluna de data do tipo de dados Data (datetime) na mesma.
Como: Definir a propriedade Tabela de Datas
-
Na janela do PowerPivot, selecione a tabela Calendário .
-
No separador Estrutura , clique em Marcar como tabela de datas.
-
Na caixa de diálogo Marcar como Tabela de Datas, selecione uma coluna com valores exclusivos e o tipo de dados Data.
Trabalhar com o tempo
Todos os valores de data com um tipo de dados Data no Excel ou SQL Server são, na verdade, um número. Incluídos nesse número estão os dígitos que fazem referência a uma hora. Em muitos casos, esse tempo para cada linha é meia-noite. Por exemplo, se um campo DateTimeKey numa tabela de factos Vendas tiver valores como 19/10/2010 12:00:00, isto significa que os valores estão no nível de precisão do dia. Se os valores do campo DateTimeKey tiverem uma hora incluída, por exemplo, 19/10/2010 8:44:00, isto significa que os valores estão no nível de precisão de minuto. Os valores também podem ser para a precisão ao nível da hora ou mesmo para o nível de precisão de segundos. O nível de precisão no valor de tempo terá um impacto significativo na forma como cria a tabela de datas e as relações entre ela e a tabela de factos.
Tem de determinar se irá agregar os seus dados a um nível diário de precisão ou a um nível de precisão de tempo. Por outras palavras, poderá querer utilizar colunas na tabela de datas, como Os campos De Manhã, Tarde ou Hora como data/hora nas áreas Linha, Coluna ou Filtro de uma Tabela Dinâmica.
Nota: Os dias são a unidade de tempo mais pequena com a qual as funções de Análise de Tempo DAX podem funcionar. Se não precisar de trabalhar com valores de tempo, deve reduzir a precisão dos seus dados para utilizar dias como a unidade mínima.
Se pretender agregar os seus dados ao nível de tempo, a tabela de datas precisará de uma coluna de data com a hora incluída. Na verdade, precisará de uma coluna de datas com uma linha para cada hora, ou talvez mesmo a cada minuto, de cada dia, para cada ano no intervalo de datas. Isto acontece porque, para criar uma relação entre a coluna DateTimeKey na tabela de factos e a coluna de data na tabela de datas, tem de ter valores correspondentes. Como pode imaginar, se incluir muitos anos, isto pode criar uma tabela de encontros muito grande.
No entanto, na maioria dos casos, quer agregar os seus dados apenas ao dia. Por outras palavras, irá utilizar colunas como Ano, Mês, Semana ou Dia da Semana como campos nas áreas Linha, Coluna ou Filtro de uma Tabela Dinâmica. Neste caso, a coluna de data na tabela de datas só precisa de conter uma linha para cada dia num ano, como descrevemos anteriormente.
Se a coluna de data incluir um nível de precisão de hora, mas agregar apenas a um nível diário, para criar a relação entre a tabela de factos e a tabela de datas, poderá ter de modificar a tabela de factos ao criar uma nova coluna que trunca os valores na coluna de data para um valor diário. Por outras palavras, converta um valor como 19/10/2010 8:44:00para19/10/2010 00:00: 00:00. Em seguida, pode criar a relação entre esta nova coluna e a coluna de data na tabela de datas porque os valores correspondem.
Vejamos um exemplo. Esta imagem mostra uma coluna DateTimeKey na tabela de factos Vendas. Todas as agregações para os dados nesta tabela só têm de estar ao nível do dia, ao utilizar colunas na tabela de datas do Calendário, como Ano, Mês, Trimestre, etc. A hora incluída no valor não é relevante, apenas a data real.
Uma vez que não precisamos de analisar estes dados para o nível de tempo, não precisamos da coluna Data na tabela de datas do Calendário para incluir uma linha para cada hora e cada minuto de cada dia em cada ano. Assim, a coluna Data na nossa tabela de datas tem o seguinte aspeto:
Para criar uma relação entre a coluna DateTimeKey na tabela Vendas e a coluna Data na tabela Calendário, podemos criar uma nova coluna calculada na tabela de factos Vendas e utilizar a função TRUNC para truncar o valor de data e hora na coluna DateTimeKey num valor de data que corresponda aos valores na coluna Data na tabela Calendário. A nossa fórmula tem o seguinte aspeto:
=TRUNC([DateTimeKey],0)
Isto dá-nos uma nova coluna (denominada DateKey) com a data da coluna DateTimeKey e uma hora de 12:00:00 para cada linha:
Agora, podemos criar uma relação entre esta nova coluna (DateKey) e a coluna Data na tabela Calendário.
Da mesma forma, podemos criar uma coluna calculada na tabela Vendas que reduz a precisão de tempo na coluna DateTimeKey para o nível de precisão de hora. Neste caso, a função TRUNC não funcionará, mas ainda podemos utilizar outras funções data e hora DAX para extrair e concatenar um novo valor para um nível de precisão de hora. Podemos utilizar uma fórmula como esta:
= DATA (ANO([DateTimeKey]), MÊS([DateTimeKey]), DIA([DateTimeKey]) ) + HORA (HORA([DateTimeKey]), 0, 0)
A nossa nova coluna tem o seguinte aspeto:
Desde que a nossa coluna Data na tabela de datas tenha valores para o nível de precisão de hora, podemos criar uma relação entre elas.
Tornar as datas mais utilizáveis
Muitas das colunas de data que criar na tabela de datas são necessárias para outros campos, mas não são realmente tão úteis na análise. Por exemplo, o campo DateKey na tabela Vendas que referimos e mostramos ao longo deste artigo é importante porque, para cada transação, essa transação é registada como ocorrendo numa determinada data e hora. No entanto, do ponto de vista da análise e do relatório, não é assim tão útil porque não podemos utilizá-lo como linha, coluna ou campo de filtro numa Tabela Dinâmica ou relatório.
Da mesma forma, no nosso exemplo, a coluna Data na tabela Calendário é muito útil, crítica na verdade, mas não pode utilizá-la como uma dimensão numa Tabela Dinâmica.
Para manter as tabelas e as colunas nas mesmas o mais úteis possível e para facilitar a navegação das listas de Campos da Tabela Dinâmica ou do relatório do Power View, é importante ocultar colunas desnecessárias das ferramentas de cliente. Também pode querer ocultar determinadas tabelas. A tabela Feriados apresentada anteriormente contém datas de feriados que são importantes para determinadas colunas na tabela Calendário, mas não pode utilizar as colunas Data e Feriado na tabela Feriados como campos numa tabela dinâmica. Aqui novamente, para facilitar a navegação nas Listas de Campos, pode ocultar toda a tabela Feriados.
Outro aspeto importante do trabalho com datas são as convenções de nomenclatura. Pode atribuir nomes a tabelas e colunas no Power Pivot como quiser. No entanto, tenha em atenção, especialmente se quiser partilhar o seu livro com outros utilizadores, uma boa convenção de nomenclatura facilita a identificação de tabelas e datas, não só em Listas de Campos, mas também no Power Pivot e em fórmulas DAX.
Depois de ter uma tabela de datas no seu Modelo de Dados, pode começar a criar medidas que o ajudarão a tirar o máximo partido dos seus dados. Alguns podem ser tão simples como somar totais de vendas para o ano atual e outros podem ser mais complexos, onde tem de filtrar um determinado intervalo de datas exclusivas. Saiba mais em Medidas no Power Pivot e funções de Análise de Tempo.
Apêndice
Converter datas de tipo de dados de texto num tipo de dados de data
Em alguns casos, uma tabela de factos com dados de transação pode conter datas do tipo de dados de texto. Ou seja, uma data que aparece como 2012-12-04T11:47:09 não é, de facto, uma data ou pelo menos não é o tipo de data que o Power Pivot consegue compreender. É apenas texto que se lê como uma data. Para criar uma relação entre uma coluna de data na tabela de factos e uma coluna de data numa tabela de datas, ambas as colunas têm de ser do tipo de dados Data .
Normalmente, quando tenta alterar o tipo de dados de uma coluna de datas que são tipo de dados de texto para um tipo de dados de data, o Power Pivot pode interpretar as datas e convertê-la automaticamente num tipo de dados de data verdadeiro. Se o Power Pivot não conseguir efetuar uma conversão de tipo de dados, obterá um erro de correspondência de tipo.
No entanto, ainda pode converter as datas num tipo de dados de data verdadeiro. Pode criar uma nova coluna calculada e utilizar uma fórmula DAX para analisar o ano, mês, dia, hora, etc. a partir das cadeias de texto e concatenar novamente de uma forma que o Power Pivot possa ler como uma data verdadeira.
Neste exemplo, importámos uma tabela de factos denominada Vendas para o Power Pivot. Contém uma coluna denominada DateTime. Os valores são apresentados da seguinte forma:
Se observarmos o Tipo de Dados no separador Base do grupo Formatação do Power Pivot, vemos que se trata de Tipo de dados de texto.
Não conseguimos criar uma relação entre a coluna DateTime e a coluna Date na nossa tabela de datas porque os tipos de dados não correspondem. Se tentarmos alterar o tipo de dados para Data, obtemos um erro de correspondência de tipo:
Neste caso, o Power Pivot não conseguiu converter o tipo de dados de texto para data. Ainda podemos utilizar esta coluna, mas para a colocar num tipo de dados de data verdadeiro, precisamos de criar uma nova coluna que analise o texto e o recrie num valor que o Power Pivot possa criar um tipo de dados Data.
Lembre-se, na secção Trabalhar com o tempo anteriormente neste artigo; a menos que seja necessário que a sua análise seja para um nível de precisão de hora do dia, deve converter datas na sua tabela de factos para um nível de precisão diário. Com isso em mente, queremos que os valores na nossa nova coluna estejam no nível de precisão diária (excluindo o tempo). Ambos podemos converter os valores na coluna DateTime num tipo de dados de data e remover o nível de tempo de precisão com a seguinte fórmula:
=DATA(ESQUERDA([DateTime];4), MID([DateTime];6;2), MID([DateTime],9,2))
Isto dá-nos uma nova coluna (neste caso, denominada Data). O Power Pivot até deteta os valores como datas e define o tipo de dados automaticamente como Data.
Se quisermos preservar o nível de tempo de precisão, basta alargar a fórmula para incluir as horas, minutos e segundos.
=DATA(ESQUERDA([DateTime];4), MID([DateTime],6;2), MID([DateTime],9,2)) +
TIME(MID([DateTime];12;2), MID([DateTime],15;2), MID([DateTime],18,2))
Agora que temos uma coluna Data do tipo de dados Data, podemos criar uma relação entre a mesma e uma coluna de data numa data.
Recursos adicionais
Guia de Introdução: Noções Básicas sobre a linguagem DAX em 30 Minutos