Cálculos adicionais de análise de tempo

Concluído

Existem outras funções de análise de tempo DAX que devolvem uma única data. Vai aprender sobre estas funções ao aplicá-las em dois cenários diferentes.

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

Calcular novas ocorrências

Outra utilização das funções de análise de tempo consiste em contabilizar novas ocorrências. O exemplo seguinte mostra como pode calcular o número de novos clientes de um período de tempo. Um novo cliente é contabilizado no período de tempo em que fez a primeira compra.

A sua primeira tarefa é adicionar a seguinte medida à tabela Vendas que conta o número de clientes distintos até à data (LTD). Desde sempre significa desde o começo dos tempos até à última data no contexto de filtro. Formate a medida como um número inteiro com o separador de milhares.

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 Desde Sempre ao elemento visual de matriz. Repare que esta produz um resultado de clientes distintos desde sempre até ao fim de cada mês.

Imagem a mostrar um elemento visual de matriz com agrupamento em Ano e Mês nas linhas e Receita, Receita do Ano Até à Data, % de Receita de Ano a Ano e Clientes Desde Sempre.

A DATESBETWEEN função devolve 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 fim. Quando a data de início está EM BRANCO, utiliza a primeira data na coluna de data. (Por outro lado, quando a data de fim está EM BRANCO, utiliza a última data na coluna de data.) Neste caso, a data de fim é determinada pela função MAX, que devolve a última data no contexto de filtro. Por conseguinte, se o mês de agosto de 2017 estiver no contexto de filtro, a função MAX devolverá 31 de agosto de 2017 e a DATESBETWEEN função devolverá todas as datas até 31 de agosto de 2017.

Em seguida, vai modificar a medida ao mudar o respetivo nome para Novos Clientes e adicionar uma segunda variável para armazenar a contagem de clientes distintos antes do período de tempo no contexto de filtro. A RETURN cláusula subtrai agora este valor aos clientes LTD 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

Imagem a mostrar um elemento visual de matriz com agrupamento em Ano e Mês nas linhas e Receita, Receita do Ano Até à Data, % de Receita de Ano a Ano e Novos Clientes. Os valores de Novos Clientes aparecem realçados.

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

Cálculos de instantâneo

Ocasionalmente, os dados de factos são armazenados como instantâneos no tempo. Os exemplos comuns incluem níveis de stock ou saldos de conta. Periodicamente, é carregado um instantâneo de valores na tabela.

Ao resumir valores de instantâneo (como os níveis de stock), pode resumir os valores em qualquer dimensão, com a exceção da data. A adição de contagens de níveis de stock em categorias de produtos produz um resumo significativo, mas a adição de contagens de níveis de stock entre datas não o faz. Adicionar o nível de stock de ontem ao nível de stock de hoje não é uma operação útil (a menos que queira calcular a média desse resultado).

Quando resume tabelas de instantâneos, as fórmulas de medida podem recorrer a funções de análise de tempo DAX para impor um único filtro de data.

No exemplo seguinte,vai explorar um cenário para a empresa Adventure Works. Mude para a vista de modelo e selecione o diagrama de modelo Inventário.

Imagem a mostrar um diagrama de modelo que consiste em três tabelas: Produto, Data e Inventário. As tabelas Produto e Data têm uma relação um-para-muitos com a tabela Inventário.

Repare que o diagrama mostra três tabelas: Produto, Data e Inventário. A tabela Inventário armazena instantâneos de saldos de unidades para cada data e produto. É importante que a tabela não tenha datas em falta nem entradas duplicadas para um produto na mesma data. Além disso, o último registo de instantâneo está armazenado para a data de 15 de junho de 2020.

Agora, mude para a vista de relatório e selecione a Página 2 do relatório. Adicione a coluna UnitsBalance da tabela Inventory ao elemento visual de matriz. O resumo predefinido está configurado para somar valores.

Imagem a mostrar um elemento visual de matriz intitulado Stock de Bicicletas Mountain-200 do AF2020. O Produto está agrupado nas linhas e o Mês está agrupado nas colunas. São apresentados valores elevados para cada produto e mês.

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

Agora, vai adicionar uma medida à tabela Inventário que soma o valor UnitsBalancepara uma única data. A data será a última data de cada período de tempo. É conseguido com a LASTDATE função . Formate a medida como um número inteiro com o separador de milhares.

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

Nota

Repare que a fórmula de medida utiliza a SUM função . Tem de ser utilizada uma função de agregação (as medidas não permitem referências diretas a colunas), mas dado que existe apenas uma linha para cada produto para cada data, a SUM função só funcionará numa única linha.

Adicione a medida Stock Disponível ao elemento visual de matriz. O valor de cada produto baseia-se agora no último saldo de unidades registado para cada mês.

Imagem a mostrar um elemento visual de matriz intitulado Stock de Bicicletas Mountain-200 do AF2020. O Produto está agrupado nas linhas e o Mês está agrupado nas colunas. São apresentados valores mais baixos para cada produto e mês. Junho de 2020 e o Total estão EM BRANCO.

A medida devolve valores EM BRANCO para junho de 2020 porque não existe nenhum registo para a última data em junho. De acordo com os dados, esta ainda não ocorreu.

A filtragem pela última data no contexto de filtro tem problemas inerentes: Pode não existir uma data registada porque esta ainda não ocorreu ou talvez porque os saldos de stock não são registados aos fins de semana.

O próximo passo consiste em ajustar a fórmula de medida para determinar a última data que tem um resultado que não está EM BRANCO e, em seguida, filtrar por essa data. Pode realizar esta tarefa com a LASTNONBLANK função DAX.

Utilize a definição de medida seguinte para modificar a medida Stock Disponível.

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

No elemento visual de matriz, repare nos valores de junho de 2020 e no total (que representa o ano inteiro).

Imagem a mostrar que o elemento visual de matriz tem agora valores para junho de 2020 e o Total.

A LASTNONBLANK função é uma função de iterador. Devolve a última data que produz um resultado que não está EM BRANCO. Alcança este resultado ao iterar em todas as datas no contexto de filtro por ordem cronológica descendente. (Por outro lado, itera FIRSTNONBLANK por ordem cronológica ascendente.) Para cada data, avalia a expressão transmitida. Quando encontra um resultado que não está EM BRANCO, a função devolve a data. Essa data é então utilizada para filtrar a CALCULATE função.

Nota

A LASTNONBLANK função avalia a expressão no contexto de linha. A CALCULATE função tem de ser utilizada para fazer a transição do contexto de linha para filtrar o contexto para avaliar corretamente a expressão.

Agora, deve ocultar a coluna UnitsBalance da tabela Inventário. Tal impedirá que os criadores do relatório resumam de forma inadequada os saldos de unidades de instantâneo.