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.