Power BI Eixo Personalizado

O Problema

Como criar um eixo com os meses da minha tabela de calendário e no final colocar mais uma informação no eixo? Ou seja, como criar um eixo customizado.

Veja o exemplo abaixo:

o que o cliente quer

No gráfico acima temos um eixo customizado, ou eixo personalizado, que vai de Jan a Dec e no final tem um FY BGT. E ainda tem uma linha mostrando o percentual de diferença entre uma coluna e a outra (chamamos isso de Growth).

Primeiros Passos

Primeira coisa que temos que fazer é entender como chegar nessa solução. Então vamos pensar na lógica por trás disso antes de sair fazendo.

Primeiro ponto é, de onde vem esse eixo de Jan a Dec? Vem da sua dimensão calendário. Então muito provavelmente você tem uma dimensão calendário com esses meses aí. Então beleza, é pegar essa lista de valores da calendário e ao final dela adicionar, “apendar”, essa palavra aí “FY BGT”.

Depois do eixo criado criado basta criar as medidas pra identificar os valores, então quando o eixo for FY BGT vai receber a medida de BGT e quando for diferente vai receber outra medida que queremos passar.

Além disso temos que relacionar as medidas que criarmos ao modelo já existente, pra que ela seja filtrada pelas nossas dimensões e tal.

Mão na massa – criando o eixo personalizado

Primeiro passo então é criar o eixo personalizado. Pra isso vamos fazer o seguinte, vamos no Power Query e vamos criar uma nova tabela lá. Então New Source > Blank Query.

O código é esse aqui, se você quiser copiar:

let
     // uso como source a coluna da minha dimensao calendario pra criar uma lista de valores unicos
     Source = List.Distinct(dDateInput[MonthName]),
     // converto a lista pra tabela
     #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
     // renomeio a coluna pra CustomAxis
     #"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Column1", "CustomAxis"}}),
     // mudo o tipo pra texto
     #"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"CustomAxis", type text}}),
     // adiciono um step after
     // adiciono esse codigo pra inserir ao final uma linha nova com nome de BGT
     Custom1 = 
     Table.InsertRows(
         #"Changed Type",
         12,
         {[CustomAxis = "BGT"]}
     ),
     // adiciono uma coluna de indice que vou usar pra ordenar meu eixo
     #"Added Index" = Table.AddIndexColumn(Custom1, "Index", 1, 1, Int64.Type)
 in
     #"Added Index"

O que estamos fazendo aqui é:

  1. Criando uma blank query
  2. “= List.Distinct(dDateInput[MonthName])” Com esse comando criamos uma lista de valores únicos com base na dDateInput[MonthName] que é nossa coluna da dimensão calendário
  3. Transformamos essa lista em uma table
  4. Dou um nome pra tabela (pode ser qualquer nome)
  5. Renomeio a coluna pra CustomAxis
  6. Mudo o tipo da coluna pra Texto
  7. Adiciono uma linha nova ao final da coluna com o valor BGT
  8. Adiciono uma coluna de índice que vou usar pra ordenar o eixo

Fechar e aplicar o power query. No Power BI agora temos uma tabela nova, assim:

Pra garantir que a coluna CustomAxis fique na ordem que eu desejo eu ordeno ela pela Index.

Criando as medidas

Agora que temos o eixo, precisamos preencher esse eixo com valores. No meu caso quero 2 medidas, uma com o valor mês a mês e o valor do BGT no final.

Todas as duas medidas eu já tenho pronta porque uso em outros lugares do report onde uso eixos “normais” da minha calendário. Vou aproveitar essa medida e já passar no eixo. Claro, vai dar errado, vai gerar um produto cartesiano porque esse novo eixo não tem relacionamento com o restante do dataset.

medida VALUES ACTLE no novo eixo personalizado, antes do relacionamento

Pra resolver esse problema vamos utilizar a função TREATAS(). Assim:

CALCULATE( [Values ACTLE], TREATAS( VALUES( dDateInputBGT[CustomAxis] ), dDateInput[MonthName] ) )

O que o TREATAS() está fazendo é relacionando os VALUES() da nova coluna de eixo com a mesma coluna da dimensão de calendário. O resultado disso é que agora a medida vai conseguir identificar se é janeiro, fevereiro, etc e filtrar o valor da medida.

nova medida com relacionamento do TREATAS()

Só que agora preciso do BGT. A ideia é a mesma, preciso criar um DAX que me dê o valor que quero colocar ali naquela célula. No meu caso eu peguei sempre o valor de DECEMBER do BGT. Eu poderia pegar o FullYear também, ou seja, somar todo ano de BGT e colocar ali o valor, enfim, aí é só questão de criar a fórmula em DAX, mas o importante é saber como preencher aquela célula ali. Pra isso eu fiz o seguinte:

  1. criei a fórmula de BGT (nota: como eu não preciso que o valor de BGT mude de acordo com eixo, eu não preciso usar o TREATAS() como usei na medida anterior)
CALCULATE( [Values BGT w/o Zero], dDateInput[MonthName] = "December" )

2. criei um SWITCH pra identificar, quando for BGT retornar a medida de BGT, senao, retornar a medida geral.

SWITCH(
    TRUE(),
    vSelectAxis = "BGT", CALCULATE( [Values BGT w/o Zero], dDateInput[MonthName] = "December" ), // GETS ALWAYS THE DECEMBER VALUE FOR BGT
    vACTLE
)

resultado final com BGT preenchido

O valor final não está correto, mas ele não importa pra gente nesse exemplo.

Agora precisamos criar a segunda medida, que é o percentual variável entre um mês e outro e BGT. Pra criar essa medida precisa de alguma lógica, então você precisa entender o seu modelo de dados, as informações a sua disposição pra criar essa medida. No meu caso, como eu tenho uma coluna de índice que vai de 1 a 13, basta pegar o valor do índice atual, menos o valor do índice anterior e esse resultado dividir pelo valor do índice anterior.

medida pra gerar growth %

O resultado vai ficar como na tabela abaixo. Fim :), agora é só criar o gráfico (claro, removendo antes as colunas INDEX e a VALUES ACTLE).

clique pra aumentar

Para mais detalhes e informações recomendo assistir os vídeos que estão nas referências.

Referências

https://www.youtube.com/watch?v=LYgncqFXkNw – [Power BI] Criando um Gráfico de Barras com um Eixo totalmente Personalizado. Parte – 1

https://www.youtube.com/watch?v=xu670pWkw7g – [Power BI] Criando um Gráfico de Barras com um Eixo totalmente Personalizado. Parte Final

https://www.youtube.com/watch?v=GOGcdu135h0 – [DATAB Live] #10 – Linguagem DAX: Manipulando Eixos dos Visuais

Published by Pedro Carvalho

Apaixonado por análise de dados e Power BI

One thought on “Power BI Eixo Personalizado

Deixe uma resposta

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: