Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
Leonardo Karpinski
Vou fazer um tutorial completo da linguagem DAX e um desafio no final usando tudo
que demonstrei no tutorial. Além disso, o desafio é baseado em um problema real que
um dos meus clientes teve.
Então, utilizamos a linguagem DAX para criar todos os nosso cálculos do projeto. DAX
é uma sigla criada para Data Analysis eXpressions e tem bastante expressões que
lembra as do Excel, porém todas as fórmulas são em Inglês.
Ahhh mas você deve estar pensando “Onde que eu posso usar esse tal do DAX!??”.
Existem 3 situações onde o DAX aparece:
Colunas calculadas
Cálculo de medidas
Tabelas
Bom, legal!! Mas você pode querer saber também qual é o maior poder do DAX? O
maior poder do DAX é para criar medidas, mas vou mostrar exemplo de todos.
Colunas
Vamos fazer um exemplo para criar uma coluna calculada:
Etapas:
Em Dados, selecionar a tabela fVendas → Em "Ferramentas de coluna"
clicar em "Nova coluna"
Fórmula DAX:
Valor Venda $ =
fVendas[Valor Venda] / 4.2
O que acontece quando fazemos isso? Acabamos de aumentar nosso modelo deixando o
arquivo maior, afetando o processamento (diminuindo performance). Para exemplificar
outro problema de colunas, vamos analisar uma nova coluna criada:
Etapas:
Em "Dados", selecionar a tabela dProduto → Em "Ferramentas de coluna"
clicar em "Nova coluna" → Selecionar a medida [Total Vendas]
Fórmula DAX:
Total Vendas =
SUM ( fVendas[Valor Venda] )
Com esses valores vamos montar um gráfico de colunas com uma segmentação por data
na página:
Figura 3: Criação dos Gráficos para Análise
Etapas:
Gráfico de colunas clusterizado: Eixo → Produto, Valores → Valor
Vendas (soma)
Segmentação de dados: Campo → Ano
Nada! Exatamente isso….nada! Isso acontece, pois a coluna criada não é influenciada
pela alteração do contexto de data (são estáticas). Ou seja, temos mais um ponto de
atenção aqui.
O terceiro problema, que se deve ter muita atenção, é com o nível de agregação das
colunas. Alguns exemplos de fórmulas onde pode ocorrer esse problema, são: contagem
distintas, média, percentuais.
De forma geral, as medidas são utilizadas nos campos de eixo e de segmentação nos
visuais.
Medidas
Existem 2 tipos de medidas as implícitas e explícitas. A implícita funciona quando eu
pego uma coluna de valores (numéricos) e utilizo em algum visual. Automaticamente o
Power BI faz uma conta (figura abaixo com exemplos) com esse campo quando vai para
o visual.
Figura 5: Cartões com o campo de ID Produto
Etapas:
Em "Visualizações" clicar em "Cartão" → Para todos os cartões o
colocar "ID Produto" em "Campos"
Figura 6: Tipos de conta para mostrar no visual
As medidas explícitas, são contas feitas a partir de fórmulas feitas em DAX! É uma
ótima prática (sim, melhor do que boa…hehe) criar medidas explícitas para os valores
que serão usados nos visuais.
Etapas:
1. Clicar com o botão direito em cima da tabela ou pasta onde a medida
será criada → Clicar em "Nova medida"
ou
2. Com a tabela ou pasta onde será criada selecionada clicar em
"Página Inicial" → Clicar em "Nova medida"
Fórmula DAX:
Faturamento =
SUM ( fVendas[Valor Venda] )
Performance
Nomenclatura
Referenciar a medida em outras medidas do relatório
Contextos de avaliação
No Power BI, as medidas são dinâmicas (como falei anteriormente). Comparando com o
Excel, aqui você não precisa fazer o SOMASE e especificar algum argumento. As
informações passadas em linhas/colunas/eixos/segmentação irão formar um contexto
que a medida respeita. Acredite em mim, não é difícil….mas necessita prática.
Vamos fazer um exemplo? Imagine que você queira analisar os valores de faturamento
por subcategoria de produto. No Power BI não precisamos especificar em uma fórmula
isso, a própria medida irá respeitar o contexto do visual:
Figura 9: Tabela de apoio (contextos para medida)
Etapas:
Em "Visualizações" selecionar "Tabela" → Atribuir os campos conforme
imagem
Você lembra como é calculado o faturamento? Não? Vamos olhar novamente a fórmula
de faturamento:
Faturamento =
SUM ( fVendas[Valor Venda] )
Veja que em nenhum momento especificamos algo sobre subcategoria. Porém, a medida
respeita esse contexto dentro do visual.
Etapas:
Em "Visualizações" selecionar "Tabela" → Atribuir os campos conforme
imagem
E nesse caso, quantos contextos de avaliação temos? Aqui temos 1 filtro, mas temos 4
contextos de avaliação!!! Os 4, são: France, Germany, United Kingdom e Total.
Legal, né?!! Conheço vocês e devem estar se perguntando….”O que o Power BI está
fazendo?” Bom, nada melhor que um exemplo. Vamos analisar France (França)
separadamente. France é um valor da coluna País na tabela dCliente. Então para o
contexto de France é como se fosse aplicado um filtro na coluna dessa tabela.
Para ficar claro, vamos em dados aplicar esse filtro na nossa tabela:
Figura 11: Exemplo de contexto filtrando a tabela dCliente
Voltando no nosso caso, agora fica mais fácil entender que para cada linhas de País
temos um contexto. Pense no que vimos até aqui. Quantas linhas de País estão sendo
avaliadas no Total? 360 linhas que é o total de clientes (olhe novamente a figura 11 no
canto inferior esquerdo).
Outro exemplo! Imagine que você queira saber quantos clientes diferentes compraram
da empresa (cobertura de clientes/positivação de clientes). Isso pode ser feito fazendo
uma nova medida com a contagem de valores distintas de clientes
(DISTINCTCOUNT):
Fórmula DAX:
Positivação Clientes =
DISTINCTCOUNT ( fVendas[ID Cliente] )
Figura 13: Tabela de apoio 3 (contexto de medidas)
Lembre-se que o total não é a soma das outras linhas. Ela é o resultado da medida (nesse
caso “Positivação Clientes”) sem nenhum filtro aplicado. É racional pensarmos que é
possível 192 clientes diferentes terem comprado Headphones e 90 clientes diferentes
terem comprado MP4&MP3. Ou seja, existem clientes que compraram tanto
Headphones quanto MP4&MP3 e no total eles não devem ser contados duas vezes.
Calculate
Essa é nossa rainha do DAX!!! Ela é poderosa, porque pode alterar contextos de
avaliação.
Imagine que no visual de faturamento por país (aquele que criamos agora pouco) que
criamos queremos avaliar esse faturamento comparado ao ano de 2018. Assim, teremos
duas colunas de faturamento. Para podermos criar um contexto diferente entre as duas
colunas precisamos do auxilio da CALCULATE. Vamos criar a nova medida para o
contexto de 2018:
Fórmula DAX:
Faturamento 2018 =
CALCULATE ( [Faturamento]; dCalendario[Ano] = 2018 )
Figura 14: Tabela de apoio 4 (contexto com CALCULATE)
Etapas:
1. Criar a medida de Faturamento 2018
2. Em "Visualizações" selecionar "Tabela" → Atribuir os campos
conforme imagem
Aqui é bom que fica claro que temos contextos visíveis (as linhas de País) e também o
contexto adicional mudado com o auxilio da CALCULATE para a coluna de
Faturamento 2018. O valor de faturamento para essa coluna é naturalmente menor, pois
o intervalo de tempo é menor.
Outra forma de utilizar a função CALCULATE é para remover filtros. Esse recurso é
bastante utilizado para comparar valores com seus totais, por exemplo. Imagine que
você queira apresentar o percentual do faturamento de um país frente ao total. Esse é um
exemplo clássico para usar a nossa rainha CALCULATE junto com ALL que é o
argumento que permite sair de contextos aplicados pelo visual.
Com a tabela que temos, podemos fazer um comparativo entre uma medida com o ALL
(que saí do contexto de avaliação) com outra medida que respeita o contexto. Para isso,
vamos fazer:
Fórmula DAX:
Faturamento Fixo ALL =
CALCULATE ( [Faturamento]; ALL ( fVendas ) )
Figura 15: Tabela de apoio 5 (avaliação de contexto com e sem ALL)
Etapas:
1. Criar a medida de Faturamento Fixo ALL
2. Em "Visualizações" selecionar "Tabela" → Atribuir os campos
conforme imagem
Bom, com esse valor fixo podemos criar nossa medida de percentual do resultado pelo
total com outra medida e utilizar no visual:
Fórmula DAX:
% Faturamento =
DIVIDE ( [Faturamento]; [Faturamento Fixo ALL] )
Para testar seu conhecimento quero que me responda o que acontece com os valores da
coluna de Faturamento se usarmos uma segmentação de dados na página para o ano de
2018:
Podemos fazer uma nova medida utilizando ALL, mas agora para ignorar filtros na
tabela de clientes:
Fórmula DAX:
Faturamento Fixo ALL =
CALCULATE ( [Faturamento]; ALL ( dCliente ) )
Figura 19: Tabela com a nova medida de Faturamento Fixo ALL
Perceba que aqui os valores foram filtrados! Aqui foi ignorado os filtros de contexto de
dClientes (que não contém datas).
Importante:
Treine bastante com ALL em seus projetos para entender e praticar os conceitos dessa
função que é essencial em muitos casos.
Além de tudo isso, você consegue usar mais de um ALL em suas fórmulas. Vamos fazer
2 exemplos! No primeiro iremos usar ALL para ignorar das colunas específicas da
mesma tabela e no segundo para ignorar duas tabelas por completo:
Fórmula DAX:
Faturamento Fixo ALL =
CALCULATE ( [Faturamento]; ALL ( dCliente[País]; dCliente[I
D Cliente] ) )
Fórmula DAX:
Faturamento Fixo ALL =
CALCULATE ( [Faturamento]; ALL ( dCliente ); ALL ( dProduto
) )
Imagine agora um cenário onde você quer avaliar cada um dos países com um país em
específico ( no nosso caso será País = França). Acredito que seja uma avaliação bem
comum no seu dia a dia ter que comparar os valores entre unidades, e isso é bem
parecido com o que vamos fazer.
Precisamos da medida que ignora todos os filtros e o país é França:
Fórmula DAX:
Faturamento France Fixo =
CALCULATE ( [Faturamento]; ALL ( dCliente ); dCliente[País]
= “France” )
Etapas:
1. Criar a medida de Faturamento France Fixo
2. Em "Visualizações" selecionar "Tabela" → Atribuir os campos
conforme imagem
Existem diversas formas de escrever o mesmo raciocínio em DAX com ALL. Uma das
formas mais utilizadas é com a função FILTER:
Fórmula DAX:
Faturamento France Fixo =
CALCULATE (
[Faturamento];
FILTER ( ALL ( dCliente ); dCliente[País] = “France” )
)
Além da ALL, temos outra função bem importante para avaliação de contextos a
ALLSELECTED. Essa função remove filtros de contexto de colunas e linhas na
consulta atual, mantendo todos os outros filtros externos (segmentação de dados na
página, por exemplo). Vamos fazer uma medida e utilizar na nossa tabela de
comparação:
Fórmula DAX:
Faturamento Fixo ALLSELECTED =
CALCULATE ( [Faturamento]; ALLSELECTED ( dCliente ) )
Figura 22: Tabela comparativa entre ALL e ALLSELECTED
Etapas:
1. Alterar medida de Faturamento France Fixo com FILTER
2. Criar a medida de Faturamento Fixo ALLSELECTED
3. Em "Visualizações" selecionar "Tabela" → Atribuir os campos
conforme imagem
Fórmula DAX:
Faturamento VALUES =
CALCULATE ( [Faturamento]; VALUES ( dCliente ) )
Figura 23: Tabela comparativa entre Faturamento e Faturamento com VALUES
Etapas:
1. Criar a medida de Faturamento VALUES
2. Em "Visualizações" selecionar "Tabela" → Atribuir os campos
conforme imagem
Fórmula DAX:
Churn =
SUM ( fChurn[Valor Mensal] )
Para analisar esse indicador, vamos comparar o realizado da data com a média do valor
de Churn. No “Análise” do visual de gráfico, o Power BI dá a opção de usarmos uma
linha média como indicador:
Etapas:
1. Criar a medida de Churn
2. Em "Visualizações" selecionar "Gráfico de área" → Atribuir os
campos conforme imagem
3. Em "Análise" clicar em "Adicionar" → Alterar cor e transparência
Em DAX, vamos criar o Churn que respeite os limites de mês por partes. Primeiro
precisamos do total do Churn:
Fórmula DAX:
Churn Médio =
CALCULATE ( [Churn]; ALL ( dCalendario ) )
Agora vamos dividir esse valor total pelos dias que tiveram Chrun (pode ser diferente
do total de dias do período, pois algum dia pode não ter tido Churn):
Churn Médio =
CALCULATE (
[Churn] / DISTINCTCOUNT ( fChurn[Data Churn] );
ALL ( dCalendario )
)
Etapas:
1. Criar a medida de Churn Médio
2. Atribuir a medida Churn Médio em Valores
Imagine o cenário que você utiliza segmentação de datas na sua página, e que esse
gráfico respeite os filtros. Qual função podemos utilizar para que funcione corretamente
esse contexto? Lembra da ALLSLECTED?? É ela mesma!!!
Fórmula DAX:
Churn Médio =
CALCULATE (
[Churn] / DISTINCTCOUNT ( fChurn[Data Churn] );
ALLSELECTED ( dCalendario )
)
Fórmula DAX:
Churn Médio =
CALCULATE (
[Churn] / DISTINCTCOUNT ( fChurn[Data Churn] );
ALLSELECTED ( dCalendario );
VALUES ( dCalendario[Mês/Ano] )
)
Espero que tenham aprendido e tido uma boa visão sobre DAX. Pratique bastante para
fixar os conceitos e conseguir usar nos desafios da sua rotina esse conhecimento!! Se
ficar com alguma dúvida ou tenha uma sugestão de tema para as Lives, deixa nos
comentários.
Valeu pessoal! Abraço,
Leonardo
Compartilhar no facebook
Compartilhar no linkedin
Compartilhar no twitter
Compartilhar no pinterest
AnteriorAnteriorDemonstrativo de Resultado (DRE) com DAX Avançado
PróximoFunções DAX de Inteligência de Tempo (DATEADD, DATESYTD,
PREVIOUSMONTH…)Próximo
Atenção: Ao utilizar o site, você concorda que utilizemos cookies para te fornecer uma
melhor experiência.
OK