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
Hola, realmente aprecio si alguien puede ayudarme con este problema
Los datos se parecen a esta tabla
Escuela de IDENTIFICACIÓN | Nivel | Servicio | Qty |
101 | escuela primaria | Almuerzo | 20 |
101 | escuela primaria | Desayuno | 18 |
101 | escuela primaria | Aperitivos | 7 |
101 | escuela secundaria | Almuerzo | 30 |
101 | escuela secundaria | Desayuno | 40 |
Se requiere una medida que sumar la cantidad máxima por nivel
Escuela primaria Max Qty | 20 |
Escuela secundaria Max Qty | 40 |
Medir el resultado esperado | 60 |
Solved! Go to Solution.
Hola @KurtVogel ,
aquí hay una medida que considera más que una agrupación de columnas:
SUMX across MAX using SUMMARIZE =
SUMX(
ADDCOLUMNS(
SUMMARIZE(
'Table'
, 'Table'[ID School]
, 'Table'[Level]
)
, "MaxQty" , CALCULATE( MAX( 'Table'[Qty] ) )
)
, [MaxQty]
)
Si necesito más de una columna dentro de mi tabla iteradora utilizo SUMMARIZE(...) o funciones de tabla que me permiten componer tablas que son más complejas. Si solo hay una columna que determina la tabla, uso VALORES.
El resultado:
Con suerte, esto proporciona lo que necesita para enfrentar su desafío.
Entonces, volviendo a usar SUMMARIZECOLUMNS vs SUMMARIZE, dependiendo de sus requisitos, recomendaría usar SUMMARIZECOLUMNS ya que está optimizado y por esta razón, funcionará mejor, a veces podrá notar esta ventaja, a veces no, ya que esto dependerá del tamaño de sus datos.
Pero, por supuesto, las cosas pueden volverse más complejas, como muestra la siguiente captura de pantalla:
En la 2ª línea de visuales utilizo la medida "SUMX across MAX using SUMMARIZECOLUMNS":
SUMX across MAX using SUMMARIZECOLUMNS =
SUMX(
SUMMARIZECOLUMNS(
'Table'[ID School]
, 'Table'[Level]
, "MAXQty" , MAX( 'Table'[Qty] )
)
, [MAXQty]
)
La medida funciona dentro de la tarjeta visual pero se rompe dentro de la tabla visual.
Explicar por qué se rompe requiere más espacio del que está disponible aquí y ya está hecho al menos en cierta medida por el artículo que mencioné en mi respuesta anterior a @KNP. Aprender también significa desarrollar hábitos mediante el uso de patrones, los hábitos luego nos ayudarán a aplicar las cosas aprendidas más rápido. Por esta razón, desarrollé el hábito de usar RESUMIR sobre RESUMIRCOLUMNAS. Saber que RESUMIR no es tan rápido como RESUMIRCOLUMNS.
Cuando trabajo con grandes conjuntos de datos y cada milisegundo cuenta, a veces escribo medidas solo para un solo visual, estos momentos son raros y surgen otros problemas como la complejidad del modelo.
Saludos
Gato
SumOfMax =
SUMX (
RESUMIRCOLUMNAS (
Tabla[Nivel],
"MaxOfLevel", MAX ( Tabla[Cantidad] )
),
[MaxOfLevel]
)
Eh
no es posible usar SUMMARIZECOLUMNS dentro de un iterador de tabla.
Saludos
Gato
@TomMartens - Puede que te esté malinterpretando, pero mis pruebas tenderían a estar en desacuerdo. Sin embargo, definitivamente no soy un experto en DAX.
gracias, la solución funciona pero si aplico un filtro de contexto el visual mostrar error
Gracias por el ejemplo adicional.
No estoy seguro de cuál es el problema con el filtro. Necesitaría más detalles.
La forma en que lo resolvería sería...
SumOfMax =
SUMX (
SUMMARIZECOLUMNS (
'Table'[ID School],
'Table'[Level],
"GroupedMax", MAX ( 'Table'[Qty] )
),
[GroupedMax]
)
Puede pagar para ponerse al día con la conversación que tuve con Tom anteriormente, ya que esto puede no considerarse una buena práctica.
De lo contrario, tal vez espere a que @TomMartens responda, ya que no estoy seguro de cómo reescribir la versión "VALUES()" de la medida para incluir los dos niveles de agrupación que necesita.
Hola @KNP ,
por favor, disculpe, he sido un poco estricto diciendo
"no es posible usar SUMMARIZECOLUMNS dentro de un iterador de tabla",
Debería haber dicho
"no se debe usar SUMMARIZECOLUMNS dentro de una medida".
Esto se debe a que la función no es totalmente soportada, por esta razón, no la uso para evitar hábitos de construcción, que luego se convierten en un obstáculo si tengo que reescribir una medida o patrón que estoy tratando de adaptar a un determinado caso de uso donde SUMMARIZECOLUMNS no se puede usar. Aquí encontrará un artículo que explica esto con mucho más detalle: Presentación de SUMMARIZECOLUMNS - SQLBI
Una vez más, discúlpenme por ser tan estricto y, por supuesto, la medida funciona perfectamente para este requisito.
Saludos
Gato
Hola Tom,
Gracias por la aclaración.
Entiendo lo que estás diciendo. Funciona en este caso, pero no es una buena práctica.
DAX es definitivamente la parte más débil de mi conjunto de habilidades, así que siempre estoy feliz de aprender de los demás.
Siento que debería advertir mis respuestas relacionadas con DAX aquí con "No soy un experto en DAX", pero de nuevo, siento que todas las respuestas en la comunidad vienen con una advertencia implícita.
Saludos
Kim
Hola @KurtVogel
esta medida:
sum over max =
SUMX(
VALUES( 'Table'[Level] )
, CALCULATE( MAX( 'Table'[Qty] ) )
)
devuelve lo que buscas:
El uso de una función de iterador de tabla, aquí SUMX, es necesario porque no hay un encabezado de fila que se convierta en parte del contexto del filtro. Como el valor MAX debe calcularse para cada nivel escolar, VALUES( level ) se utiliza para determinar la tabla utilizada para la iteración. En la línea total, hay una iteración en dos filas (escuela secundaria, escuela primaria), dentro del cuerpo de la tabla visual solo hay una fila, ya que el "encabezado de fila" implícitamente "filtra" la tabla.
Con suerte, esto proporciona lo que está buscando.
Saludos
Gato
Hola, gracias! funciona para el ejemplo pero todavía tiene un pequeño problema, cuando se aplica esta medida a la tabla completa con varios ID School no muestra el valor correcto,
Escuela de IDENTIFICACIÓN | Nivel | Servicio | Qty |
101 | escuela primaria | Almuerzo | 20 |
101 | escuela primaria | Desayuno | 18 |
101 | escuela primaria | Aperitivos | 7 |
101 | escuela secundaria | Almuerzo | 30 |
101 | escuela secundaria | Desayuno | 40 |
602 | escuela primaria | Almuerzo | 10 |
602 | escuela primaria | Desayuno | 21 |
602 | escuela secundaria | Almuerzo | 25 |
602 | escuela secundaria | Desayuno | 15 |
Cantidad máxima por servicio en
ID 101
para la escuela primaria es 20,
Para la escuela secundaria es 40
en ID 602
para la escuela primaria es 21,
Para la escuela secundaria es 25
El resultado esperado de la medida es 20+40+21+25 = 106
pero la medida muestra 61
Muchas gracias por su tiempo
Hola @KurtVogel ,
aquí hay una medida que considera más que una agrupación de columnas:
SUMX across MAX using SUMMARIZE =
SUMX(
ADDCOLUMNS(
SUMMARIZE(
'Table'
, 'Table'[ID School]
, 'Table'[Level]
)
, "MaxQty" , CALCULATE( MAX( 'Table'[Qty] ) )
)
, [MaxQty]
)
Si necesito más de una columna dentro de mi tabla iteradora utilizo SUMMARIZE(...) o funciones de tabla que me permiten componer tablas que son más complejas. Si solo hay una columna que determina la tabla, uso VALORES.
El resultado:
Con suerte, esto proporciona lo que necesita para enfrentar su desafío.
Entonces, volviendo a usar SUMMARIZECOLUMNS vs SUMMARIZE, dependiendo de sus requisitos, recomendaría usar SUMMARIZECOLUMNS ya que está optimizado y por esta razón, funcionará mejor, a veces podrá notar esta ventaja, a veces no, ya que esto dependerá del tamaño de sus datos.
Pero, por supuesto, las cosas pueden volverse más complejas, como muestra la siguiente captura de pantalla:
En la 2ª línea de visuales utilizo la medida "SUMX across MAX using SUMMARIZECOLUMNS":
SUMX across MAX using SUMMARIZECOLUMNS =
SUMX(
SUMMARIZECOLUMNS(
'Table'[ID School]
, 'Table'[Level]
, "MAXQty" , MAX( 'Table'[Qty] )
)
, [MAXQty]
)
La medida funciona dentro de la tarjeta visual pero se rompe dentro de la tabla visual.
Explicar por qué se rompe requiere más espacio del que está disponible aquí y ya está hecho al menos en cierta medida por el artículo que mencioné en mi respuesta anterior a @KNP. Aprender también significa desarrollar hábitos mediante el uso de patrones, los hábitos luego nos ayudarán a aplicar las cosas aprendidas más rápido. Por esta razón, desarrollé el hábito de usar RESUMIR sobre RESUMIRCOLUMNAS. Saber que RESUMIR no es tan rápido como RESUMIRCOLUMNS.
Cuando trabajo con grandes conjuntos de datos y cada milisegundo cuenta, a veces escribo medidas solo para un solo visual, estos momentos son raros y surgen otros problemas como la complejidad del modelo.
Saludos
Gato
@TomMartens - Gracias por tomarse el tiempo para explicar. Las reglas sobre cuándo usar cuál en DAX sigue siendo un misterio para mí. Necesito ir a pasar mucho más tiempo con Alberto y Marco. 😁
¡Juntos aprendemos, juntos crecemos!
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.