Check your eligibility for this 50% exam voucher offer and join us for free live learning sessions to get prepared for Exam DP-700.
Get StartedDon'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.
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 |
Clase1 | Portafolio1 | Índice1 | 20 | 3 |
Clase1 | Portafolio1 | Índice2 | 30 | 2 |
Clase1 | Portafolio2 | Índice3 | 50 | 4 |
Clase2 | Portafolio3 | Índice4 | 50 | 6 |
Clase2 | Portafolio4 | Índice5 | 50 | 4 |
Clase3 | Portafolio5 | Índice6 | 200 | 5 |
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])
)
)
Solved! Go to Solution.
Para este cálculo solo necesita hacer la siguiente medida:
Weigthed average = DIVIDE (
SUMX ( 'Table', 'Table'[Market Value ] * 'Table'[Value] ),
SUM ( 'Table'[Market Value ] )
)
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:
¿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:
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.
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.
Para este cálculo solo necesita hacer la siguiente medida:
Weigthed average = DIVIDE (
SUMX ( 'Table', 'Table'[Market Value ] * 'Table'[Value] ),
SUM ( 'Table'[Market Value ] )
)
¡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?
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:
¿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:
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.
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.
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!
Check out the January 2025 Power BI update to learn about new features in Reporting, Modeling, and Data Connectivity.