Projetar cálculos escalonáveis

Concluído

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.

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 TotalRevenue em vez de x ou temp).
  • 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 × UnitPrice por 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.