Utilize variáveis para melhorar as suas fórmulas DAX
Como modelador de dados, escrever and depurar alguns cálculos DAX pode ser um desafio. É comum que requisitos de cálculo complexos geralmente envolvam a escrita de expressões compostas or complexas. Expressões compostas podem envolver o uso de muitas funções aninhadas and possivelmente a reutilização da lógica de expressão.
O uso de variáveis em suas fórmulas DAX pode ajudá-lo a escrever cálculos mais complexos and eficientes. As variáveis podem melhorar o desempenho, a fiabilidade, a legibilidade and reduzir a complexidade.
Neste artigo, demonstraremos os três first benefícios usando um exemplo measure para o crescimento das vendas yearacima doyear (YoY). (A fórmula para o crescimento das vendas YoY é as vendas do período, menos as vendas para o mesmo período lastyear, dividido pelas vendas para o mesmo período lastyear.)
Vamos começar com a seguinte definição measure.
Sales YoY Growth % =
DIVIDE(
([Sales] - CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))),
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
)
O measure produz o resultado correto, ainda assim, vamos ver como now pode ser melhorado.
Melhorar o desempenho
Observe que a fórmula repete a expressão que calcula "mesmo período lastyear". Esta fórmula é ineficiente, pois exige que Power BI repita evaluate a mesma expressão duas vezes. A definição de measure pode ser tornada mais eficiente usando uma variável, VAR.
A seguinte definição measure representa uma melhoria. Ele usa uma expressão para atribuir o resultado "mesmo período lastyear" a uma variável chamada SalesPriorYear. A variável é então usada duas vezes na expressão RETURN.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
O measure continua a produzir o resultado correto, and o faz em cerca de metade da consulta time.
Melhorar a legibilidade
Na definição previousmeasure, observe como a escolha do nome da variável torna a expressão RETURN mais simples de entender. A expressão and é curta e auto-descritiva.
Simplifique a depuração
As variáveis também podem ajudá-lo a depurar uma fórmula. Para testar uma expressão atribuída a uma variável, reescreva temporariamente a expressão RETURN para produzir a variável.
A definição de measure a seguir devolve apenas a variável SalesPriorYear. Note que ele comenta a expressão RETURN desejada. Essa técnica permite que você reverta facilmente assim que a depuração for concluída.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
--DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
SalesPriorYear
Reduza a complexidade
Em earlier versões do DAX, as variáveis ainda not eram suportadas. Expressões complexas que introduziram novos contextos de filter foram necessárias para usar as funções EARLIERorEARLIESTDAX para fazer referência a contextos externos filter. Infelizmente, os modeladores de dados acharam essas funções difíceis de entender and usar.
As variáveis são sempre avaliadas fora do filters a que se aplica a sua expressão RETURN. Por esse motivo, quando você usa uma variável dentro de um contexto de filter modificado, ela alcança o mesmo resultado que a função EARLIEST. A utilização das funções EARLIERorEARLIEST pode, por conseguinte, ser evitada. Isso significa que você now pode escrever fórmulas menos complexas and mais fáceis de entender.
Considere a seguinte definição de coluna calculada adicionada à tabela Subcategoria. Ele avalia um rank para cada subcategoria product com base na coluna Subcategoria Vendasvalues.
Subcategory Sales Rank =
COUNTROWS(
FILTER(
Subcategory,
EARLIER(Subcategory[Subcategory Sales]) < Subcategory[Subcategory Sales]
)
) + 1
A função EARLIER é usada para referir-se à coluna Subcategoria de Vendasvalueno contexto da linha atual.
A definição de coluna calculada pode ser melhorada usando uma variável em vez da função EARLIER. A variável CurrentSubcategorySales armazena a coluna Subcategory Salesvalueno contexto de linha atual, and a expressão RETURN a usa dentro de um contexto de filter modificado.
Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
COUNTROWS(
FILTER(
Subcategory,
CurrentSubcategorySales < Subcategory[Subcategory Sales]
)
) + 1
Related conteúdo
- VAR DAX artigo
- Aprendizagem path: usar no DAXPower BI Desktop
- Dúvidas? Tente perguntar à comunidade de BI Power