Power BI: Como ordenar uma coluna, que não seja por ordem alfabética

Lá em 2014, eu escrevi esse post: https://blog.merazzi.com.brpowerview-como-ordenar-uma-coluna-que-nao-seja-por-ordem-alfabetica/, usando o Power View.

Normalmente a dúvida vem com a imagem de um gráfico de barras e a pergunta: “Como eu faço para que os meses fiquem ordenados ‘direito’?”

Reparem na ordem dos meses

Com o uso cada vez maior do Power BI, eu notei que essa é uma dúvida meio que recorrente no grupos que eu participo e o principal motivo é: a ausência de uma tabela de calendário. Se você não cria essa tabela em seus projetos, faça.

Existem várias formas de configurar a ordenação… Aqui eu pretendo abordar algumas formas e problemas que podem ocorrer durante o processo.

Antes de continuarmos… Onde vocês lerem “Mail”, por favor, leiam “Maio”… Eu só fui ver que o nome do mês estava errado quando estava no final… Como não acredito que o post perca a validade por causa disso, eu resolvi manter. Por isso, eu peço desculpas… #facepalm

Neste primeiro caso, irei simular a importação de um arquivo Excel. Veja na imagem abaixo, que nós temos 4 colunas: Estado, Ano, Mes, Valor.

Ao criarmos um gráfico de valores x período, ficamos com o resultado da primeira imagem. Isso ocorre basicamente, pois a ordenação do eixo é realizada pela ordem especificada por padrão na coluna, ou seja: ordem alfabética pelo nome do mês.

Solução 1: Criar no Excel uma coluna com o valor numérico do mês, reimportar e pedir para ordenar por ela.

Vejam a última coluna

Aí vocês irão me dizer: “Mas eu não quero o número do mês… Eu quero o nome!” Ok, querido Padawan, aí entra a magnífica opção “Classificar por coluna”.

Com a coluna Mês selecionada, entrem nessa opção e mande classificar pela coluna NumMes. Feito isso…

Voilá! Opa, não, pera…

O que houve? Escolhemos a ordem certa, qual foi o problema? Voltamos à tabela…

Viram o tipo que o PowerBI importou do Excel? Texto. Como a ordenação de um texto é feita caractere a caractere, a ordenação dos meses fica: 1, 10, 11, 12, 2, 3, 4, 5, 6, 7, 8, 9 Então aqui temos duas opções:

  1. Editar a planilha original, colocando um 0 (zero) à frente dos números com um algarismo (01, 02, 03, 04,…);
  2. Alterar o tipo da coluna para Inteiro.

Vou me ater aqui à segunda opção, mas fica como curiosidade para simular colocando o zero na frente.

Então no local em destaque da imagem acima, troque o tipo de dados para inteiro. Aparecerá a imagem abaixo:

Apenas confirme e…

Tadá!!!

O post poderia terminar aqui, mas vamos dar uma olhada no que podemos ter de problemas ao usar o Excel para controlar o periodo.

  • Mês com o nome errado… Essa precisou entrar aqui… #facepalm
  • Dois valores para um mesmo mês, ou valores nulos:
    • Aqui, está bem fácil de ver, mas pensem numa planilha com milhares de linhas, com ordenações diversas… encontrar o erro às vezes é muito complicado e o ajuste vai implicar em realizar a importação do arquivo novamente.
Erro ao tentar realizar a ordenação por um campo com múltiplos valores

“Mas Logan… E se ao invés de fazer toda a mão no Excel, eu fizer no próprio PowerBI? Isso evitaria o problema da inserção dentro do Excel…”

Verdade!!! Vamos ver… Uma solução que eu vi, foi a de criar uma coluna calculada dentro do PowerBI usando o SWITCH, que seria o equivalente ao CASE no SQL Server. Nós criamos a coluna fazendo um SWITCH para cada mês, criando o valor numérico dele, isso acaba com a possibilidade dos valores duplicados… Faz sentido…

Agora é só mandar classificar e….

Link para o sadtrombone.com, por favor…

O que acontece: como a coluna calculada é criada baseada no nome do mês, eu não posso fazer com a coluna nome do mês seja ordenada pela coluna calculada… Ou seja, até faria sentido, se funcionasse…

EDIT: Após publicar o post, o Maruan (LinkedIn) comentou sobre a possibilidade de criar um grupo em cima da coluna com o nome do mês e fazer essa coluna ser ordenada. De fato, funciona (e fica como uma sugestão), apenas precisaria testar para ver se o grupo pode causar algum efeito colateral nas visões que estiver realizando (creio eu que não). Ou seja, sim, o Switch é mais um recurso que pode ser utilizado nesta tarefa, apenas não diretamente sobre a coluna original. É justamente por isso que eu gosto da comunidade SQL / Power BI. Todo mundo compartilhando o conhecimento e se ajudando. É exatamente isso o que faz com que a comunidade cresça sempre. Valeu Maruan!

Eu gosto muito de criar uma tabela de calendário no SQL Server usando um CTE recursiva, onde eu já monto todas as colunas que eu quero, formatadas, e aí eu importo ela usando o conector do SQL (se achar que essa tabela vale um post, comenta aí, mas nada que uma Googleada não resolva).

Outra opção é criar a tabela de calendário usando DAX e formatando conforme desejado, colocando a ordenação nela e depois relacionando com a tabela destino.

Exemplo:

Aqui eu estou apenas criando uma tabela de calendário agrupada por mês e ano, que é o que eu preciso para esse cenário. Após, basta a gente relacionar essa tabela com a anterior e refazer a criação do gráfico

Opa… Coluna faltando!?!?

Vocês notaram que no gráfico de baixo o mês de maio não aparece? Isso ocorre por causa do meu erro na tabela original, onde o mês de maio se chama mail… Ao criar a tabela usando o método que eu considero o ideal, via PowerBI, o dado nem apareceu, pois o calendário não possui o mês chamado mail.

Espero ter contribuído.

[]’s!

9 comentários

  1. Muito bom o artigo Logan bem explicativo e detalhado as formas de como resolver uma ordenação em um gráfico. Show!

  2. Estou há mais de 1 hora pesquisando como ordenar coluna numa matriz e não encontrei nada… Será que é impossível fazer isso no Power BI? Me recuso a acreditar nisso…

  3. Logan boa tarde.

    Estou montando um dashboard com: informações x mês e a dica funcionou perfeitamente para o grafico.
    Porém meu dashboard possui uma tabela com os mesmos dados do gráfico e este não consigo ordenar de jeito nenhum.

    Poderia me ajudar?

  4. Bom dia meu camarada. Estou tentando fazer uma DRE a partir do balanço e montei a máscara dela. Uma coluna para conta contábil, outra coluna para descrição da conta e uma coluna para ordem. Queria ordenar a DRE pela coluna ordem onde já tá a máscara certinho e o layout do que preciso. Mas quando faço isso ele dá a mensagem que não posso classificar a descrição por ordem porque não é possível haver mais de um valor em ordem para descrição. Não caberia aqui uma dCalendar né? Como eu faço um cálculo para ordenar isso, com uma swuitch mesmo?

    abraços e obrigado

  5. Depois de procurar muito consegui uma resposta que realmente ajudou. Agradeço muito por compartilhar as informações!!!

    1. Oi Danielle!
      Poxa, que bom saber que esse post ajuda ainda hoje. 🙂
      Esse blog está tão abandonado, que receber uma feedback desses, até me faz pensar em voltar a escrever.
      Obrigado msm!

Deixe uma resposta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.