Tabla de filtros basada en el segundo valor más alto de una columna diferente

Un usuario Pregunto ✅

ABR002

Encontré algunas publicaciones sobre un tema similar, pero no puedo encontrar algo para mi problema exacto. Tengo un tablero donde necesito mostrar las 5 cuentas principales, con 5 tablas que muestran un desglose de esas cuentas, 1 para cada cuenta. Hacer topN es fácil, pero 2nd-5th no tanto. Encontré algunas cosas que me mostrarán el segundo número más alto, junto con el nombre de la cuenta sin desglose, pero no se puede usar para filtrar la tabla. Ya he creado una segunda tabla con las cantidades agrupadas por sus nombres de cuenta y una tabla de clasificación asociada. Aquí hay un ejemplo, digamos que un lugar de comida rápida quiere saber sus principales categorías, tiene estos datos:

Tabla maestra

Categoría subcatálogo Ventas
Emparedado Hamburguesa 100
Emparedado Hamburguesa con queso 150
Emparedado Pollo 200
papas fritas Pequeña 50
papas fritas Medio 100
papas fritas Grande 75
soda Coca 25
soda Coca-Cola Light 25
soda Duende 45
soda naranja 30
Desierto Helado 100
Desierto Galleta 30
Desierto Duende 45

Luego creamos una segunda tabla con solo las categorías y los totales, agrupados en el editor de consultas y una columna de clasificación asociada, y creamos la relación con la tabla maestra a través de la columna Categoría:

Tabla de clasificación

Categoría Ventas Rango
Emparedado 450 1
papas fritas 225 2
soda 125 4
Desierto 175 3

Necesito crear una tabla con un desglose del n. ° 2, tenga en cuenta que las papas fritas pueden no ser siempre el n. ° 2, por lo que necesito que refleje eso, lo que significa que no puedo filtrar por «papas fritas», también necesito que reconozca las selecciones de las segmentaciones de la página, por lo que tampoco puedo filtrar por el n.° 2 en la columna de rango, ya que cuando se seleccionan factores como la región, el rango n.° 2 en la tabla actual podría desaparecer y no habría un n.° 2 para filtrado por. El resultado final sería:

#2 Categoría

Categoría subcatálogo Ventas
papas fritas Pequeña 50
papas fritas Medio 100
papas fritas Grande 75
Total 225

Esencialmente, una tabla que me da el segundo número más alto en la tabla de clasificación. Gracias por cualquier ayuda, puedo aclarar más si es necesario.

Ashish_Mathur

Hola,

Vea si mi solución en este archivo PBI ayuda. Debería poder filtrar la columna Rango 1 en el panel de filtro.

Sin título.png

Ashish_Mathur

Hola,

Vea si mi solución en este archivo PBI ayuda. Debería poder filtrar la columna Rango 1 en el panel de filtro.

Sin título.png

daxer-todopoderoso

Aquí estás:

daxer-todopoderoso_0-1621291949433.png

Responde totalmente a cualquier corte… pero hay una advertencia. Si el código clasifica 2 categorías de la misma manera, obtendrá un error en las imágenes, ya que algunas medidas querrán devolver una tabla en lugar de un escalar. Por lo tanto, ahora depende de usted asegurarse de que la medida de clasificación siempre devuelve diferentes rangos para diferentes categorías en todas las circunstancias. Piénselo bien, ya que rebanar y cortar en cubitos puede hacer que 2 categorías arrojen la misma cantidad total de ventas.

El modelo es muy simple:

daxer-todopoderoso_1-1621292190348.png

DEFINE 

// The base measure
MEASURE Measures_[Total Sales] = SUM( Sales[Sales] )

// The category rank.
// For this to return a rank
// Category must be in scope.
MEASURE Measures_[Category Rank] = 
IF( ISINSCOPE( Sales[Category] ),
    RANKX(
        ALLSELECTED( Sales[Category] ),
        [Total Sales],,DESC,Dense
    )
)

// This one returns the Category
// that's been ranked #1 in the
// current context.
MEASURE Measures_[Rank #1 Category] = 
    CALCULATETABLE(
        FILTER(
            DISTINCT( Sales[Category] ),
            [Category Rank] = 1
        ),
        ALLSELECTED( Sales )
    )

// This one is used in the table that
// displays the details of the #1 category.
// You just have to use it to filter rows
// in the table where this measure = 1.
// Of course, you do it in the Filter Pane
// of the visual/table.
MEASURE Measures_[Rank #1 Category Selector] = 
    INT( SELECTEDVALUE( Sales[Category] ) = [Rank #1 Category] )
    
// This one returns the Category
// that's been ranked #2 in the
// current context.
MEASURE Measures_[Rank #2 Category] = 
    CALCULATETABLE(
        FILTER(
            DISTINCT( Sales[Category] ),
            [Category Rank] = 2
        ),
        ALLSELECTED( Sales )
    )
    
// This one is used in the table that
// displays the details of the #2 category.
// You just have to use it to filter rows
// in the table where this measure = 1.
// Of course, you do it in the Filter Pane
// of the visual/table.
MEASURE Measures_[Rank #2 Category Selector] = 
    INT( SELECTEDVALUE( Sales[Category] ) = [Rank #2 Category] )

Enlace al archivo

daxer-todopoderoso

No creo que esto sea tan difícil, pero tienes que decirme cómo vas a manejar los lazos. Si 2 categorías reciben el mismo rango debido a las mismas cantidades… ¿cómo vas a resolver esto?

ABR002

En respuesta a daxer-todopoderoso

En realidad, estamos hablando de montos específicos (hasta centavos) de cientos de millones de dólares, por lo que los lazos no deberían ser un problema, pero realmente no había pensado en eso. Supongo que si hubiera, digamos un empate para 3, me gustaría volver a subir uno (no estoy seguro de cuál) de alguna manera a 4, no estoy seguro de si ese es el mejor enfoque.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *