Conceber cálculos escaláveis
O seu modelo é estruturado. Agora desenhe os cálculos que o mantenham eficiente e sustentável à medida que os seus dados e equipa crescem. Em pequena escala, um modelo com medidas duplicadas e nomes inconsistentes ainda funciona, mesmo que não seja o ideal. Quando dimensionado, quebra. Um modelo com centenas de medidas necessita de decisões estruturais de design que previnam lógica duplicada, reduzam o tempo de consulta em grandes conjuntos de dados e tornem possível que novos membros compreendam e expandam o modelo sem introduzir erros.
Esta unidade cobre três padrões: grupos de cálculo para reduzir a proliferação de medidas, disciplina de legibilidade DAX para manutenção pela equipa, e agregações para desempenho de consultas em grandes tabelas factuais.
Grupos de cálculos
Grupos de cálculo são objetos modelo que aplicam o mesmo padrão de cálculo em múltiplas medidas. Em vez de criares medidas separadas para cada variação, defines o padrão uma vez e aplicas-no dinamicamente.
Os grupos de cálculo resolvem o problema
Considere uma organização com 50 medidas base (como Vendas Totais, Custo Total, Lucro e Unidades Vendidas). Cada medida necessita de cálculos do início do ano até à data atual, do início do trimestre até à data atual, e do início do mês até à data atual. Sem grupos de cálculo, são 50 × 3 = 150 medidas extra. Juntando comparações de anos anteriores, tens de manter 250+ medidas.
Com grupos de cálculo, cria-se um grupo com itens de cálculo para cada padrão de inteligência temporal. Esses itens aplicam-se automaticamente a qualquer medida no modelo.
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 inteligência 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 utilizador adiciona o grupo de cálculo a um visual, 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 strings 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 apresentado como percentagem, enquanto os cálculos de moeda devem ser apresentados como moeda, mesmo quando aplicados à mesma medida base.
// In the format string expression for a YoY % calculation item:
"0.0%"
As strings de formato dinâmico reduzem a necessidade de medidas formatadas separadas e mantêm a formatação consistente em todo o modelo.
Tip
Saiba mais sobre como criar grupos de cálculo em Power BI.
Quando usar grupos de cálculo
Use grupos de cálculo quando tiver três ou mais medidas que necessitem de aplicar o mesmo padrão de cálculo. Casos de uso comuns incluem inteligência temporal (YTD, QTD, MTD), conversão de moeda e cálculos de variância (real vs. budget).
Disciplina de legibilidade DAX
À escala com uma equipa que mantém mais de 200 medidas, a legibilidade é uma decisão de design e não uma preferência pessoal. Um DAX consistente e legível reduz erros de manutenção e facilita a compreensão do modelo pelos novos membros da equipa.
Variáveis
As variáveis armazenam resultados intermédios, melhoram a legibilidade e impedem que o motor 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 numa medida complexa. As variáveis avaliam a expressão uma vez e reutilizam o resultado.
Tip
Saiba mais sobre como usar variáveis para melhorar fórmulas DAX.
Convenções de nomenclatura
A nomeação consistente é fundamental quando o seu modelo tem centenas de medidas mantidas por várias pessoas. Estabelecer convenções para:
- Mede nomes: Use nomes claros e descritivos como "Vendas Totais" ou "Crescimento Anual de Receitas." Evite abreviaturas que só o autor original compreenda.
-
Nomes das variáveis: Use nomes descritivos que expliquem o valor intermédio (como
TotalRevenueem vez dexoutemp). - Itens do grupo de cálculo: Nomeie os itens pelo que fazem, não pela forma como funcionam (como "Ano até à Data" em vez de "Wrapper DATESYTD").
A designação descritiva também é importante para a utilização de IA. Quando o Copilot ou um agente de dados consulta o seu modelo, utiliza nomes de medidas e descrições para determinar quais os cálculos a incluir. Uma medida chamada "Crescimento Anual de Receitas" produz melhores resultados em IA do que "Calc7_v2".
Tip
O Copilot no Power BI pode ajudar a escrever e explicar fórmulas DAX. Quando estiveres a trabalhar em medidas complexas, usa o Copilot para sugerir melhorias ou explicar a lógica existente.
Iteradores vs. funções de agregação
As funções iteradoras (SUMX, AVERAGEX, MAXX) avaliam uma expressão linha a linha sobre uma tabela. As funções de agregação (SUM, AVERAGE, MAX) operam numa única coluna. Em volumes de dados elevados, a escolha é importante:
- Usa funções de agregação quando estiveres a resumir uma única coluna. São mais rápidos porque o motor pode usar estruturas de dados pré-construídas.
- Use iteradores quando o cálculo requer uma expressão ao nível da linha (como
Quantity × UnitPricepor linha).
Observação
Os iteradores processam cada linha, o que pode afetar o desempenho em grandes tabelas de factos.
Funções de informação para padrões defensivos
Funções de informação como ISBLANK, HASONEVALUE, e ISINSCOPE criam padrões defensivos para medidas consumidas por múltiplos 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]))
)
Estes padrões impedem resultados inesperados quando as medidas são usadas em contextos que o autor original não antecipou.
Aggregations
As agregações são tabelas resumidas que armazenam totais pré-calculados com um grão superior ao dos dados detalhados. As consultas são as primeiras a atingir estas tabelas, o que melhora o desempenho em tabelas de factos grandes. Quando uma consulta corresponde a uma agregação, o motor devolve resultados da tabela de resumo mais pequena em vez de analisar milhões de linhas de detalhe.
Agregações como decisão de conceção
Decidir quando adicionar agregações e em que granularidade é uma decisão de design. A monitorização de desempenho e a afinação são preocupações operacionais separadas, mas tu fazes a escolha estrutural durante o desenho do modelo.
Considere agregações quando:
- As tabelas de factos contêm milhões de linhas e as consultas usuais resumem os dados a um nível de detalhe mais elevado (como totais mensais por região).
- Os utilizadores experienciam tempos de resposta lentos às consultas em visuais ao nível de resumo.
- A maioria das interações com relatórios não precisa de detalhes ao nível da linha.
Como o comportamento da agregação difere consoante o modo de armazenamento
No modo Importação, as agregações são armazenadas como tabelas ocultas separadas. O motor encaminha 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ê ficheiros Parquet colunares, o motor pode lidar com volumes de dados maiores sem agregações em muitos cenários. Adicione agregações apenas quando os padrões de consulta confirmam a necessidade.
Tip
Saiba mais sobre agregações definidas pelo utilizador em Power BI.