Cálculos adicionais de inteligência de dados temporais

Concluído 100 XP

Existem outras funções de inteligência de dados temporais do DAX que se preocupam em retornar apenas uma data. Você aprenderá sobre essas funções aplicando-as em dois cenários diferentes.

As funções FIRSTDATE e LASTDATE do DAX retornam a primeira e a última data no contexto de filtro atual para a coluna de datas especificada.

Calcular novas ocorrências

Outro uso de funções de inteligência de dados temporais é para contar novas ocorrências. O exemplo a seguir mostra como você pode calcular o número de novos clientes em um período de tempo. Um novo cliente é contabilizado no período de tempo em que fez a primeira compra dele.

Sua primeira tarefa é adicionar a medida a seguir na tabela Sales, que conta o número de clientes distintos até a data atual. Até a data atual significa desde o início do tempo até a última data no contexto de filtro. Formate a medida como um número inteiro usando o separador de milhar.

Customers LTD =
VAR CustomersLTD =
    CALCULATE(
        DISTINCTCOUNT(Sales[CustomerKey]),
        DATESBETWEEN(
            'Date'[Date],
            BLANK(),
            MAX('Date'[Date])
        ),
        'Sales Order'[Channel] = "Internet"
    )
RETURN
    CustomersLTD

Adicione a medida Clientes até a data atual ao visual da matriz. Observe que ele produz um resultado de Clientes Distintos Até a Data Atual até o final de cada mês.

A função 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. Quando a data de início estiver em branco, ela usará a primeira data na coluna data. (Por outro lado, quando a data de término estiver em branco, ela usará a última data na coluna data.) Nesse caso, a data de término é determinada pela função MAX, que retorna a última data no contexto de filtro. Portanto, se o mês de agosto de 2017 estiver no contexto de filtro, a função MAX retornará 31 de agosto de 2017 e a função DATESBETWEEN retornará todas as datas até 31 de agosto de 2017.

Em seguida, você modificará a medida renomeando-a para Novos Clientes e adicionando uma segunda variável para armazenar a contagem de clientes distintos antes do período de tempo no contexto de filtro. Agora a cláusula RETURN subtrai esse valor de clientes até a data atual para produzir um resultado, que é o número de novos clientes no período de tempo.

New Customers =
VAR CustomersLTD =
    CALCULATE(
        DISTINCTCOUNT(Sales[CustomerKey]),
        DATESBETWEEN(
            'Date'[Date],
            BLANK(),
            MAX('Date'[Date])
        ),
    'Sales Order'[Channel] = "Internet"
    )
VAR CustomersPrior =
    CALCULATE(
        DISTINCTCOUNT(Sales[CustomerKey]),
        DATESBETWEEN(
            'Date'[Date],
            BLANK(),
            MIN('Date'[Date]) - 1
        ),
        'Sales Order'[Channel] = "Internet"
    )
RETURN
    CustomersLTD - CustomersPrior

Para a variável CustomersPrior, observe que a função DATESBETWEEN inclui todas as datas até a primeira data no contexto de filtro menos uma. Como o Microsoft Power BI armazena datas internamente como números, você pode adicionar ou subtrair números para deslocar uma data.

Cálculos de instantâneo

Ocasionalmente, os dados sobre fatos são armazenados como instantâneos no tempo. Exemplos comuns incluem níveis de estoque ou saldos de conta. Um instantâneo de valores é carregado na tabela periodicamente.

Ao resumir valores de instantâneo (como os níveis de estoque), é possível resumir valores em qualquer dimensão, exceto a data. Ao contrário do que ocorre com a adição de contagens de nível de estoque entre datas, a adição de contagens de nível de estoque em categorias de produto gera um resumo significativo. Adicionar o nível de estoque de ontem ao nível de estoque de hoje não é uma operação útil para se realizar (a menos que você queira calcular a média desse resultado).

Quando você está resumindo tabelas de instantâneos, as fórmulas de medida podem contar com funções de inteligência de dados temporais do DAX para impor apenas um filtro de data.

No exemplo a seguir, você vai explorar um cenário para a empresa Adventure Works. Alterne para o modo de exibição de modelo e selecione o diagrama de modelo de Inventário.

Observe que o diagrama mostra três tabelas: Product, Date e Inventory. A tabela Inventory armazena instantâneos de saldos de unidade para cada data e produto. É importante que a tabela não contenha nenhuma data ausente e nenhuma entrada duplicada para nenhum produto na mesma data. Além disso, o último registro de instantâneo é armazenado para a data de 15 de junho de 2020.

Agora, alterne para o modo de exibição de relatório e selecione a Página 2 do relatório. Adicione a coluna UnitsBalance da tabela Inventory ao visual da matriz. O resumo padrão dela é definido como valores de soma.

Essa configuração de visual é um exemplo de como não resumir um valor de instantâneo. Adicionar saldos diários de instantâneos juntos não produz um resultado significativo. Portanto, remova o campo UnitsBalance do visual de matriz.

Agora, você adicionará uma tabela Inventory que soma o valor de UnitsBalancepara apenas uma data. Essa será a última data de cada período de tempo. Isso é alcançado usando a função LASTDATE. Formate a medida como um número inteiro usando o separador de milhar.

Stock on Hand =
CALCULATE(
    SUM(Inventory[UnitsBalance]),
    LASTDATE('Date'[Date])
)

Observação

Observe que a fórmula de medida usa a função SUM. Uma função de agregação precisa ser usada (medidas não permitem referências diretas a colunas), mas considerando que apenas uma linha existe para cada produto para cada data, a função SUM só atuará sobre uma linha.

Adicione a medida Estoque Disponível ao visual da matriz. O valor de cada produto agora se baseia no último saldo de unidades registrado para cada mês.

A medida retorna valores em branco para junho de 2020 porque não existe registro para a última data em junho. De acordo com os dados, ela ainda não aconteceu.

A filtragem pela última data no contexto de filtro tem problemas inerentes: Uma data registrada pode não existir porque ainda não aconteceu ou talvez devido aos saldos de ações não serem registrados nos finais de semana.

A próxima etapa é ajustar a fórmula de medida para determinar a última data que tem um resultado não em branco e, em seguida, filtrar por essa data. Você pode alcançar essa tarefa usando a função do DAX LASTNONBLANK.

Use a definição de medida a seguir para modificar a medida Estoque Disponível.

Stock on Hand =
CALCULATE(
    SUM(Inventory[UnitsBalance]),
    LASTNONBLANK(
        'Date'[Date],
        CALCULATE(SUM(Inventory[UnitsBalance]))
    )
)

No visual da matriz, observe os valores de junho de 2020 e o total (representando o ano inteiro).

A função LASTNONBLANK é uma função de iterador. Ela retorna a última data que produz um resultado não em branco. Ela alcança esse resultado iterando em todas as datas no contexto de filtro em ordem cronológica decrescente. (Por outro lado, FIRSTNONBLANK itera em ordem cronológica crescente.) Para cada data, ela avalia a expressão inserida. Quando ela encontra um resultado não em branco, a função retorna a data. Essa data é então usada para filtrar a função CALCULATE.

Observação

A expressão dela no contexto de linha é avaliada pela função LASTNONBLANK. A função CALCULATE precisa ser usada para fazer a transição do contexto de linha para o contexto de filtro a fim de avaliar corretamente a expressão.

Agora você precisa ocultar a coluna UnitsBalance da tabela Inventário. Isso impedirá que os autores de relatório resumam de maneira inadequada os saldos da unidade de instantâneo.


Unidade seguinte: Exercício – Criar cálculos DAX avançados no Power BI Desktop

Anterior Avançar