Usar funções de inteligência de dados temporais DAX
O DAX inclui várias funções de inteligência de dados temporais para simplificar a tarefa de modificar o contexto de filtro de data. Você pode escrever muitas dessas fórmulas de inteligência usando uma função CALCULATE que modifica os filtros de data, mas isso dá mais trabalho.
Observação
Muitas funções de inteligência de dados temporais do DAX funcionam com períodos de data padrão, como anos, trimestres e meses. Se você tiver períodos irregulares, como meses financeiros que não correspondem ao calendário, ou se precisar trabalhar com semanas ou períodos mais curtos, as funções DAX integradas não ajudarão. Nesses casos, use a função CALCULATE com filtros de data ou hora personalizados.
Requisito de tabela de datas
Para trabalhar com funções de inteligência de dados temporais do DAX, você precisa atender ao pré-requisito de ter, pelo menos, uma tabela de datas em seu modelo. Uma tabela de datas é uma tabela marcada como uma tabela de Data. Essa tabela deve ter uma coluna do tipo de dados Data (ou data/hora), conhecida como coluna de data. A coluna de data deve atender a estes requisitos:
- Conter valores exclusivos.
- Abranger anos inteiros.
- Estar livre de valores BLANKs.
- Não ter datas ausentes.
Para obter mais informações, consulte Criar tabelas de datas no Power BI Desktop.
Resumos ao longo do tempo
Um grupo de funções de inteligência de dados temporais do DAX foca em resumos ao longo do tempo:
-
DATESYTD: retorna uma tabela de coluna única que contém datas para o acumulado do ano (YTD) no contexto de filtro atual. Esse grupo também inclui as funçõesDATESMTDeDATESQTDpara o mês até a data (MTD) e trimestre até a data (QTD). Você pode passar essas funções como filtros para a funçãoCALCULATE. -
TOTALYTD: avalia uma expressão para YTD no contexto de filtro atual. As funções DAX equivalentes de QTD e MTD,TOTALQTDeTOTALMTD, também estão incluídas. -
DATESBETWEEN: retorna uma tabela que contém uma coluna de datas que começa com uma determinada data de início e continua até uma determinada data de término. -
DATESINPERIOD: retorna uma tabela que contém uma coluna de datas que começa com uma determinada data de início e continua pelo número especificado de intervalos.
Observação
Embora a função TOTALYTD seja simples de usar, você está limitado a passar apenas uma expressão de filtro. Se você precisar aplicar várias expressões de filtro, use a função CALCULATE e, em seguida, passe a função DATESYTD como uma das expressões de filtro.
No exemplo a seguir, você criará seu primeiro cálculo de inteligência de dados temporais que usa a função TOTALYTD. A sintaxe é a seguinte:
TOTALYTD(<expression>, <dates>, [, <filter>][, <year_end_date>])
A função exige uma expressão e, como é comum a todas as funções de inteligência de dados temporais, uma referência à coluna de data de uma tabela de datas marcada. Opcionalmente, uma única expressão de filtro ou a data de término do ano pode ser passada (obrigatório somente quando o ano não termina em 31 de dezembro).
Baixe e abra o arquivo Adventure Works DW 2020 M07.pbix. Em seguida, adicione a seguinte definição de medida à tabela Sales que calcula a receita acumulada no ano. Formate a medida como moeda com duas casas decimais.
Revenue YTD =
TOTALYTD(
[Revenue],
'Date'[Date],
"6-30"
)
O valor da data de término do ano "6-30" representa 30 de junho.
Na Página 1 do relatório, adicione a medida Revenue YTD ao visual de matriz. Observe que ela produz um resumo dos valores de receita desde o início do ano até o mês filtrado.
Comparações ao longo do tempo
Outro grupo de funções de inteligência de dados temporais do DAX foca no deslocamento de períodos:
-
DATEADD: retorna uma tabela que contém uma coluna de datas, deslocadas para frente ou para trás no tempo pelo número especificado de intervalos a partir das datas no contexto de filtro atual. -
PARALLELPERIOD: retorna uma tabela que contém uma coluna de datas que representa um período paralelo às datas na coluna de datas especificada, no contexto de filtro atual, com as datas deslocadas em vários intervalos para frente ou para trás no tempo. -
SAMEPERIODLASTYEAR: retorna uma tabela que contém uma coluna de datas que são deslocadas um ano para trás a partir das datas na coluna de datas especificada, no contexto de filtro atual. - Muitas funções DAX auxiliares para navegar progressiva ou regressivamente por períodos de tempo específicos, e todas retornam uma tabela de datas. Essas funções auxiliares incluem
NEXTDAY,NEXTMONTH,NEXTQUARTER,NEXTYEAR,PREVIOUSDAY,PREVIOUSMONTH,PREVIOUSQUARTERePREVIOUSYEAR.
Agora, você adicionará uma medida à tabela Sales que calcula a receita do ano anterior usando a função SAMEPERIODLASTYEAR. Formate a medida como moeda com duas casas decimais.
Revenue PY =
VAR RevenuePriorYear = CALCULATE(
[Revenue],
SAMEPERIODLASTYEAR('Date'[Date])
)
RETURN
RevenuePriorYear
Adicione a medida Revenue PY ao visual de matriz. Observe que ela produz resultados semelhantes aos valores de receita do ano anterior.
Em seguida, você modificará a medida renomeando-a para Revenue YoY % e depois atualizando a cláusula RETURN para calcular a taxa de alteração. Lembre-se de alterar o formato para uma porcentagem com duas casas decimais.
Revenue YoY % =
VAR RevenuePriorYear = CALCULATE(
[Revenue],
SAMEPERIODLASTYEAR('Date'[Date])
)
RETURN
DIVIDE(
[Revenue] - RevenuePriorYear,
RevenuePriorYear
)
Observe que a medida Revenue YoY % produz uma taxa de fator de variação sobre a receita mensal do ano anterior. Por exemplo, julho de 2018 representa um aumento de 106,53% em relação à receita mensal do ano anterior, e novembro de 2018 representa uma redução de 24,22% em relação à receita mensal do ano anterior.
Observação
A medida Revenue YoY % demonstra um bom uso das variáveis DAX. A medida aprimora a legibilidade da fórmula e permite que você teste isoladamente parte da lógica de medida (retornando o valor da variável RevenuePriorYear). Além disso, a medida é uma fórmula ideal porque não precisa recuperar o valor de receita do ano anterior duas vezes. Depois de armazená-la uma vez em uma variável, a cláusula RETURN usa o valor da variável duas vezes.