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

Don't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register now.

Reply
Syndicate_Admin
Administrator
Administrator

Promedio ponderado en diferentes niveles de agregación utilizando la tabla resumida neta

Hola

Tengo el siguiente conjunto de datos de prueba, con 3 niveles diferentes de agrupación. Y quiero hacer una medida "Vaue WA" para Valor, y hacer una matriz como la que se muestra en la imagen después. Básicamente, es el promedio ponderado de "Valor" basado en "Valor de Mercado" para las subcategorías contenidas en él. Si está en la fila de "Portfolio1", es el WA de Index1 e Index2, y si está en la fila de "Class1", es el WA de "Portfolio1" y "Portfolio2", etc.

Tenía el código para medir "Valor WA" en la parte inferior usando RESUME neto. Pero de alguna manera no funciona adecuadamente. No puedo entender por qué, pero supongo que está en la última línea de "RETURN SUMX(SubTable2, [Value2] * [WT2])"

Por favor, ayúdame con el enfoque correcto. ¡Muchas gracias!

GroupLevel1 GroupLevel2 GroupLevel3 Valor de mercado Valor
Clase1Portafolio1Índice1203
Clase1Portafolio1Índice2302
Clase1Portafolio2Índice3504
Clase2Portafolio3Índice4506
Clase2Portafolio4Índice5504
Clase3Portafolio5Índice62005

Capture.JPG

Value WA = 
IF( ISFILTERED('Table'[GroupLevel3]),
    CALCULATE(SUM('Table'[Value])),
    VAR SubTable1 = 
            ADDCOLUMNS(
                SUMMARIZE('Table','Table'[GroupLevel3],'Table'[GroupLevel2],'Table'[GroupLevel1]),
                "WT3", CALCULATE(SUM('Table'[Market Value])) /
                       CALCULATE(SUM('Table'[Market Value]),
                                ALL('Table'[GroupLevel3])),
                "Value3", CALCULATE(SUM('Table'[Value])))
    VAR Val_level2 = SUMX(SubTable1, [Value3] * [WT3])
    RETURN
        IF( ISFILTERED('Table'[GroupLevel2]),
            Val_level2,
            VAR SubTable2 = ADDCOLUMNS(
                                SUMMARIZE(SubTable1,[GroupLevel2]),
                                "WT2", CALCULATE(SUM('Table'[Market Value])) /
                                       CALCULATE(SUM('Table'[Market Value]),
                                                ALL('Table'[GroupLevel2])),
                                "Value2", Val_level2)
            RETURN SUMX(SubTable2, [Value2] * [WT2])
    )
)

2 ACCEPTED SOLUTIONS
Syndicate_Admin
Administrator
Administrator

@alwang ,

Para este cálculo solo necesita hacer la siguiente medida:

Weigthed average = DIVIDE (
    SUMX ( 'Table', 'Table'[Market Value  ] * 'Table'[Value] ),
    SUM ( 'Table'[Market Value  ] )
)

MFelix_0-1649752638965.png

View solution in original post

@alwang ,

Esto tiene que ver con el hecho de que está reutilizando la subtabla1 y recalculando los valores sobre ella.

La subtabla1 devuelve los siguientes valores:

MFelix_0-1649782612975.png

¿Puede ver que el resultado está dando una línea por nivel de grupo y luego recoge los valores que necesita y hace los cálculos en este caso, por ejemplo, para la Cartera 1:

0.4 * 3 + 0.6 * 2 = 1,2 + 1.2 = 2.4, por lo que el resultado correcto tiene que esperar.

Si lo sé, elija su segunda tabla y vea los valores que obtiene:

MFelix_1-1649782918136.png

Lo que está sucediendo aquí es que está calculando el SUMX (val_level2) y obteniendo ese resultado y agregándolo a su tabla anterior, por lo que está recogiendo todas las 6 líneas que las suman y luego colocándolas tiene un valor en su cálculo, pero como es con toda la tabla se obtiene en cada línea el mismo valor.

Dado que DAX es un lenguaje que utiliza el contexto en los cálculos, no es necesario repetir el resumen, etc.

Eso es lo que estoy haciendo en mi cálculo, estoy recogiendo para cada línea los valores del valor de mercado correspondiente por la suma de valor.

MFelix_2-1649784259191.png

En cada nivel obtengo el valor correcto, así que para el nivel de grupo también obtengo la suma correcta porque es solo la suma de los niveles a continuación, luego divido esto por la suma en ese nivel para que esto profundice sin importar dónde se encuentre.

View solution in original post

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

@alwang ,

Para este cálculo solo necesita hacer la siguiente medida:

Weigthed average = DIVIDE (
    SUMX ( 'Table', 'Table'[Market Value  ] * 'Table'[Value] ),
    SUM ( 'Table'[Market Value  ] )
)

MFelix_0-1649752638965.png

¡Gracias Félix!

Solo tengo curiosidad. ¿Sabes por qué mi método no funciona? el Val_level2 funciona bien si está en el ámbito GroupLevel2, pero no funciona si quiero usarlo al resumir SubTable2 como una expresión escalar?

@alwang ,

Esto tiene que ver con el hecho de que está reutilizando la subtabla1 y recalculando los valores sobre ella.

La subtabla1 devuelve los siguientes valores:

MFelix_0-1649782612975.png

¿Puede ver que el resultado está dando una línea por nivel de grupo y luego recoge los valores que necesita y hace los cálculos en este caso, por ejemplo, para la Cartera 1:

0.4 * 3 + 0.6 * 2 = 1,2 + 1.2 = 2.4, por lo que el resultado correcto tiene que esperar.

Si lo sé, elija su segunda tabla y vea los valores que obtiene:

MFelix_1-1649782918136.png

Lo que está sucediendo aquí es que está calculando el SUMX (val_level2) y obteniendo ese resultado y agregándolo a su tabla anterior, por lo que está recogiendo todas las 6 líneas que las suman y luego colocándolas tiene un valor en su cálculo, pero como es con toda la tabla se obtiene en cada línea el mismo valor.

Dado que DAX es un lenguaje que utiliza el contexto en los cálculos, no es necesario repetir el resumen, etc.

Eso es lo que estoy haciendo en mi cálculo, estoy recogiendo para cada línea los valores del valor de mercado correspondiente por la suma de valor.

MFelix_2-1649784259191.png

En cada nivel obtengo el valor correcto, así que para el nivel de grupo también obtengo la suma correcta porque es solo la suma de los niveles a continuación, luego divido esto por la suma en ese nivel para que esto profundice sin importar dónde se encuentre.

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

Jan25PBI_Carousel

Power BI Monthly Update - January 2025

Check out the January 2025 Power BI update to learn about new features in Reporting, Modeling, and Data Connectivity.

Jan NL Carousel

Fabric Community Update - January 2025

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

Top Solution Authors