Projetar cálculos escalonáveis
Seu modelo está estruturado. Agora, projete os cálculos que os mantêm eficientes e manuteníveis à medida que seus dados e equipe crescem. Em pequena escala, um modelo com medidas duplicadas e nomenclatura inconsistente ainda funciona, mesmo que não seja o ideal. Em escala, isso quebra. Um modelo com centenas de medidas precisa de decisões estruturais de design que impeçam a lógica duplicada, reduzam o tempo de consulta em grandes conjuntos de dados e possibilitam que novos membros da equipe entendam e estendam o modelo sem introduzir erros.
Esta unidade aborda três padrões: grupos de cálculo para reduzir a proliferação de medidas, práticas de legibilidade do DAX para facilitar a manutenção pela equipe e agregações para otimizar o desempenho de consultas em grandes tabelas de fatos.
Grupos de cálculo
Os grupos de cálculo são objetos de modelo que aplicam o mesmo padrão de cálculo em várias medidas. Em vez de criar medidas separadas para cada variação, defina o padrão uma vez e aplique-o dinamicamente.
Grupos de cálculo resolvem problemas
Considere uma organização com 50 medidas base (como Vendas Totais, Custo Total, Lucro e Unidades Vendidas). Cada medida precisa de cálculos de Ano a Data, Trimestre a Data e Mês a Data. Sem grupos de cálculo, são 50 × 3 = 150 medidas extras. Adicione comparações do ano anterior e você está analisando mais de 250 medidas a serem mantidas.
Com grupos de cálculo, você cria um grupo com itens de cálculo para cada padrão de inteligência temporal. Esses itens se aplicam a qualquer medida no modelo automaticamente.
Como funcionam os grupos de cálculo
Um grupo de cálculo contém itens de cálculo, cada um definindo uma expressão DAX que modifica a medida atual usando SELECTEDMEASURE(). Aqui está um grupo de cálculo de análise temporal:
// Year-to-Date
CALCULATE(
SELECTEDMEASURE(),
DATESYTD('Date'[Date])
)
// Quarter-to-Date
CALCULATE(
SELECTEDMEASURE(),
DATESQTD('Date'[Date])
)
// Month-to-Date
CALCULATE(
SELECTEDMEASURE(),
DATESMTD('Date'[Date])
)
Quando um usuário adiciona o grupo de cálculo a um visual, ele pode alternar entre YTD, QTD e MTD para qualquer medida (como Vendas Totais, Lucro ou Unidades Vendidas) sem medidas separadas para cada combinação.
Cadeias de caracteres de formato dinâmico
As cadeias de caracteres de formato dinâmico alteram o formato de exibição com base no contexto do item de cálculo. Por exemplo, um cálculo percentual deve ser exibido como um percentual, enquanto os cálculos de moeda devem ser exibidos como moeda, mesmo quando aplicados à mesma medida base.
// In the format string expression for a YoY % calculation item:
"0.0%"
As cadeias de caracteres de formato dinâmico reduzem a necessidade de medidas formatadas separadas e mantêm a formatação consistente em todo o modelo.
Dica
Saiba mais sobre como criar grupos de cálculo em Power BI.
Quando usar grupos de cálculo
Use grupos de cálculo quando você tiver três ou mais medidas que precisam do mesmo padrão de cálculo aplicado. Os casos de uso comuns incluem inteligência de tempo (YTD, QTD, MTD), conversão de moeda e cálculos de variação (real versus orçamento).
Disciplina de legibilidade do DAX
Em escala com uma equipe mantendo mais de 200 medidas, a legibilidade é uma decisão de design, não uma preferência pessoal. O DAX consistente e legível reduz erros de manutenção e torna mais fácil para os novos membros da equipe entenderem o modelo.
Variáveis
As variáveis armazenam resultados intermediários, melhoram a legibilidade e impedem que o mecanismo avalie a mesma expressão várias vezes:
Profit Margin =
VAR TotalRevenue = SUM(Sales[Revenue])
VAR TotalCost = SUM(Sales[Cost])
VAR ProfitAmount = TotalRevenue - TotalCost
RETURN
DIVIDE(ProfitAmount, TotalRevenue)
Sem variáveis, a mesma SUM(Sales[Revenue]) expressão pode aparecer três vezes em uma medida complexa. As variáveis avaliam a expressão uma vez e reutilizam o resultado.
Dica
Saiba mais sobre como usar variáveis para melhorar fórmulas DAX.
Convenções de nomenclatura
A nomenclatura consistente é fundamental quando seu modelo tem centenas de medidas mantidas por várias pessoas. Estabelecer convenções para:
- Nomes de medidas: use nomes claros e descritivos, como "Total de Vendas" ou "Crescimento da Receita yoY". Evite abreviações que somente o autor original entenda.
-
Nomes de variáveis: use nomes descritivos que explicam o valor intermediário (como
TotalRevenueem vez dexoutemp). - Itens de grupo de cálculo: nomeie os itens pelo que eles fazem, não como eles funcionam (como "Ano a Data" em vez de "Wrapper DATESYTD").
A nomenclatura descritiva também é importante para o consumo de IA. Quando Copilot ou um agente de dados consulta seu modelo, ele usa nomes de medida e descrições para determinar quais cálculos incluir. Uma medida chamada "Crescimento da Receita yoY" produz melhores resultados de IA do que "Calc7_v2".
Dica
Copilot no Power BI pode ajudar a escrever e explicar fórmulas DAX. Quando estiver trabalhando em medidas complexas, use Copilot para sugerir melhorias ou explicar a lógica existente.
Iteradores versus funções de agregação
As funções de iterador (SUMX, AVERAGEX, MAXX) avaliam uma expressão linha por linha sobre uma tabela. As funções de agregação (SUM, , AVERAGE) MAXoperam em uma única coluna. Em grandes volumes de dados, a escolha é importante:
- Use funções de agregação ao resumir uma única coluna. Eles são mais rápidos porque o mecanismo pode usar estruturas de dados predefinidas.
- Use iteradores quando o cálculo necessitar de uma expressão em nível de linha (como
Quantity × UnitPricepor linha).
Note
Os iteradores processam todas as linhas, o que pode afetar o desempenho em tabelas de fatos grandes.
Funções de informações para padrões defensivos
Funções de informações como ISBLANK, HASONEVALUE e ISINSCOPE criam padrões defensivos para medidas consumidas por vários relatórios com diferentes contextos de filtro.
Sales per Customer =
IF(
HASONEVALUE(Customer[CustomerID]),
DIVIDE(SUM(Sales[Amount]), 1),
DIVIDE(SUM(Sales[Amount]), DISTINCTCOUNT(Sales[CustomerID]))
)
Esses padrões impedem resultados inesperados quando medidas são usadas em contextos que o autor original não previu.
Aggregations
As agregações são tabelas de resumo que armazenam totais pré-calculados em um grão maior do que os dados de detalhes. As consultas atingem essas tabelas primeiro, o que melhora o desempenho em tabelas de fatos grandes. Quando uma consulta corresponde a uma agregação, o mecanismo retorna resultados da tabela de resumo menor em vez de verificar milhões de linhas de detalhes.
Agregações como uma decisão de design
Decidir quando adicionar agregações e em qual granularidade é uma decisão de projeto. O monitoramento e o ajuste de desempenho são preocupações operacionais separadas, mas você faz a escolha estrutural durante o design do modelo.
Considere agregações quando:
- As tabelas de fatos contêm milhões de linhas de dados e as consultas comuns resumem os dados em um nível de agregação mais alto (como totais mensais por região).
- Os usuários experimentam tempos de resposta de consulta lentos em visuais de nível de resumo.
- A maioria das interações de relatório não precisa de detalhes em nível de linha.
Como o comportamento de agregação difere pelo modo de armazenamento
No modo De importação, as agregações são armazenadas como tabelas ocultas separadas. O mecanismo roteia automaticamente as consultas correspondentes para a tabela de agregação.
No modo Direct Lake, as próprias tabelas Delta podem servir como fontes de agregação. Como o Direct Lake lê arquivos Parquet columnar, o mecanismo pode, em muitos cenários, lidar com volumes de dados maiores sem agregações. Adicione agregações somente quando os padrões de consulta confirmarem a necessidade.
Dica
Saiba mais sobre as agregações definidas por user no Power BI.