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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

Ayuda de DAX necesaria: ¿Cómo se agrupa por en una medida y se obtiene el máximo del grupo usando DAX?

Tengo una situación en la que tengo una mesa como esta:

AñoNombreValor
2019Instalación A10
2019Instalación B20
2019Instalación C15
2020Instalación B5
2020Instalación C1
2021Instalación A2
2021Instalación B-25
2021Instalación C75
2018Instalación A10
2018Instalación B5
2018Instalación C18

Quiero que una persona pueda seleccionar "su ubicación" y ver los valores anuales promedio y los valores máximos para otras instalaciones (excluyendo la suya) de la siguiente manera:

arpost_2-1645816568555.png

Para hacer esto, necesito llegar a una medida que

  1. Filtra un nombre específico (es decir, "Instalación B") que cambia dinámicamente en función de un filtro (por ejemplo, hoy filtro la Instalación B, mañana la Instalación C)
  2. Grupos por año
  3. Promedia los valores de ese año
  4. Da el promedio máximo.

Aquí hay un ejemplo de cómo sería la salida en un formato de tabla (pero no es dinámica basada en filtros):

arpost_0-1645815969099.png

En este ejemplo, el MAX sería 38.5.

Pensé que podría hacer esto en una medida usando una variación en el código como este, pero no puedo llegar a una columna específica en el grupo:

arpost_1-1645816240755.png

Aquí está el DAX:

MaxNonSelectedFacility = 
var Value1 = GroupBY(Filter('Table','Table'[Name] <> SelectedValue(Facilities[Name]) ),'Table'[Year],"AverageVal",Average('Table'[Val]))

RETURN 

Max(Value1[AverageVal])

¿Alguien tiene ideas?

1 ACCEPTED SOLUTION

Lo sentimos, intente modificarlo de la siguiente manera:

Max Average for Others = 

VAR SelectedFacility = SELECTEDVALUE ( Facility[Name] )

VAR Result =
        MAXX (
            VALUES( 'Year'[Year] ),
            CALCULATE (
                AVERAGE ( ValueTable[Value] ),
                REMOVEFILTERS( Facility ),          
                NOT Facility[Name] = SelectedFacility
            )
        )

RETURN Result

View solution in original post

5 REPLIES 5
Syndicate_Admin
Administrator
Administrator

@bcdobbs, funciona maravillosamente! Mank gracias.

Acabo de pasar unos buenos 20 minutos rascándome la cabeza preguntándome por qué mi medida original no funcionó. Si está interesado, la siguiente corrección lo resuelve (Observe el cálculo adicional dentro de MAXX)

Max Average for Others Wrong = 

VAR SelectedFacility = SELECTEDVALUE ( Facility[Name] )

VAR Result =
    CALCULATE (
        MAXX (
            VALUES ('Year'[Year] ),
            CALCULATE ( AVERAGE ( ValueTable[Value] ) )
        ),
    REMOVEFILTERS( Facility ),
    NOT Facility[Name] = SelectedFacility
    )

RETURN Result

Sin el CALCULATE adicional dentro del MAXX no obtienes una transición de contexto. Por lo tanto, en la fila total no hay ningún año en el contexto del filtro y, aunque esté iterando cada año en el MAXX, ese año no se está moviendo al contexto del filtro. Así que devuelve el promedio de todos los años

Syndicate_Admin
Administrator
Administrator

Vea si esto funciona para usted: Demo

Creé una tabla de dimensiones Facility y Year con el siguiente DAX:

Facility = DISTINCT ( ValueTable[Name] )

Year = DISTINCT ( ValueTable[Year] )

Y los usó para formar un esquema de estrellas:

bcdobbs_0-1645821435578.png

Medida básica para el Mecanismo seleccionado:

Selected Average = AVERAGE ( ValueTable[Value] )

Luego utilicé MAXX para iterar a lo largo de los años y calcular un promedio para cada retorno máximo. El CALCULATE me permite invertir la selección:

Max Average for Others = 

VAR SelectedFacility = SELECTEDVALUE ( Facility[Name] )

VAR Result =
    CALCULATE (
        MAXX (
            VALUES ('Year'[Year] ),
            AVERAGE ( ValueTable[Value] )
        ),
    REMOVEFILTERS( Facility ),
    NOT Facility[Name] = SelectedFacility
    )

RETURN Result

@bcdobbs, gracias por la respuesta! Esto definitivamente está cerca. El único problema con el que me estoy encontrando es que esto funciona cuando se aplica a un año determinado, pero muestra el promedio "general" cuando no se le da un contexto anual. En esta imagen, puede ver que el Promedio en la tarjeta muestra el promedio de los promedios en lugar de 25, que es el valor máximo para todos los años.

arpost_1-1646062424381.png

¿Se puede modificar esto para mostrar el valor más grande?

Lo sentimos, intente modificarlo de la siguiente manera:

Max Average for Others = 

VAR SelectedFacility = SELECTEDVALUE ( Facility[Name] )

VAR Result =
        MAXX (
            VALUES( 'Year'[Year] ),
            CALCULATE (
                AVERAGE ( ValueTable[Value] ),
                REMOVEFILTERS( Facility ),          
                NOT Facility[Name] = SelectedFacility
            )
        )

RETURN Result

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

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

April Fabric Community Update

Fabric Community Update - April 2024

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