Cálculo del promedio ponderado

Un usuario Pregunto ✅

rigosakhx

Hola,

Llegué a un obstáculo y busco ayuda para calcular el promedio ponderado de los siguientes datos.

La columna Risk2 determina qué productos están en una categoría de riesgo y se calcula de la siguiente manera

Risk2 = if(([Consumption]) > [Forecast],0,1)

Sospecho que hay una mejor manera de calcular la proporción de elementos de «Riesgo» para cada subcategoría (AC). Intenté usar ALLSELECTED[GROUP] pero por alguna razón no funcionó. Aquí está la medida calculada que usé.

% = DIVIDE(sum([Risk2]), calculate(COUNT([Risk2]),ALLSELECTED([ITEMCODE])))

Y luego el resultado final que estoy tratando de lograr es el peso promedio
El grupo A tiene el 50% del peso,

Grupo B – 30%

Grupo C – 20%
y los restantes grupos (DF) son 0%.

Necesito obtener la suma del % de cada grupo multiplicado por peso – 60*0.5 + 93.75*0.3 + 80*0.2 = 74.25

La medida actual es una declaración IF simple pero eso no parece funcionar

Weighted % = 
VAR FR = 
DIVIDE(sum([Risk2]), calculate(COUNT([Risk2]),ALLSELECTED([ITEMCODE])))
RETURN
IF(MAX([GROUP] )= "A",FR * 0.5, 
IF (MAX([GROUP]) = "B", FR * 0.3,
IF( MAX([GROUP]) = "C", FR * 0.2, 
IF( MAX([GROUP]) = "D", FR * 0,
IF( MAX([GROUP]) = "E", FR * 0,
IF( MAX([GROUP]) = "F", FR * 0,FR * 0
))))))

Gracias

rigosakhx_0-1604863715719.png

allisonkennedy

Debe proporcionar un contexto de fila para que esto funcione cuando hay más de un grupo seleccionado.

Intenta usar:

Weighted % = 
VAR FR = 
DIVIDE(sum([Risk2]), calculate(COUNT([Risk2]),ALLSELECTED([ITEMCODE])))
RETURN
SUMX(VALUES([GROUP]), 
SWITCH([Group]
, "A",FR * 0.5 
, "B", FR * 0.3
, "C", FR * 0.2
, "D", FR * 0
, "E", FR * 0
,"F", FR * 0
,FR * 0
)
)

Además, probablemente pueda usar la función PROMEDIO en lugar de DIVIDIR, SUMAR y CONTAR.

allisonkennedy

@rigosakhx Eso se ve bonito y elegante. Bien hecho, y de nada. 🙂

rigosakhx

Actualización: según AllisonKennedy, reemplazó DIVIDE SUM COUNT con AVERAGE y creó una medida separada para ello.

% = PROMEDIO[Risk2]

Entonces no necesité usar el VAR en mi medida final

% ponderado =
SUMX(VALORES([GROUP]),
CAMBIAR([Group]
«A», PROMEDIO * 0.5
«B», PROMEDIO * 0.3
«C», PROMEDIO * 0.2
,PROMEDIO* 0
))

El código tiene más sentido y funciona según lo previsto.

Muchas gracias a AllisonKennedy

rigosakhx

Hola @AllisonKennedy
Gracias por esto
Casi funcionó, pero por alguna razón la suma es igual a la proporción no ponderada

allisonkennedy

Debe proporcionar un contexto de fila para que esto funcione cuando hay más de un grupo seleccionado.

Intenta usar:

Weighted % = 
VAR FR = 
DIVIDE(sum([Risk2]), calculate(COUNT([Risk2]),ALLSELECTED([ITEMCODE])))
RETURN
SUMX(VALUES([GROUP]), 
SWITCH([Group]
, "A",FR * 0.5 
, "B", FR * 0.3
, "C", FR * 0.2
, "D", FR * 0
, "E", FR * 0
,"F", FR * 0
,FR * 0
)
)

Además, probablemente pueda usar la función PROMEDIO en lugar de DIVIDIR, SUMAR y CONTAR.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *