Ir para conteúdo
  • 0

Função DAX para auxiliar com formatação condicional de cores dentro de Matrix


Marco
Ir para solução Solucionado por Nelson Kobayashi ,

Pergunta

  • Alunos

Boa noite Pessoal,

Tenho uma matrix no PBI que preciso fazer formatação de escala de cores por cada um do valores em cada uma das linhas separadamante.

Ex: Em cada uma das 12 linhas da matrix da figura anexa seguir , adotar escala de: Maior valor (Verde), valor intermediário (amarelo) e menor valor (Vermelho), conforme segunda anexo (Esperado de Cores do Excel).

Tentei via formatação condicional no campo "Count of Customer ID", mas ele só permite aplicar na matrix como um todo.

Há alguma expressão DAX que possa ser usada neste caso? Ou alguma outra sugestão diferente?

Exemplo.thumb.PNG.3d3eb65186c26d7f79b2770e7d1d5311.PNG

Esperado de cores.PNG

Sample_teste.pbix

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos
  • Solução
30 minutos atrás, Marco disse:

@Nelson Kobayashi, obrigado pela dica. Vou trabalhar em cima de uma dCalendario pra auxiliar.

Sobre o arquivo, realmente, assim que eu abri, vi que era com dados diferentes. Mas sem problemas. O seu passo a passo no corpo da mensagem ficou super bem explicado.

Agradeço novamente o apoio.

 

Olá, @Marco!

Bateu inspiração e consegui resolver aqui mesmo.

Segue o arquivo em anexo (agora o correto), rsrs.

Passo a passo:

1. ) Vamos fazer uma MEDIDA para obtermos o menor valor de QTY dentro do contexto da Matriz:

Observe que o menor valor de Jan = 15 e o nemor valor de Fab = 41 e assim por diante ...

Usar o ALL(Sample[MONTH_ORDER]) faz com que o menor valor fique fixo para todas as colunas MONTH_ORDER na matriz.

image.png.6fb1f8145d5bc2137e2b0ed743b7e660.png

 

2. ) Agora vamos fazer uma condição IF usando as MEDIDAS já existentes:

Aqui a tradução da fórmula  diz assim : “SE for detectada um célula da MATRIZ onde o valor de [TOT QTY] for igual ao menor valor do grupo do mês [MENOR QTY], faça as seguintes condições”:

VERDADEIRO = 0 (Zero)

FALSO = [TOT QTY] (o valor do cálculo padrão de trazer as porcentagens que fizemos anteriormente).

Com essa fórmula criamos uma condição especial somente para o caso dos valores mínimos, que serão substituídos por zero:

image.png.d91cc2d90290b6dd2d4eb1fd90e2b958.png

 

Olhando essa fórmula aplicada na Matriz:

Podemos notar que todos os valores menores de cada linha foram substituídos por zero (pintei no paintbrush para ilustrar)....

image.png.acb903ae35e4007aa3f01f67eb0fb2e4.png

3. ) Agora é só aplicar a formatação condicional “Pulo do Gato” que foi explicada anteriormente:

image.png.04f16bd4bce92916b166bf2f586715b5.png

 

É isso aí! Acabei aprendendo mais essa junto contigo nesse desafio.

Arquivo da solução no anexo.

Se curtiu a explicação, marque a minha resposta como a mais correta e se puder dar uma reação positiva nas minhas respostas, ficarei mais motivado em continuar ajudando os colegas.

 

SOLUÇÃO - formatação condicional de cores dentro de Matrix.pbix

  • Thanks 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

@Marco dá uma olhada na live 65 que o Leo fala sobre formatação condicional, talvez dê uma ideia de como seguir. eu nunca tive essa necessidade, mas vou dá uma procurada tbm. depois avisa se a live ajudou:  https://aprendapowerbi.club.hotmart.com/lesson/NOwqLAKYem/live-65-mestre-power-bi-usando-dax-para-aplicar-formatacao-condicional-e-destacar-valores.mp4

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Boa tarde @Roseane e @Frank Figueredo,

Até dei uma olhada na live65, ajudou um pouco, mas ainda tenho duvidas no DAX que montei.

Estou anexando um arquivo sample xls e tbm o pbi que fiz com a referencia do DAX - measure "indicator" criado para auxiliar nas cores, mas as scalas de cores não batem.

O objetivo é fazer scala de cores dinamica conforme seleção do ano e mês, onde os maiores valores ficariam com verde, menores com vermelho e indermediario com amarelo.

Mas conforme alguns exemplos apontados na seta azul a seguir, eles não estão corretos.

 

image.png.5664a9bc3ccc36c3320d09af420b92a0.png

Sample.xlsx Sample_PBI.pbix

Editado por Marco
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

@Marco me parece que não há suporte nativo para a formatação de linhas no Power Bi, conforme descrito no post abaixo:

https://community.powerbi.com/t5/Desktop/Conditional-Formatting-by-Rows-in-Matrix/td-p/1512192

image.png.6c2dcf638d3ea2d3b193ccb7ad6a7ad6.png

 

Mas no post acima também há uma sugestão que talvez te ajude, acho válido conferir o post:

image.png.56fa0d09a06fe26c6d79c31891d1a442.png

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Olá @Marco!

Consegui resolver o problema proposto com um pouco de “ajuste técnico”usando RANKX!

Não creio que seja a solução mais elegante que o DAX permite, mas resolvi do meu jeito ... rsrsrs.

Veja como ficou:

image.png.3acfac5d905813495449980e5455b2f4.png

Segue o passo a passo da solução:

 

1. ) Primeiramente faremos uma MEDIDA para somar o total de Qty:

image.png.6d9ec8f703f01d042f6fa017eed41e91.png

2. ) Depois faremos uma MEDIDA para contagem de quantos valores há no contexto de colunas (na linha “Jan” há 12 valores nas colunas, na linha “Feb” há 11 valores nas colunas e assim por diante...) eis a medida:

image.png.fb400eaf54c0b9f358386a83ffb22547.png

 

3. ) Agora faremos uma MEDIDA de RANKX condicional, aqui está o pulo do gato: Repare na imagem que essa medida fará um ranking de contagem para cada contexto de linha (para o mês de “Jan”, há doze valores, o valor mais alto desse grupo de 12 valores será rank=12, o segundo valor mais alto será rank=11 e assim por diante... já no mês de “Feb” que tem 11 valores na linha, o maior valor será rank=11 e assim por diante).

image.png.0f50066ec0729563d22637d965942fd0.png

 

4. ) Agora vamos criar uma MEDIDA DIVIDE, dividindo o [RANX CONDICIONAL] por [CONTAGEM], isso trará um valor percentual de cada valor de [RANX CONDICIONAL] em relação a [CONTAGEM] ou seja, em uma linha com 12 valores, o maior valor de RANK será 12, então nossa MEDIDA será 12 dividido por 12 = 1 (100%) e o segundo maior valor será 11 dividido por 12 = 0,9167 (91,67%) e assim por diante.

Aplicamos essa medida na matriz verificamos como ficou:

image.png.9a1946517911d35bf34877f9bbe16396.png

 

5. ) Agora podemos aplicar uma formatação condicional para colorir o fundo das células:

image.png.877dfe374007d3bafc0602c01f4e6b7c.png

Irá abrir uma caixa de diálogo:

image.png.4addf8a5104f765f0f73611989a38d1d.png

 

Então podemos ver que a matriz ficará colorida e quanto mais próximo de 100% , mais verde e quanto mais perto de 0% mais vermelho ficará:

image.png.38fd9541518114c368501827e35153c3.png

 

6. )Entretanto, o que queremos é que a matriz com os valores de Qty fique colorida e não uma matriz de porcentagens... Aqui o pulo do gato é aplicar uma formatação condicional em uma matriz usando outros valores como regra.

Vamos selecionar a matriz com os valores de Qty. Em seguida, vamos clicar na setinha de opções da MEDIDA [TOT Qty] que define os valores nos campos da matriz, selecione >Formatação Condicional >Cor da tela de fundo ...

image.png.bad79f94baadd23184512675b709e3ea.png

 

Vai abrir a caixa de diálogo. Aqui a formatação será igual ao passo anterior, onde formatamos a matriz de porcentagens, mas com uma IMPORTANTE DIFERENÇA : No caixa de opções “Com base no campo”, iremos abrir as opções e procurar a nossa MEDIDA [PORCENTAGEM] ... Assim o Power BI entenderá que queremos aplicar cores condicionais naquela matriz de valores de Qty, mas usando as porcentagens resultantes do cálculo [PORCENTAGEM].

image.png.471eadd900066ee7c4e63a71073cb07e.png

 

Resultado:

image.png.488fed0c8f1d4551827c757eb2bdb886.png

7. ) Agora podemos juntar todas as MEDIDAS em uma só, usando variáveis ...

Na prática não é necessário fazer isso, mas é bem interessante treinar isso. Deixa tudo mais elegante e organizado.

image.png.e3ccfc32308d06112e5779b2274498ba.png

 

É isso aí! Espero que a resposta ajude  de alguma forma.

Segue anexo o arquivo PBIX com as medidas.

FORUM_FROTAS (SOLUÇÃO COM RANX).pbix

  • Like 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Bom dia @Nelson Kobayashi,

Ficou incrível e bem mais simplificado a estrutura. Porém, ainda tenho uma duvida se é possivel ajuste adicional no DAX que criou devido a uma pequena diferença na cor.

Na visualização da tabela completa, a distribuição das cores para o joining order de Jan até Aug ficou excelente. Mas nas ultimas linhas referente ao Joining_order de Sep, Oct, Nov e Dec seria esperado ver o valores menores de cada linha em vermelho.

Quando faço um filtro manualmente por este ultimos quatro meses de forma individual, então consigo ver as cores esperadas, conforme destacado no quadrado verde.

É possível ainda alguma ajuste no DAX ?

Outro ponto se seria possivel adicionar a abreviação no mês nas colunas, ao invés dos numeros também dentro do DAX.

 

image.png.78c1b8fbf784c2536ce29ae8b84b4c6e.png

 

Muito agradecido por toda a ajuda.

Editado por Marco
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
6 horas atrás, Marco disse:

Bom dia @Nelson Kobayashi,

Ficou incrível e bem mais simplificado a estrutura. Porém, ainda tenho uma duvida se é possivel ajuste adicional no DAX que criou devido a uma pequena diferença na cor.

Na visualização da tabela completa, a distribuição das cores para o joining order de Jan até Aug ficou excelente. Mas nas ultimas linhas referente ao Joining_order de Sep, Oct, Nov e Dec seria esperado ver o valores menores de cada linha em vermelho.

Quando faço um filtro manualmente por este ultimos quatro meses de forma individual, então consigo ver as cores esperadas, conforme destacado no quadrado verde.

É possível ainda alguma ajuste no DAX ?

Outro ponto se seria possivel adicionar a abreviação no mês nas colunas, ao invés dos numeros também dentro do DAX.

 

image.png.78c1b8fbf784c2536ce29ae8b84b4c6e.png

 

Muito agradecido por toda a ajuda.

@Marco, sobre a questão do formato das datas, na minha opinião recomendo fortemente que você use uma tabela dCalendario para gerenciar essas datas no seu relatório.

Esse relatório tem muitas colunas com referências de datas, e se elas forem se conectar a outras tabelas, vai ficar difícil fazer gráficos sem a dCalendario.

Quanto às cores de Sep, Oct, Nov e Dec, eu também tinha reparado nessa diferença. 

Vou dar uma olhada mais tarde ver como pode-se resolver isso... Talvez com SWITCH... 

p.s.: É impressão minha ou eu mandei um arquivo errado na minha resposta ?

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Bom dia 

@Nelson Kobayashi, ficou show mesmo. Agradeço de mais o apoio.

Também vi uma outra oportunidade de fazer um ajuste final, em função da nossa necessidade. Para linhas com valor único, exibir o mesmo na cor verde. 

Então acrescentei no IF a condição && da 'contagem' ser > 1 --> 

resultado:

image.png.217fe6eeb59944a5b578f61b390e517c.png

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
2 horas atrás, Marco disse:

Bom dia 

@Nelson Kobayashi, ficou show mesmo. Agradeço de mais o apoio.

Também vi uma outra oportunidade de fazer um ajuste final, em função da nossa necessidade. Para linhas com valor único, exibir o mesmo na cor verde. 

Então acrescentei no IF a condição && da 'contagem' ser > 1 --> 

resultado:

image.png.217fe6eeb59944a5b578f61b390e517c.png

Olá @Marco!

Não vejo problema em criar mais uma condição dentro de  IF para linha única.

Mas pela lógica do cálculo de [PORCENTAGEM] com RANKX Condicional, a linha única está prevista no cálculo, veja:

Linha única : [CONTAGEM] = 1

Linha única : [RANKX CONDICIONAL] = 1

Linha única  [PORCENTAGEM] : 1 / 1 = 1 (100%)

Formatação condicional de cores na matriz:  100% = Verde

Então, tecnicamente o resultado dá no mesmo com ou sem a condicional extra que você adicionou, mesmo porque o cálculo de [PORCENTAGEM] nunca vai dar mais que 1, pois o máximo é 100% neste caso.

Mas a sua lógica foi boa, faz sentido e pode ser aplicada em outros casos.

Valeu.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...