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:
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:
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:
As 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:
Vamos chamar “Time Intelligence” a este calculation group e voltar a clicar com o botão direito do rato para acrescentar um calculation item:
Os 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:
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:
Como 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:
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!