Visual calculations no Power BI – mais uma inovação radical
E muito bem-vinda, parece, pois uma das maiores dificuldades na aprendizagem do Power BI é dominar a linguagem DAX (Data Analysis Expressions). É uma linguagem muito poderosa para analisar dados, mas difícil de aprender devido à sua abstração e rigidez no que toca à estrutura do modelo de dados. A nova funcionalidade visual calculations, ainda em pré-visualização no Power BI Desktop, torna-a mais próxima daquilo que já conhecemos nas fórmulas do Excel, permitindo realizar os cálculos de análise diretamente nas visualizações do Power BI.
Ativar as visual calculations no Power BI
Estando ainda em modo de pré-visualização, o primeiro passo para que possam ser utilizadas será ativá-las nas opções do Power BI Desktop. É este o método de introdução preferido de novas funcionalidades da Microsoft, antes de um lançamento oficial.
O que é diferente da DAX quanto a visual calculations?
As visual calculations são uma forma mais prática de calcular alguns indicadores típicos que encontramos em muitos projetos, como totais acumulados, médias móveis, percentagem de um total, entre outras.
Na DAX, este tipo de cálculos requer um modelo de dados e, no caso das medidas “time Intelligence”, aquelas que analisam a dimensão temporal, como por exemplo, os cálculos que comparam o período atual com o período homólogo, esse modelo de dados deverá conter uma tabela calendário que filtrará todas as transações do modelo de dados. É sobre o modelo de dados que a DAX executa os cálculos.
Por outro lado, as visual calculations incidem sobre as visualizações, como que esquecendo que existe um modelo de dados por detrás, simplificando muitíssimo o raciocínio de quem está a desenvolver. Portanto, não são armazenadas no modelo de dados, como a DAX, mas sim nas visualizações onde são criadas.
Não podemos esquecer, no entanto, que para que uma determinada visualização seja produzida, será necessário um modelo de dados, aqui nada muda. O contexto de filtro aplicado à visualização em causa mantém-se, mas a complexidade na definição da visual calculation é muito inferior à da criação da medida DAX.
Vejamos um exemplo prático de visual calculations – a skate store
Para este exemplo prático, vamos usar um modelo de demonstração de uma loja de skate – a skateboard store e analisar a página referente às vendas:
Este modelo pode ser transferido a partir do repositório do Github com diversos modelos de dados e relatórios de exemplo.
Na página acima apresentada, vemos algumas visualizações típicas de análise de vendas. No primeiro gráfico estão representadas as vendas por categoria de produto e nos seguintes temos as vendas por loja e uma série temporal.
Selecionando o primeiro gráfico, o processo para criar uma visual calculation, será simples: clicar no respetivo botão:
Então, teremos uma área inferior à visualização, que se expande para o modo de detalhe, onde constam a barra de fórmulas e uma pré-visualização dos dados e do cálculo a realizar:
As expressões que permitem criar as visual calculations seguem modelos (templates) com padrões pré-definidos, que são os seguintes:
- Total acumulado
- Média móvel
- Percentagem da categoria de nível superior
- Percentagem do total geral
- Média dos items de nível inferior
- Comparação com o item anterior
- Comparação com o item seguinte
- Comparação com o primeiro item
- Comparação com o último item
Além destes modelos, também é possível utilizar a maior parte das funções DAX.
Assim, para calcular o valor de percentagem de cada item desta visualização em relação à categoria a que cada um pertence, poderíamos recorrer ao modelo “Percent of parent”:
A expressão é preenchida de forma automática, sendo necessário ajustá-la para que fique como desejado. Teríamos, por defeito, a seguinte:
Percent of parent = DIVIDE([Field], COLLAPSE([Field], Axis))
Nesta expressão, temos:
- A função DIVIDE que divide um valor por outro
- A função COLLAPSE que é específica das visual calculations e que devolve o contexto a um nível superior ao que é determinado pela visualização.
A função acima poderia ser substituída pela seguinte:
Percent of parent = DIVIDE([Net Sales], COLLAPSE([Net Sales], ROWS))
Repare-se no último argumento (opcional) da função COLLAPSE, o argumento ROWS. Este indica que o cálculo deve ser feito na vertical por todas as linhas de cima para baixo. É interessante verificar que se ignora por completo o modelo de dados e o contexto de filtro aplicado. Tudo o que interessa é a visualização e a forma como está representada.
O resultado desta expressão seria o seguinte:
Cada valor representa a percentagem em relação a todos os produtos. Por defeito, a visual calculation é apresentada no eixo onde estão os valores das Net Sales:
No gráfico em questão, os valores são apresentados nas barras, mas são praticamente invisíveis, pois estão numa escala completamente diferente:
Podemos contornar o problema posicionando a percentagem nas tooltips, tornando-as assim mais úteis:
Nesta solução seria conveniente formatar os valores em percentagem para que fossem mais visíveis. É possível fazê-lo usando a função FORMAT, alterando a expressão anterior para:
Percent of parent = FORMAT(DIVIDE([Net Sales], COLLAPSE([Net Sales], ROWS)), "0.00%")
Que permitiria apresentar as tooltips devidamente formatadas.
Outra opção poderia ser substituir a visualização de gráfico de barras por uma matriz, por exemplo, onde seria possível visualizar diretamente os valores lado a lado. Note-se que esta matriz contém três níveis nas linhas: “Category”, “Segment” e “Product”, o que permitiria fazer drill-down ou drill-up ajusando os valores das Net Sales e da percentagem em relação ao nível da hierarquia superior:
Como se comportam as visual calculations em termos de desempenho e como se comparam com a DAX é algo que tentarei explorar num próximo artigo.