The ultimate Microsoft Fabric, Power BI, Azure AI, and SQL learning event: Join us in Stockholm, September 24-27, 2024.
Save €200 with code MSCUST on top of early bird pricing!
Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started
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.
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
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"):
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
Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.
Check out the August 2024 Power BI update to learn about new features.
Learn from experts, get hands-on experience, and win awesome prizes.
User | Count |
---|---|
2 | |
1 | |
1 | |
1 | |
1 |