Diferença dinâmica de datas com Field Parameters

Com a possibilidade de criação de Field Parameters, temos o potencial de realizar diversas tarefas no Power BI, sendo que o dinamismo e flexibilidade desta funcionalidade aumenta a facilidade das soluções.

Outro dia tive uma questão sobre como se poderia criar uma diferença entre datas de forma dinâmica, ou seja, tendo um modelo com várias colunas de datas como poderíamos selecionar duas datas e encontrar o número de dias entre as mesmas sem existir a necessidade de criar todas as variações.

Vamos considerar a tabela abaixo:

Para os dados apresentados e de forma a fazer o cálculo dinâmico teríamos de realizar 6 medidas diferentes assim com uma medida adicional que permitisse o cálculo que obtivesse os valores de acordo com a seleção.

No entanto, com a utilização dos Field Parameters, podemos criar uma única tabela e uma única métrica, e temos a vantagem de podermos ter a introdução das colunas necessárias nas visualizações caso seja necessário.

Para a criação dos Fields Parameters vamos optar por selecionar todas as colunas de data:

Com base neste parâmetro de datas podemos agora criar a nossa métrica:

Date Difference Calculation = 
VAR TempTable =
    SUMMARIZE (
        Fact_Table,
        Fact_Table[Category],
        "FirstDateSelected",
            SWITCH (
                MIN ( 'Date Selection'[Date Selection Order] ),
                0, DISTINCT ( Fact_Table[Date 1] ),
                1, DISTINCT ( Fact_Table[Date 2] ),
                2, DISTINCT ( Fact_Table[Date 3] ),
                3, DISTINCT ( Fact_Table[Date 4] )
            ),
        "LastDateSelected",
            SWITCH (
                MAX ( 'Date Selection'[Date Selection Order] ),
                0, DISTINCT ( Fact_Table[Date 1] ),
                1, DISTINCT ( Fact_Table[Date 2] ),
                2, DISTINCT ( Fact_Table[Date 3] ),
                3, DISTINCT ( Fact_Table[Date 4] )
            )
    )
RETURN
    SUMX ( TempTable, DATEDIFF ( [FirstDateSelected], [LastDateSelected], DAY ) )

No cálculo da métrica obtemos o valor da primeira e da última data baseado na escolha da tabela de parâmetros, obtendo o resultado abaixo:

Como se pode verificar o cálculo realizado faz a diferença entre a Date 1 e Date 4, uma vez que se trata dos valores mínimos e máximos da seleção. Caso queiramos forçar que o utilizador escolha duas datas podemos “envolver” o resultado numa lógica de IF:

       IF (
        COUNTROWS ( 'Date Selection' ) = 2,
        SUMX ( TempTable, DATEDIFF ( [FirstDateSelected], [LastDateSelected], DAY ) ),
        "Calculation is performed with 2 selected dates only"
    )

Outra variação desta métrica é o cálculo das datas de forma sequencial por exemplo se estivermos a falar de etapas de um processo ou projeto:

Date 1 – Date 2

Date 2 – Date 3

Date 3 – Date 4

Nesta situação temos de acrescentar uma coluna na nossa tabela de Parâmetros e alterar a nossa fórmula para:

* Tabela de Parâmetros
Date Selection = {
    ("Date 1", NAMEOF('Fact_Table'[Date 1]), 0, "To 1st Level"),
    ("Date 2", NAMEOF('Fact_Table'[Date 2]), 1, "To 2nd Level"),
    ("Date 3", NAMEOF('Fact_Table'[Date 3]), 2, "To 3rd Level"),
    ("Date 4", NAMEOF('Fact_Table'[Date 4]), 3, "To 4th Level")
}

* Medida de variação
Date Difference Calculation Previous Level = 
VAR TempTable =
    SUMMARIZE (
        Fact_Table,
        Fact_Table[Category],
        "FirstDateSelected",
            SWITCH (
                SELECTEDVALUE( 'Date Selection'[Date Selection Order] ),
                1, DISTINCT ( Fact_Table[Date 1] ),
                2, DISTINCT ( Fact_Table[Date 2] ),
                3, DISTINCT ( Fact_Table[Date 3] )
                ),
        "LastDateSelected",
            SWITCH (
                SELECTEDVALUE( 'Date Selection'[Date Selection Order] ),
                0, DISTINCT ( Fact_Table[Date 1] ),
                1, DISTINCT ( Fact_Table[Date 2] ),
                2, DISTINCT ( Fact_Table[Date 3] ),
                3, DISTINCT ( Fact_Table[Date 4] )
            )
    )
RETURN
    SUMX ( TempTable, DATEDIFF ( [FirstDateSelected], [LastDateSelected], DAY ) ) + 0

Assim podemos utilizar o valor numa matriz ou num gráfico de barras:

Como podem verificar com a utilização do Field Parameters, conseguimos flexibilizar os nossos cálculos e reduzir o número de métricas a criar no nosso modelo, apesar de termos de criar na nossa medida as variáveis com a seleção das datas a sintaxe é mais simples de compreender e de manter.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s

%d bloggers like this: