Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
2 years ago

Matriz de Power BI

Hola
Tengo una tabla con datos

SLNOARTÍCULOPLACE_CODE
1A100
1A101
1A102
1A103
1A104
1B105
1B106
1D107
1C108
1C109
1C110
2D111
2D112
2A113
2A114
2A115
2C116
2C117
2C118
2B119
2A120
2B121
3C122
3C123
3C124
3A125
3A126
3D127
3D128

y estoy usando una matriz visual para visualizar los datos como

SLNOABCD
15231
24232
32 32

y según mis requisitos, quiero usar colores para establecer el valor máximo y la brecha entre el valor máximo y el 2º valor máximo
es decir,

Gustar
En SLNO-1
5 es grande y 3 es el segundo grande
Así que Gap = 5-3 = 2 -> Color - Naranja oscuro
En SLNO -2
4 es grande y 3 es segundo grande

por lo que Gap = 4-3 = 1 -> Color - Naranja claro
Como sabio....
¿Hay alguna forma de lograrlo?

Gracias y saludos.

16 Replies

  • No creo que haya una manera de hacer esto directamente en el objeto visual de matriz actual. Puede intentar usar charticulator para crear un objeto visual de matriz personalizado. Puede establecer el color de fondo de cada "celda" usando una fórmula.

  • @BIswajit_Das

    ¿Qué pasa si la brecha no es 1 o 2?
    ¿Qué muestra el color verde en tu ejemplo?
    ¿Qué pasa si se encuentran los mismos valores para MAX o 2nd MAX?




  • @BIswajit_Das , basándome en los datos de su muestra, se me ocurre lo siguiente.

    1. Cree la siguiente medida.

    Measure_Item = COUNT('Table'[ITEM])

    2. Cree la siguiente medida.

    Gap = 
    VAR A = CALCULATE(COUNTX(FILTER('Table','Table'[ITEM]="A"),'Table'[ITEM]),REMOVEFILTERS('Table'[ITEM]))
    VAR B = CALCULATE(COUNTX(FILTER('Table','Table'[ITEM]="B"),'Table'[ITEM]),REMOVEFILTERS('Table'[ITEM]))
    VAR C = CALCULATE(COUNTX(FILTER('Table','Table'[ITEM]="C"),'Table'[ITEM]),REMOVEFILTERS('Table'[ITEM]))
    VAR D = CALCULATE(COUNTX(FILTER('Table','Table'[ITEM]="D"),'Table'[ITEM]),REMOVEFILTERS('Table'[ITEM]))
    VAR MAX1 = MAX(MAX(MAX(A,B),C),D)
    VAR MAX2 = MINX(TOPN(2,SELECTCOLUMNS({A,B,C,D},"Value",[Value]),[Value],DESC),[Value])
    RETURN 
    IF([Measure_Item]=MAX1,MAX1-MAX2)

    3. Construye tu matriz de la siguiente manera.

    4. Aplique la siguiente regla de formato condicional a [Measure_Item].

    Después de ocultar los subtotales, tendrías la siguiente matriz.

    No estoy seguro de por qué se muestra en verde para SLNO 3 Item C. Puede modificar el código en [Gap] o cambiar la configuración de formato condicional para satisfacer sus necesidades.

  • Hola @Fowmy , @johnyip , @Analytics1
    Gracias por responder
    Según el requisito
    Cada artículo tiene colores específicos
    es decir, para A es de color naranja oscuro a claro en función del espacio
    y para C es de color verde oscuro a verde claro.
    ¿Qué pasa si la brecha no es 1 o 2?
    Tomemos un valor medio, es decir, 5 y Gap >5 color oscuro y Gap < 5 claro
    ¿Qué muestra el color verde en tu ejemplo?
    Como he escrito, cada elemento tiene un color específico

    ¿Qué pasa si se encuentran los mismos valores para MAX o 2nd MAX?
    Tómalo como un dibujo o un espacio en blanco, supongo

    Gracias y saludos...

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      @BIswajit_Das

      Creé una medida para el formato condicional llamada CF. También hice una tabla para elegir los colores de los elementos con colores que van del 1 al 10. Puede modificar esta tabla según sea necesario. Aquí está la medida.

      El archivo se adjunta a continuación.

      CF = 
      VAR __Item = SELECTEDVALUE( 'Table'[ITEM] )
      VAR __T = ADDCOLUMNS( ALLSELECTED( 'Table'[ITEM] ) , "@Max" , [Count] )
      VAR __Max1 = MAXX( __T , [@Max] )
      VAR __Max2 =  MAXX( FILTER( __T , [@Max] < __Max1 ) , [@Max] )
      VAR __Gap = __Max1 - __Max2
      VAR __Color = LOOKUPVALUE( Colors[Color] , Colors[Item] , __Item , Colors[Code] , __Gap )
      RETURN
           IF( [Count] = __Max1 , __Color)




      • Syndicate_Admin's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        Hola @Fowmy Gracias por el contenido
        pero
        Quiero colorear de acuerdo con el grupo Gap, pero cuando estoy modificando el contenido, no funciona
        Uso de DAX :

        CF =
        FUERON __Artículo = SELECTEDVALUE( 'Mesa'[ARTÍCULO] )
        FUERON __T = ADDCOLUMNS( TODOS SELECCIONADOS( 'Mesa'[ARTÍCULO] ) , "@Max" , [Conteo] )
        FUERON __Max1 = MAXX( __T , [@Max] )
        FUERON __Max2 = MAXX( FILTRO( __T , [@Max] < __Max1 ) , [@Max] )
        FUERON __Hueco = __Max1 - __Max2
        FUERON _gapgroup = SI(__Hueco >= 0 && __Hueco <= 0.05,"0-5%",SI(__Hueco > 0.05 && __Hueco <= 0.1,"6-10%",""))
        VAR _check = IF(_gapgroup = "0-5%",1,IF(_gapgroup = "6-10%",2,0))
        FUERON __Color = LOOKUPVALUE( Colores[Color] , Colores[Artículo] , __Artículo , Colores[GRUPO] , _gapgroup )
        DEVOLUCIÓN
        SI( [Conteo] = __Max1 , __Color)
    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      @BIswajit_Das , ¿es esto lo que estás buscando?

      1. Cree la siguiente medida.

      Measure_Item = COUNT('Table'[ITEM])

      2. Cree la siguiente medida.

      Gap = 
      VAR A = CALCULATE(COUNTX(FILTER('Table','Table'[ITEM]="A"),'Table'[ITEM]),REMOVEFILTERS('Table'[ITEM]))
      VAR B = CALCULATE(COUNTX(FILTER('Table','Table'[ITEM]="B"),'Table'[ITEM]),REMOVEFILTERS('Table'[ITEM]))
      VAR C = CALCULATE(COUNTX(FILTER('Table','Table'[ITEM]="C"),'Table'[ITEM]),REMOVEFILTERS('Table'[ITEM]))
      VAR D = CALCULATE(COUNTX(FILTER('Table','Table'[ITEM]="D"),'Table'[ITEM]),REMOVEFILTERS('Table'[ITEM]))
      VAR MAX1 = MAX(MAX(MAX(A,B),C),D)
      VAR MAX2 = MINX(TOPN(2,SELECTCOLUMNS({A,B,C,D},"Value",[Value]),[Value],DESC),[Value])
      RETURN 
      IF([Measure_Item]=MAX1,MAX1-MAX2)

      3.Cree la siguiente medida

      Conditional formating = 
      VAR i = SWITCH(MAX('Table'[Item]),
                        "A",0.1,
                        "B",0.2,
                        "C",0.3,
                        "D",0.4
                  )
      VAR Result = [Gap]+i
      RETURN
      SWITCH(Result,
             1.1, "#FFCB8F", // A: light orange (gap=1)
             2.1, "#FF7F27", // A: orange (gap=2)
             1.2, "#FFFEAA", // B: light yellow (gap=1)
             2.2, "#FFF200", // B: Yellow (gap=2)
             1.3, "#B5E61D", // C: light green (gap=1)
             2.3, "#22B14C", // C: green (gap=2)
             1.4, "#99D9EA", //  light blue (gap=1)
             2.4, "#00A2E8" //  blue (gap=2)
             )

      4. Construya su matriz de la siguiente manera.

      4. Aplique la siguiente regla de formato condicional a [Measure_Item].

      Después de ocultar los subtotales, tendrías la siguiente matriz.

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        Hola , @johnyip no realmente

        Tomemos su consulta anterior

        CF = 
        VAR __Item = SELECTEDVALUE( 'Table'[ITEM] )
        VAR __T = ADDCOLUMNS( ALLSELECTED( 'Table'[ITEM] ) , "@Max" , [Count] )
        VAR __Max1 = MAXX( __T , [@Max] )
        VAR __Max2 =  MAXX( FILTER( __T , [@Max] < __Max1 ) , [@Max] )
        VAR __Gap = __Max1 - __Max2
        VAR __Color = LOOKUPVALUE( Colors[Color] , Colors[Item] , __Item , Colors[Code] , __Gap )
        RETURN
             IF( [Count] = __Max1 , __Color)

        Esto funciona bien con los valores de recuento
        Pero según mi requisito, necesito valores porcentuales
        A continuación, es necesario agruparlos
        luego cree la matriz mencionada y
        Agregue fondo en función del MAX% VAL y Gap_Group.