Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
crazed8s
Frequent Visitor

Diferencia entre la dirección DE TODOS y VALORES

Así que mi última pregunta sobre la Copa del Mundo fue quizás demasiado involucrada, así que intentaré dividirla en trozos más pequeños.

Tengo 2 visualizaciones de tablas:
TableAllTeams.jpgTableD.jpg

Donde uno es sólo un subconjunto del otro y esas visualizaciones se basan en un conjunto de datos que tiene este aspecto:
InitData.jpg

Para describirlo, cada grupo tiene 12 filas, 3 filas por cada equipo, 1 fila por cada partido jugado por ese equipo.

Ahora, estoy tratando de calcular el rango de diferentes bits de esos datos con:

RANKX(ALL(Scores[Team]),
            CALCULATE(SUM(Scores[Goal Differential]))
     )

La forma en que entiendo lo que está pasando aquí es que le doy a RANKX una lista de los 32 equipos. Rankx recorre en iteración esa lista, aplicando algún tipo de filtro a la tabla de puntuaciones generales en función de dónde se encuentra en esa iteración. Así que si el primer equipo en la lista dada a RANKX es FRANCIA,
CALCULATE verá esta tabla
FRANCETable.jpg

Y calcular correctamente el diferencial de objetivos de Francia para ser -3. Luego, por supuesto, haciendo eso para todo lo demás en la lista ALL(Scores[Team]), determinando el rango y escupiendo un número. Y funciona:
GDALL.jpg
Puedes ver que el orden del RANK es correcto en la columna "Phase1 GD Ranking", pero como parte del schtick de RANKX es que BLANK() se evalúa como 0, mis números negativos se clasifican por debajo de todos los otros chicos que no están separados de este grupo.
Así que pensé bien, voy a dar a RANKX un subconjunto de ALL() que me importa. De esa manera sólo puedo conseguir 1-4. VALUES() lee como hace exactamente lo que ALL() hace excepto que tiene en cuenta los filtros por lo que lo probé:
Checking Values.jpg

Bastante seguro de VALUES() está devolviendo exactamente lo que espero. Sólo los 4 equipos que quiero clasificar juntos. Así que si sustituyo ALL(Scores[Team]) con VALUES(Scores[Team]) Mi cerebro me está diciendo que sólo debe limitar el número de clasificaciones posibles, el número de iteraciones, etc... pero lo que realmente sucede es esto:
ALLVSVALUES.jpg

Fase 1 GD Ranking devuelve todos los 1, Mientras que el "EJEMPLO PHASE1 GD RANK" utiliza ALL() y obtiene una gran cantidad de 0. así que... Supongo que la tabla, filtrada para el grupo D pasa a lo largo de ese contexto de equipo allí también para cada fila, por lo que lo que termina sucediendo es que cada equipo se clasifica contra sólo sí mismo y por lo tanto devuelve 1. En algún lugar entre estas 2 funciones es la respuesta que estoy buscando.
Ahora, 1 respuesta que parece "Trabajar" pero probablemente sólo en un contexto visual, está capturando todos los BLANKS() de los equipos filtrados y dándoles un número profundamente negativo antes de que RANKX los convierta a 0 así:

EXAMPLE3 = 
    RANKX(ALL(Scores[Team]),
        IF(
            ISBLANK(CALCULATE(       
                SUM(
                    Scores[Goal Differential]
                )
            )),
            -10000,
            CALCULATE(
                SUM(
                    Scores[Goal Differential]
                )
            )
        )
    )

Works.jpg
Como la columna EXAMPLE 3 muestra dónde fallan los otros 2 métodos, éste pasa. Pero se siente hacky. Y aunque no estoy por encima de la piratería, también se siente como si estuviera perdiendo un concepto importante y simplemente un poco de puente a su alrededor.

De todos modos TL;DR - En algún lugar entre ALL() y VALUES() necesito una columna recortada de valores distintos basados en el filtrado para el grupo. Pero debe ignorar el contexto del equipo que está siendo "Ranked" para que la tabla filtrada no termine convirtiéndose en una tabla de 1. ALL() devuelve 32 como se esperaba. VALUES() cuando se filtra para un grupo devuelve 4 como se esperaba. Pero sin poder dar paso al paso 3 una expresión dax, solo puedo inferir que VALUES() se filtra aún más por el contexto de la fila que se está clasificando. Reemplazar Values() por allselected es efectivamente el mismo que todos. Reemplazar values() con allexcept(Scores, Scores[Teams]) dame toda la tabla de 98 filas, que definitivamente no quiero.

1 ACCEPTED SOLUTION

Se ha modificado la medida a esta:

Phase1_GD_Ranking = 
IF (
    HASONEVALUE ( Scores[Team] ),
    RANKX (
        ALLSELECTED ( Scores[Group], Scores[Team] ),
        CALCULATE ( SUM ( Scores[Goal Differential] ) ),
        ,
        DESC,
        SKIP
    ),
    BLANK ()
)

View solution in original post

9 REPLIES 9
AntrikshSharma
Community Champion
Community Champion

¿Es este el resultado deseado?

Soccer.PNG

¡Parece que sí! Sólo invertido, pero eso es probablemente una solución fácil si usaste rankx.

¿Cómo?

Estoy literalmente al borde de mi asiento. He estado golpeando mi cabeza contra la pared durante 3 días.

Se ha modificado la medida a esta:

Phase1_GD_Ranking = 
IF (
    HASONEVALUE ( Scores[Team] ),
    RANKX (
        ALLSELECTED ( Scores[Group], Scores[Team] ),
        CALCULATE ( SUM ( Scores[Goal Differential] ) ),
        ,
        DESC,
        SKIP
    ),
    BLANK ()
)

Así que puedo trabajar con esto. ¡Muchas gracias!
Pero si pudiera darte un capricho más.

Este resultado devuelve esto para toda la tabla:
CorrectGD.jpg

Lo cual se espera. ¿Cómo puedo hacer una expresión similar pero diferente por lo que obtengo los 1-4 en la columna diferencial de objetivo en la tabla completa. Básicamente sólo apilar todos esos resultados uno encima del otro?

¿Puede mostrar cómo sería el resultado final para la declaración"Cómo puedo hacer una expresión similar pero diferente para obtener los 1-4 en la columna diferencial de objetivo en la tabla completa. Básicamente sólo apilar todos esos resultados uno encima del otro?"

Así que he actualizado y subido el PBIX con el que estoy trabajando en este momento. Tomando el patrón que me mostraste, pero también agregando mi filtro VAR _group - SelectedValue(Scores[Group]) en el cálculo.
https://drive.google.com/file/d/1Rl7QuiEjyoJ282zdYb_X7YHZmTYRjZ8K/view?usp=sharing

Espero que lo haya diseñado de una manera que tenga sentido para que pueda ver el problema que estoy teniendo actualmente.

Moví el grupo F a la parte inferior de la página como ejemplo. En el panel de filtros puede ajustar las "rondas" que están en el cálculo y la columna "Calificado" se actualiza con precisión. También el "Calificado después ..." trabajo de acuerdo con el plan. Cuando se filtra a un grupo.

Qualifying layout.jpg

Pero si trato de totalizar el número de equipos calificados que obtengo:
UHOHRankings.jpg

Que puede ser sólo un problema de orden de clasificación, excepto si cambio de ASC a DESC obtengo
UHOHRankings2.jpg

Lo cual es, por desgracia, al revés. Ahora, en lugar de comprobar 1 y 2 para la calificación podría comprobar para 3 y 4, pero me preocupa que apunte a un problema más grande en cómo estoy calculando.

Sí, si cambio la medida que me diste:
StackedGroups.jpg

Puedo conseguirlo. Lo cual es casi justo como antes, excepto 30,31,32 tiene un cambio para aparecer donde 2-3-4 se supone que debe estar. Si filtro esa tabla completa a un grupo su multa.

AntrikshSharma
Community Champion
Community Champion

¿Puede publicar el archivo pbix también?

Idk el estándar para que por aquí, pero aquí hay un enlace de google drive. Es desordenado porque he estado lanzando dardos a la pared. https://drive.google.com/file/d/1KjLP_srdCW4OUTf7i9dZgIHIA52MXa1N/view?usp=drivesdk

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

Find out what's new and trending in the Fabric Community.

Top Solution Authors