JDC Tech & People

Melhores práticas no DAX – Por Renato Moreira

Este texto aborda as melhores práticas no DAX (Data Analysis Expressions) para aumentar a eficiência e a clareza no Power BI. Serão exploradas práticas como o uso de medidas explícitas, a preferência pela função COUNTROWS em vez de COUNT, a utilização da função DIVIDE para divisões seguras, a substituição das funções IFERROR() e ISERROR() pelas funções DIVIDE() e SELECTEDVALUE(), o uso da função ISBLANK() em vez de “= Blank()”, a preferência pela função SELECTEDVALUE() em vez de HASONEVALUE() e VALUES(), a utilização da função KEEPFILTERS() em vez de FILTER (ALL, VALUES e T), o uso da função SUMMARIZECOLUMNS() em vez de SUMMARIZE() e a utilização de variáveis para evitar repetição de medidas. Essas práticas visam melhorar o desempenho e tornar o código mais compreensível.

Medidas Implícitas vs Explícitas.
Quando utilizamos medidas Explícitas, ou seja, aquelas que escrevemos passo a passo, estamos utilizando a VertPeq, a enginede processamento super potente por trás do Power BI.
Diante disso, sempre utilize medidas explícitas.

 

Função COUNTROWS vs COUNT
COUNTROWS é geralmente a melhor opção por três razões:

1 – É mais eficiente e terá um desempenho melhor
Não considera BLANKs.

2 – A intenção da fórmula é mais clara e autodescritiva

Exemplos:
Sales Orders= COUNT(Sales [OrderDate])

contraSalesOrders= COUNTROWS(Sales)

Use a função DIVIDE para divisões.
Quando utilizamos a “/” é gerado uma exceção se o denominador for zero, retornando Erro por divisão por zero.

A função DIVIDE() executa internamente uma verificação para validar se o denominador é zero. Se for, retorna o valor especificado em um terceiro parâmetro (extra). Para casos de “denominador inválido”, você precisa usar a condição IF ao usar o operador “/”. A função DIVIDE() realiza verificações IF internamente.

Pare de usar IFERROR() e ISERROR().
As funções IFERROR() e ISERROR() forçam o mecanismo do Power BI a realizar uma execução passo a passo de cada linha para verificar se há erros. Não há atualmente nenhum método para indicar diretamente qual linha retornou o erro.

Ao invés disso, utilize as funções DIVIDE() e SELECTEDVALUE() executam a verificação de erros internamente e retornam os resultados esperados.

Use ISBLANK() em vez de =Blank().
Use a função interna ISBLANK() para verificar quaisquer valores em branco em vez de usar o operador de comparação = Blank().

Enquanto = Blank() retorna o valor ‘True’ para valores em branco ou stringsvazias, IsBlankverifica exclusivamente os espaços em branco.

Use SELECTEDVALUE() em vez de HASONEVALUE().
É prática comum usar HASONEVALUE() para verificar se há apenas um valor presente em uma coluna após a aplicação de segmentações e filtros. No entanto, ao fazer isso, você também precisa usar a função DAX VALUES(ColumnName) para recuperar esse valor único.

SELECTEDVALUE() executa as etapas acima internamente. Ele recupera automaticamente o valor único, se houver, e retorna um espaço em branco se houver vários valores disponíveis.

Use SELECTEDVALUE() em vez de VALUES().
A função VALUES() retorna um erro se encontrar vários valores. Frequentemente, os usuários abordam o erro usando funções Error, o que afeta negativamente o desempenho.

Em vez de usar VALUES(), use SELECTEDVALUE(). A função SELECTEDVALUE() retorna um espaço em branco se encontrar vários valores (em vez de um erro).

Use KEEPFILTERS() em vez de FILTER (ALL, VALUES e T).
A função FILTER substitui qualquer conjunto existente de filtros em uma coluna aplicada por meio de segmentações.

A função KEEPFILTER não substitui o conjunto de filtros existente.

Em vez disso, usa a interseção de valores presentes em ambos, mantendo assim o contexto atual. Use-o quando quiser manter quaisquer filtros aplicados por segmentações ou em um nível de relatório durante a execução de cálculos.

UseSUMMARIZECOLUMNS().
A função SUMMARIZE() é tradicionalmente usada para agrupar colunas e retornar agregações resultantes. No entanto, a função SUMMARIZECOLUMNS() é mais recente e mais otimizada. Use isso em vez disso.

Use SUMMARIZE() apenas para elementos agrupados de uma tabela que não tenham medidas ou agregações associadas. Por exemplo:SUMMARIZE(Table, Column1, Column2).

Use variáveis em vez de repetir medidas.
Em vez de calcular a mesma expressão várias vezes, você pode armazenar o valor da medida resultante em uma variável.

Você pode usar uma referência de variável sempre que necessário. O mesmo processo de variável se aplica a todas as instâncias em que você chama a mesma medida. As variáveis podem ajudá-lo a evitar funções repetitivas.

Conclusão:
Ao seguir as melhores práticas no uso do DAX, é possível obter benefícios significativos em termos de desempenho e clareza no desenvolvimento de fórmulas e medidas no Power BI. Utilizar medidas explícitas, preferir a função COUNTROWS em vez de COUNT, adotar a função DIVIDE para evitar erros de divisão por zero e substituir IFERROR() e ISERROR() por DIVIDE() e SELECTEDVALUE() são apenas algumas das práticas recomendadas. Ao implementar essas técnicas, os usuários podem otimizar o desempenho de seus modelos de dados, além de criar fórmulas mais legíveis e robustas. Seguir essas diretrizes resultará em uma experiência mais eficiente e eficaz ao trabalhar com o DAX no Power BI.