Usar funções de inteligência de dados temporais do DAX

Concluído

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ê poderia escrever muitas dessas fórmulas de inteligência usando uma função CALCULATE que modifica os filtros de data, mas isso seria mais trabalhoso.

Observação

Muitas funções de inteligência de dados temporais do DAX se preocupam com períodos de data padrão, especificamente anos, trimestres e meses. Se você tiver períodos de tempo irregulares (por exemplo, meses financeiros que começam no meio do mês civil) ou precisar trabalhar com semanas ou períodos de tempo (horas, minutos e assim por diante), as funções de inteligência de dados temporais do DAX não serão úteis. Em vez disso, você precisará usar a função CALCULATE e inserir filtros de data ou hora criados manualmente.

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 modelo de ter pelo menos uma tabela de datas em seu modelo. Uma tabela de datas é uma tabela que atende aos seguintes requisitos:

  • Ele precisa ter uma coluna de tipo de dados Data (ou data/hora), conhecida como a coluna de data.
  • A coluna de data deve conter valores exclusivos.
  • A coluna de data não deve conter espaços em branco.
  • A coluna de data não deve ter nenhuma data ausente.
  • A coluna de data deve abranger os anos completos. Um ano não é necessariamente um ano civil (janeiro a dezembro).
  • A tabela de data precisa ser indicada como uma tabela de data.

Para obter mais informações, confira 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 se preocupa com resumos ao longo do tempo:

  • DATESYTD – retorna uma tabela de coluna única que contém datas desde o início do ano no contexto de filtro atual. Esse grupo também inclui as funções DATESMTD e DATESQTD do DAX para MTD (desde início do mês) e QTD (desde o início do trimestre). É possível passar essas funções como filtros na função CALCULATE do DAX.
  • TOTALYTD – avalia uma expressão para o período desde o início do ano no contexto de filtro atual. As funções equivalentes do DAX para QTD e MTD, respectivamente, TOTALQTD e TOTALMTD, também estão incluídas.
  • DATESBETWEEN – retorna uma tabela que contém uma coluna de datas que começa com uma data de início fornecida e continua até uma data de término fornecida.
  • DATESINPERIOD – retorna uma tabela que contém uma coluna de datas que começa com uma data de início fornecida e continua durante o número de intervalos especificado.

Observação

Embora a função TOTALYTD seja simples de usar, você fica limitado a inseri-la em uma expressão de filtro. Se você precisar aplicar várias expressões de filtro, use a função CALCULATE e insira 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 usará a função TOTALYTD. A sintaxe dela é a seguinte:

TOTALYTD(<expression>, <dates>, [, <filter>][, <year_end_date>])

A função requer 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).

Primeiro, baixe e abra o arquivo Adventure Works DW 2020 M07.pbix. Em seguida, adicione a definição de medida a seguir à 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 de "6-30" representa 30 de junho.

Na Página 1 do relatório, adicione a medida Receita Desde o Início do Ano ao visual da matriz. Observe que ele produz um resumo dos valores de receita desde o início do ano até o mês filtrado.

Uma imagem mostra um visual de matriz com agrupamento por ano e por mês nas linhas e nos resumos de Receita e de Receita Desde o Início do Ano. Os valores acumulados no ano são realçados.

Comparações ao longo do tempo

Outro grupo de funções de inteligência de dados temporais do DAX concentra-se em períodos de tempo em deslocamento:

  • DATEADD – retorna uma tabela que contém uma coluna de datas, adiantadas ou atrasadas no tempo conforme o número especificado de intervalos 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 no futuro ou no passado.
  • SAMEPERIODLASTYEAR – retorna uma tabela que contém uma coluna de datas com o atraso de um ano em relação às datas na coluna de datas especificada no contexto de filtro atual.
  • Muitas funções DAX auxiliares para navegar progressivamente 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 e PREVIOUSDAY, PREVIOUSMONTH, PREVIOUSQUARTER e PREVIOUSYEAR.

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 Receita do ano anterior ao visual da matriz. Observe que ela produz resultados semelhantes aos valores de receita do ano anterior.

Uma imagem mostra um visual de matriz com agrupamento por ano e por mês nas linhas e nos resumos de Receita, Receita Desde o Início do Ano e Receita do ano anterior. Os valores mensais de receita do ano anterior para FY2019 são iguais aos valores mensais de receita do ano fiscal de 2018.

Em seguida, você modificará a medida renomeando-a como Revenue YoY % e atualizando a cláusula RETURN para calcular a taxa de alteração. Lembre-se de alterar o formato para um percentual com duas casas decimais.

Revenue YoY % =
VAR RevenuePriorYear = CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date]))
RETURN
    DIVIDE(
        [Revenue] - RevenuePriorYear,
        RevenuePriorYear
    )

Observe que a medida % de Receita em Relação ao Ano Anterior produz um fator de taxa de alteração relativo à 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.

Uma imagem mostra um visual de matriz com agrupamento por ano e por mês nas linhas e nos resumos de Receita, Receita Desde o Início do Ano e % de Receita em Relação ao Ano Anterior. Os valores mensais de % de Receita em Relação ao Ano Anterior para o ano fiscal de 2019 são valores formatados como porcentagens.

Observação

A medida de % de Receita em Relação ao Ano Anterior demonstra um bom uso de variáveis do DAX. A medida aprimora a legibilidade da fórmula e permite que você faça o teste de unidade de 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á-lo uma vez em uma variável, a cláusula RETURN usa o valor da variável duas vezes.