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

Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started

Reply
paulvans182
Helper III
Helper III

Puntuación media en cada categoría

Buenas tardes

Tengo la siguiente fórmula:

Head2Head P1 Avg Points Total = 
VAR Number = 22 RETURN
VAR P1Board = SELECTEDVALUE('Player1'[Game Board]) RETURN
VAR P2Board = SELECTEDVALUE('Player2'[Game Board]) RETURN

VAR H2HGamesPlayed =
    FILTER (
        VALUES ('Game Fact'[Game ID]),
        CALCULATE(COUNTROWS('Game Fact'),'Game Fact'[Game Board] IN {P1Board,P2Board}) >= Number
    )
RETURN
CALCULATE(AVERAGE('Game Fact'[Points]),FILTER('Game Fact','Game Fact'[Game Board]=P1Board),FILTER('Game Fact','Game Fact'[Category]="Total"),FILTER('Game Fact','Game Fact'[Game ID] in H2HGamesPlayed))

La variable H2HGamesPlayed, encuentra todos los ID de juego donde están involucrados los game Boards.

La función CALCULATE calcula la puntuación total media para el jugador 1. El campo total existe en la columna Categoría. Hay 11 categorías.

query.PNG

La expresión funciona perfectamente. La puntuación que obtengo en una tarjeta de esta medida coincide con los datos.

Quiero crear una expresión adicional donde quite el filtro para categoría. Lo que espero es poder crear un gráfico de barras donde el eje será la columna Categoría - y la medida calculará los puntos promedio para cada una de esas categorías. Aquí está esa expresión:

Head2Head P1 Avg Points = 
VAR Number = 22 RETURN
VAR P1Board = SELECTEDVALUE('Player1'[Game Board]) RETURN
VAR P2Board = SELECTEDVALUE('Player2'[Game Board]) RETURN

VAR H2HGamesPlayed =
    FILTER (
        VALUES ('Game Fact'[Game ID]),
        CALCULATE(COUNTROWS('Game Fact'),'Game Fact'[Game Board] IN {P1Board,P2Board}) >= Number
    )
RETURN
CALCULATE(AVERAGE('Game Fact'[Points]),FILTER('Game Fact','Game Fact'[Game Board]=P1Board),FILTER('Game Fact','Game Fact'[Game ID] in H2HGamesPlayed))

Esta medida no funciona. Cuando creo un gráfico de barras, permanece en blanco.

Estoy seguro de que debo estar perdiendo algo obvio, por favor, ¿puede alguien ayudarme?

He adjuntado el archivo PowerBI: Promedio de consulta por categoría archivo PB

Edite 21/07 13:51 GMT.

He eliminado cada variable en mi expresión CALCULATE y he codificado de forma rígida los valores... Descubrí que si elimino la variable H2HGamesPlayed, aparece la salida correcta.

Así que supongo que esa variable no está funcionando como espero. Sin embargo, lo que me parece extraño es que funciona para la expresión total (expresión 1).

Espero que esto ayude a cualquiera que esté investigando esto para mí

Atentamente

Paul

4 REPLIES 4
sturlaws
Resident Rockstar
Resident Rockstar

Hola @paulvans182

¿por qué es la variable Número 22? Si lo cambia a 1, la medida devuelve valores para las categorías.

Otra pequeña cosa, no tienes que escribir RETURN después de cada variable, es suficiente escribirla después de la última variable, como esta:

Head2Head P1 Avg Points Total = 
VAR Number = 22 
VAR P1Board = SELECTEDVALUE('Player1'[Game Board]) 
VAR P2Board = SELECTEDVALUE('Player2'[Game Board]) 

VAR H2HGamesPlayed =
    FILTER (
        VALUES ('Game Fact'[Game ID]),
        CALCULATE(COUNTROWS('Game Fact'),'Game Fact'[Game Board] IN {P1Board,P2Board}) >= Number
    )
RETURN
.
.
.

Salud
Sturla

Hola @sturlaws

En primer lugar, gracias por la información sobre RETURN. Enmendaré mis expresiones.

En cuanto a la variable 22.

La forma en que había creado la variable H2HGamesPlayed fue primero tratar de identificar todos los ID de juego donde estaban presentes los tableros del jugador 1 y del jugador 2.

Tenía la fórmula:

Head2Head Games = 
VAR Number = 22 
VAR P1Board = SELECTEDVALUE('Player1'[Game Board]) 
VAR P2Board = SELECTEDVALUE('Player2'[Game Board]) 
RETURN
CALCULATE(COUNTROWS('Game Fact'),'Game Fact'[Game Board] IN {P1Board,P2Board})

Cuando creé una tabla, descubrí lo siguiente (en este ejemplo, los tableros de jugadores son "Alexandria" y "Roma"):

Query pt2.PNG

Cualquier ID de juego que tuviera 11 filas (una para cada categoría individual) incluía uno de los tableros, y cualquier ID de juego donde el recuento era de 22 o más significaba que esos dos tableros estaban en juego. Por lo tanto, necesitaba asegurarme de que solo los ID de juego en los que el recuento de filas era 22 o más se incluyeron en la expresión más grande. Como resultado, mi variable se convirtió en:

VAR H2HGamesPlayed =
    FILTER (
        VALUES ('Game Fact'[Game ID]),
        CALCULATE(COUNTROWS('Game Fact'),'Game Fact'[Game Board] IN {P1Board,P2Board}) >= Number
    )
RETURN

Que asumí que devolvió una lista/ tabla de sólo los 4 ID de juego.

¿Tiene sentido? Como digo, la expresión de puntos Total Average funciona correctamente... pero tal vez eso es por casualidad y no por diseño?

Sé que si cambio la variable a 1 como usted sugirió, el objeto visual mostró, sin embargo, los puntos promedio eran incorrectos, ya que incluían cada ID de juego donde el tablero de ese jugador estaba presente, no sólo esos juegos contra el otro jugador.

Gracias por ayudarme con esto. ¿Alguna idea de cómo puedo seguir adelante desde aquí?

Creo que reescribiría la medida a esto:

Head2Head P1 Avg Points = 
VAR P1Board = SELECTEDVALUE('Player1'[Game Board]) 
VAR P2Board = SELECTEDVALUE('Player2'[Game Board]) 

VAR _GamesPlayed_P1Board =
    FILTER (
        VALUES ('Game Fact'[Game ID]),
        CALCULATE(COUNTROWS('Game Fact'),'Game Fact'[Game Board] IN {P1Board})>=1
    )

VAR _GamesPlayed_P2Board =
    FILTER (
        VALUES ('Game Fact'[Game ID]),
        CALCULATE(COUNTROWS('Game Fact'),'Game Fact'[Game Board] IN {P2Board})>=1
    )    

var _gamesPlayed_P1P2Boards =
INTERSECT(_GamesPlayed_P1Board,_GamesPlayed_P2Board)

RETURN

CALCULATE(AVERAGE('Game Fact'[Points]),FILTER('Game Fact','Game Fact'[Game Board]=P1Board && 'Game Fact'[Game ID] in _gamesPlayed_P1P2Boards))

Esta parte devuelve todos los identificadores del juego donde el tablero de juego es igual al tablero del jugador 1

VAR _GamesPlayed_P1Board =
    FILTER (
        VALUES ('Game Fact'[Game ID]),
        CALCULATE(COUNTROWS('Game Fact'),'Game Fact'[Game Board] IN {P1Board})>=1
    )

y esto devuelve todos los identificadores del juego donde el tablero de juego es igual al tablero del jugador 2:

VAR _GamesPlayed_P2Board =
FILTER (
VALUES ('Game Fact'[Game ID]),
CALCULATE(COUNTROWS('Game Fact'),'Game Fact'[Game Board] IN {P2Board})>=1
)

Mediante el uso de la función de intersección, obtenemos todos los identificadores del juego donde el juego ha estado entre el tablero del jugador 1 y el tablero del jugador 2:

var _gamesPlayed_P1P2Boards =
INTERSECT(_GamesPlayed_P1Board,_GamesPlayed_P2Board)

Ahora utilice esto en el cálculo principal:

CALCULATE(
   AVERAGE('Game Fact'[Points]),
   FILTER(
      'Game Fact',
      'Game Fact'[Game Board]=P1Board &&
      'Game Fact'[Game ID] in _gamesPlayed_P1P2Boards
   )
)

Hola @sturlaws

Muchas gracias. No sólo funciona perfectamente la solución, sino que estoy muy agradecido por la explicación paso a paso de la solución.

Atentamente

Paul

Helpful resources

Announcements
Europe Fabric Conference

Europe’s largest Microsoft Fabric Community Conference

Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.

AugPowerBI_Carousel

Power BI Monthly Update - August 2024

Check out the August 2024 Power BI update to learn about new features.

September Hackathon Carousel

Microsoft Fabric & AI Learning Hackathon

Learn from experts, get hands-on experience, and win awesome prizes.

Sept NL Carousel

Fabric Community Update - September 2024

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

Top Solution Authors