Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
5 years ago
Solved

Filtro RANKX

Por lo tanto, tengo una mesa con diferentes nombres de sectores. He creado una medida de clasificación que los clasifica por cambio absoluto de empleo después de que se hayan aplicado los f...
  • AlB's avatar
    AlB
    5 years ago

    @CallumMurfet

    Esto es bastante complicado. Estoy dividiendo la respuesta en varios mensajes ya que es bastante largo. La solución está en el último post.

    El problema se deriva del uso de dos medidas como filtros para el objeto visual, con uno ([RANK]) algo dependiente de las filas que se muestran. Para entender lo que está pasando, ciertamente no trivial, ayuda a ver cómo se genera lo visual bajo el capó. Puede obtener acceso a esto copiando la consulta para el objeto visual en el analizador Perfomance:

    Consulta DAX
    Definir
    Fue __DS0FilterTable =
    Filtro (
    KEEPFiltroS ( Valores ( 'SIC 2 lookup'[Nombre del sector] ) ),
    No ( 'SIC 2 lookup'[Nombre del sector] En { Blanco () } )
    )
    Fue __DS0FilterTable2 =
    TREATAS ( { "2018" 'Tabla de fechas'[Columna] )
    Fue __DS0FilterTable3 =
    TREATAS ( { "Herefordshire, Condado de" 'Búsqueda'[Geografía] )
    Fue __ValueFilterDM0 =
    Filtro (
    KEEPFILTERS (
    RESUMIRCOLUMNS (
    'SIC 2 lookup'[Nombre del sector],
    __DS0FilterTable,
    __DS0FilterTable2,
    __DS0FilterTable3,
    "RANK", 'SIC 2 Empleo'[RANK],
    "SIC_2_absolute_change", 'SIC 2 Empleo'[SIC 2 cambio absoluto],
    "SIC2_LQ2", Ignorar ( 'SIC2 LQ'[SIC2 LQ] )
    )
    ),
    Y ( [SIC2_LQ2] > 1, [RANK] <- 10 )
    )
    Fue __DS0Core =
    RESUMIRCOLUMNS (
    'SIC 2 lookup'[Nombre del sector],
    __DS0FilterTable,
    __DS0FilterTable2,
    __DS0FilterTable3,
    __ValueFilterDM0,
    "RANK", 'SIC 2 Empleo'[RANK],
    "SIC_2_absolute_change", 'SIC 2 Empleo'[SIC 2 cambio absoluto]
    )
    Fue __DS0PrimaryWindowed =
    TOPN ( 501, __DS0Core, [RANK], 1, 'SIC 2 lookup'[Nombre del sector], 1 )
    Evaluar
    __DS0PrimaryWindowed
    Orden Por
    [RANK],
    'SIC 2 lookup'[Nombre del sector]

    You can see that a table is first generated with all the filters other than those from the measures and after that, both measures are applied as filters. This all happens in __ValueFilterDM0, see the filtering by the measures at the end, with the step (highlighted above): Y( [SIC2_LQ2] > 1, [RANK] <-10 )

    A continuación, se calcula otra tabla (__DS0Core). Esto toma __ValueFilterDM0 como base y calcula los valores para el objeto visual una vez más. Es esto lo que causa el comportamiento que está viendo. Aquí el [RANK] se ejecuta de nuevo en la tabla base después de que se haya filtrado.

    Por favor, marque la pregunta resuelta cuando haya terminado y considere dar un pulgar hacia arriba si las publicaciones son útiles.

    Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

    Salud

    SU18_powerbi_badge

  • AlB's avatar
    5 years ago

    @CallumMurfet

    Por lo tanto, para hacerlo más visual, este es el resultado parcial de __ValueFilterDM0 sin el último paso de filtrado ( AND ( [SIC2_LQ2] > 1, [RANK] <- 10 ) )

    image.png

    A continuación, cuando se agrega ese último paso de filtrado ( AND ( [SIC2_LQ2] > 1, [RANK] <-10 ) ), obtenemos:

    image.pnglo anterior es el resultado final real de __ValueFilterDM0

    Y luego, finalmente, se calcula __DS0Core. Tenga en cuenta que incluye __ValueFilterDM0 en los argumentos, por lo que [RANK] se calcula en la tabla mostrada anteriormente. Por lo tanto, los números de clasificación varían a medida que la clasificación se realiza únicamente en el resultado final de __ValueFilterDM0 y no en todos los valores de Nombre de sector presentes al principio, cuando [Rank] se ejecutó por primera vez al calcular __ValueFilterDM0. El resultado final(__DS0Core más algunos ajustes estéticos menores) es por lo tanto lo que tienes y antes de preguntar:

    image.png

    Por favor, marque la pregunta resuelta cuando haya terminado y considere dar un pulgar hacia arriba si las publicaciones son útiles.

    Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

    Salud

    SU18_powerbi_badge

  • AlB's avatar
    5 years ago

    @CallumMurfet

    En cuanto a cómo resolver su problema teniendo en cuenta lo anterior, una opción sería cambiar su medida [RANK] un poco y mantener los filtros en [RANK] y [SIC LQ] como los tenía:

    RANK =
    VAR auxT_ =
        FILTER ( ALLSELECTED ( 'SIC 2 lookup'[Sector name] ), [SIC2 LQ] > 1 )
    RETURN
        RANKX ( auxT_, [SIC 2 absolute change],, DESC )
    //+ RAND () / 100

    image.pngimage.png

    Tenga en cuenta, sin embargo, que estamos incluyendo el filtro visual que tenía en [SIC LQ] como parte del código. Esto es menos flexible/conveniente. Dado el funcionamiento interno que hemos visto, es la solución que he podido llegar a (hasta ahora). También he sacado la parte RAND(). No sabía cuál es la lógica, pero en cualquier caso no afecta el tema que se está discutiendo.

    Por favor, marque la pregunta resuelta cuando haya terminado y considere dar un pulgar hacia arriba si las publicaciones son útiles.

    Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

    Salud

    SU18_powerbi_badge