Se já construiu um modelo no Power BI com alguma dimensão, conhece o problema: começa com uma medida de Vendas, depois precisa da versão acumulada no ano, da comparação com o período anterior, do crescimento percentual... e, sem dar por isso, tem quarenta medidas que são quase todas a mesma fórmula com um pequeno embrulho de time intelligence à volta.
Essa "explosão de medidas" é um dos maiores travões à manutenção de um modelo. Cada nova métrica de negócio multiplica-se por cada variação temporal, e qualquer correção obriga a repetir a mesma alteração em dezenas de sítios. Os grupos de cálculo (calculation groups) existem precisamente para resolver isto: permitem escrever a lógica de transformação uma só vez e aplicá-la a qualquer medida.
Neste guia explicamos o que são, o problema concreto que resolvem, como funcionam por dentro, como criá-los passo a passo e que armadilhas evitar. Os exemplos usam DAX e assumem um modelo com uma tabela de datas — o cenário mais comum onde os grupos de cálculo brilham.
O que são grupos de cálculo
Um grupo de cálculo é um objeto do modelo que contém um conjunto de itens de cálculo. Cada item é uma transformação reutilizável, escrita em DAX, que se aplica à medida que estiver a ser avaliada no visual. Em vez de criar Vendas YTD, Margem YTD, Unidades YTD, cria um único item "YTD" e ele passa a funcionar com qualquer uma dessas medidas.

Na prática, o grupo de cálculo aparece como uma tabela com uma coluna (por exemplo, "Cálculo Temporal") cujos valores são os itens ("Atual", "YTD", "Período anterior", "Variação %"). O utilizador arrasta essa coluna para um segmentador ou para as colunas de uma matriz e passa a alternar a lógica sem que existam medidas físicas para cada combinação.
O problema que resolvem: a explosão de medidas
Imagine cinco métricas de base (vendas, margem, unidades, clientes, ticket médio) e seis variações temporais (atual, YTD, MTD, período homólogo, variação absoluta, variação percentual). Sem grupos de cálculo, isto são trinta medidas — e cada uma repete a mesma estrutura de CALCULATE com um filtro temporal diferente.
O custo não é só escrever trinta medidas. É mantê-las: mudar a definição de "vendas líquidas" implica tocar em seis medidas; adicionar uma sétima variação temporal implica criar mais cinco. Com um grupo de cálculo, tem cinco medidas de base e seis itens de cálculo — onze objetos em vez de trinta — e cada mudança acontece num único lugar.
Como funcionam por dentro: SELECTEDMEASURE()
A peça central é a função SELECTEDMEASURE(). Dentro de um item de cálculo, ela representa "a medida que estiver em contexto" — seja Vendas, Margem ou outra qualquer. O item define o que fazer com essa medida, sem saber qual é.
Um item "YTD" escreve-se assim:
CALCULATE( SELECTEDMEASURE(), DATESYTD( 'Calendário'[Data] ) )
Quando o utilizador coloca a medida Vendas num visual e seleciona o item "YTD", o motor substitui SELECTEDMEASURE() por Vendas e avalia o acumulado do ano. A mesma expressão serve para Margem ou Unidades. Escreveu a lógica uma vez; aplica-se a todas.
Como criar um grupo de cálculo, passo a passo
Há duas formas de criar grupos de cálculo. A mais direta hoje é dentro do próprio Power BI Desktop: na vista de Modelo, a partir das versões de 2024, existe o botão Grupo de cálculo no friso; ao criá-lo, adiciona itens e escreve o DAX de cada um. A alternativa clássica, usada há anos em contextos empresariais, é o Tabular Editor, uma ferramenta externa que continua a ser a preferida para modelos grandes.
Independentemente da ferramenta, o fluxo é o mesmo: criar o grupo, dar-lhe um nome de coluna claro, adicionar cada item de cálculo com a sua expressão em DAX, definir a ordem (ordinal) em que aparecem e, se necessário, o texto de formatação. Antes de começar, garanta que o modelo tem uma tabela de datas marcada como tal — os itens de time intelligence dependem dela.
Exemplo prático: um seletor temporal completo
Suponha que quer um único segmentador que troque entre valor atual, acumulado do ano e comparação homóloga. Cria um grupo "Cálculo Temporal" com estes itens:
- Atual:
SELECTEDMEASURE() - YTD:
CALCULATE( SELECTEDMEASURE(), DATESYTD( 'Calendário'[Data] ) ) - Homólogo:
CALCULATE( SELECTEDMEASURE(), SAMEPERIODLASTYEAR( 'Calendário'[Data] ) ) - Variação %:
DIVIDE( SELECTEDMEASURE() - CALCULATE( SELECTEDMEASURE(), SAMEPERIODLASTYEAR( 'Calendário'[Data] ) ), CALCULATE( SELECTEDMEASURE(), SAMEPERIODLASTYEAR( 'Calendário'[Data] ) ) )
Com estes quatro itens, qualquer medida do modelo ganha instantaneamente quatro perspetivas temporais. Um relatório inteiro passa a depender de meia dúzia de medidas de base em vez de uma floresta de variantes.
Format strings dinâmicos
Um detalhe que faz diferença: cada item de cálculo pode definir o seu próprio formato. O item "Variação %" deve mostrar-se como percentagem, enquanto "Atual" mostra euros. Nos grupos de cálculo, define uma expressão de formato por item (por exemplo, "0.0%" para a variação), e o número aparece corretamente formatado sem medidas adicionais. Sem isto, uma percentagem apareceria como um valor monetário e confundiria a leitura.
Precedência quando há vários grupos
Pode ter mais do que um grupo de cálculo — por exemplo, um para tempo e outro para moeda ou para tipo de valor. Quando dois grupos se aplicam à mesma medida, a ordem importa: aplicar primeiro a conversão de moeda e depois o acumulado do ano dá um resultado diferente da ordem inversa. Essa ordem é controlada pela precedência de cada grupo, um número que define quem é avaliado primeiro. Definir a precedência de forma consciente evita resultados difíceis de explicar.
Erros comuns e boas práticas
O primeiro erro é misturar medidas implícitas com grupos de cálculo. Um grupo só transforma medidas explícitas; se o utilizador arrastar um campo numérico e deixar o Power BI somar automaticamente, o item de cálculo não se aplica de forma fiável. A boa prática é desativar as agregações implícitas e trabalhar sempre com medidas nomeadas.
Outros pontos a vigiar:
- Dar nomes claros aos itens — o utilizador vê-os num segmentador, não são só código.
- Definir a ordem (ordinal) para que "Atual" apareça antes de "YTD", e não por ordem alfabética.
- Testar com várias medidas, não só com aquela em que pensou ao escrever o item.
- Documentar a precedência quando há mais de um grupo, para quem vier a seguir.
Mini-caso: de 60 medidas a 12
Uma empresa de serviços mantinha um modelo com cerca de sessenta medidas, quase todas variações temporais de seis indicadores. Cada fecho mensal trazia o mesmo ritual: alguém pedia "o mesmo, mas para outra métrica" e nasciam mais seis medidas. O ficheiro estava lento de manter e ninguém tinha a certeza de que todas as variantes usavam a mesma lógica.
A equipa reescreveu o modelo com dois grupos de cálculo — um temporal, com seis itens, e um de formato de valor. As sessenta medidas passaram a doze de base. O tempo para adicionar uma nova métrica caiu de "meia manhã a copiar e colar" para "escrever uma medida"; e, porque a lógica temporal vivia num único sítio, desapareceram as inconsistências entre variantes. Não houve nova tecnologia envolvida — apenas o objeto certo para o problema certo.
Na prática
Se o seu modelo tem famílias de medidas que só diferem numa transformação repetida — tempo, moeda, tipo de valor — os grupos de cálculo são quase sempre a resposta. Comece pequeno: um grupo temporal com três ou quatro itens, testado com duas ou três medidas de base. Ganhe confiança com SELECTEDMEASURE(), cuide dos formatos e da ordem, e só depois avance para vários grupos e precedências. O objetivo não é ter menos medidas por vaidade — é ter um modelo onde uma mudança se faz num sítio e vale para tudo.