Skip to main content
25 September 2020
Follow Us

Calculation groups no Power BI Desktop

A nova funcionalidade “calculation groups” do Power BI é uma das melhores novidades da DAX dos últimos tempos e vai certamente mudar a forma como redigimos expressões com mais eficácia. Essencialmente, os calculation groups permitem calcular uma mesma medida em diversos contextos sem ser necessário redigir uma expressão para cada medida.

No seguinte exemplo, o nosso modelo de dados relacional contém uma tabela com datas e uma tabela transacional relacionadas, como demonstra o esquema abaixo:

CalculationGroup1

Consideremos a medida:

SomaFaturação= SUM(‘Factos’[Faturação])

Que devolve (sem surpresas) a soma da faturação.

No entanto, supondo que temos interesse em efetuar o mesmo cálculo para outros contextos temporais, por exemplo, queremos saber a faturação acumulada ao longo do ano, do mês, do trimestre e também queremos a faturação do ano anterior e a respetiva taxa de crescimento anual, isso implicaria as seguintes medidas, respetivamente:

FaturaçãoYTD = TOTALYTD([SomaFaturação], ‘Calendário’[Date])
FaturaçãoMTD = TOTALMTD([SomaFaturação], ‘Calendário’[Date])
FaturaçãoQTD = TOTALQTD([SomaFaturação], ‘Calendário’[Date])
FaturaçãoAnoAnterior =
CALCULATE ( [SomaFaturação], SAMEPERIODLASTYEAR ( 'Calendário'[Date] ) )
TaxaCrescimento =
VAR FAnoAnterior =
   CALCULATE ( [SomaFaturação], SAMEPERIODLASTYEAR ( 'Calendário'[Date] ) )
VAR FEsteAno =
   SUM ( 'Factos'[Faturação] )
RETURN
   DIVIDE ( ( FEsteAno - FAnoAnterior ), FAnoAnterior )

O resultado destas medidas, entre outras, seria o seguinte quando apresentado numa matriz:

CalculationGroup2

Mas, e se nos interessar analisar também o desempenho da margem e das vendas em unidades? Tal implicaria ter de voltar a redigir as expressões DAX acima, alterando apenas o campo de agregação.

Ou seja, teríamos de considerar as seguintes medidas:

SomaMargem = SUM ( 'Factos'[Margem] )
SomaUnidades = SUM ( 'Factos'[Unidades] )

E substituir as expressões anteriores de modo a agregarem a margem e as unidades vendidas em vez da faturação. Na prática, estaríamos a triplicar o número de expressões DAX e a repetir o trabalho!

Enter calculation groups. Enter Tabular Editor

Para evitar este trabalho e fazer uso dos calculation groups, teremos de instalar o Tabular Editor a partir do link: https://tabulareditor.com e aceder ao mesmo a partir do menu “Ferramentas Externas” do Power BI Desktop:

CalculationGroup3As ferramentas externas são também uma novidade recente do Power BI. Permitem a aplicações externas ao Power BI Desktop interagir com o modelo de dados e realizar diversas tarefas de otimização.

Acedendo ao Tabular Editor a partir do Power BI Desktop, podemos ver o modelo de dados e navegar pelas tabelas. Com o botão direito do rato podemos acrescentar um novo calculation group, como demonstra a seguinte imagem:

CalculationGroup4Vamos chamar “Time Intelligence” a este calculation group e voltar a clicar com o botão direito do rato para acrescentar um calculation item:

CalculationGroup5Os calculation items vão representar as diferentes dimensões de análise temporal que pretendemos aplicar a uma determinada medida. Neste caso, serão aplicadas à soma da faturação, à soma da margem e à soma das vendas.
Assim, podemos começar por criar o item YTD. No Editor do lado direito, acrescentamos a seguinte expressão DAX:

YTD:= TOTALYTD ( SELECTEDMEASURE (), 'Calendário'[Date] )

Note que esta expressão é exatamente igual à expressão que vimos anteriormente para calcular o valor acumulado do ano até à data da faturação. A diferença é que agora o primeiro argumento da TOTALYTD refere-se a SELECTEDMEASURE() e não à medida SomaFaturação.

Isto significa que ao incluir este calculation group numa visualização, nas colunas de uma matriz, por exemplo, o valor a calcular será aquele que o utilizador escolher arrastar para a área de valores, não sendo necessário replicar as expressões DAX para medida!

Acrescentamos de seguida os seguintes calculation items:

Atual: = SELECTEDMEASURE ()

Ano Anterior:= CALCULATE ( SELECTEDMEASURE (), SAMEPERIODLASTYEAR ( 'Calendário'[Date] ) )

Taxa de crescimento: = VAR EsteAno =
SELECTEDMEASURE ()
VAR AnoAnterior =
CALCULATE ( SELECTEDMEASURE (), SAMEPERIODLASTYEAR ( 'Calendário'[Date] ) )
RETURN
IF ( ISBLANK ( AnoAnterior ), BLANK (), DIVIDE ( EsteAno, AnoAnterior ) - 1 )

Voltando ao Power BI Desktop, depois de guardar e fechar o Tabular Editor, teremos de construir uma matriz com os seguintes valores:

CalculationGroup6

Nas colunas desta matriz figura o calculation group que acabamos de criar. E nos valores as medidas que servem de base à SELECTEDMEASURE() dos calculation items. Portanto, tudo o que possa ser agregado nas diferentes perspetivas temporais que definimos pode ser arrastado para os valores da matriz.
Neste caso, a matriz seria a seguinte:
CalculationGroup7Como vemos, o cálculo é feito corretamente. Note-se a diferente formatação da coluna “Taxa de crescimento”, que é apresentada em percentagem, ao contrário de todas as outras.

É possível definir formatos diferentes para cada calculation item. Essa definição faz-se voltando ao Tabular Editor e definir a propriedade “Format String Expression”, como demonstrado abaixo:
CalculationGroup8

Definitivamente, esta é uma das funcionalidades que merece ser aprofundada pois vai permitir aumentar significativamente a eficiência de todos os que trabalham com Power BI.

Até à próxima!


Assine a nossa newsletter e receba o nosso conteúdo diretamente no seu email