Gran total de promedio ponderado y contexto de medida

Un usuario Pregunto ✅

Jon07

Hola,

Tengo problemas para comprender el contexto de fila en Power BI. Tengo un caso en el que quiero calcular el promedio ponderado de una medida de proporción por año. Luego, quiero que el total de ese promedio se muestre como una línea fija (el mismo número en todas las filas por categoría).

Capture.PNG

Capture2.PNG

m_w_avg_churn = 
VAR __CATEGORY_VALUES = VALUES('Dim_Date_filtered'[Year])

--RETURN
VAR __w_avg = 
	CALCULATE(DIVIDE(
            SUMX(
                KEEPFILTERS(__CATEGORY_VALUES),
                CALCULATE([test] * [m_Utmeldte])
            ),
            SUMX(KEEPFILTERS(__CATEGORY_VALUES), CALCULATE([m_Utmeldte]))
	    ),
    Dim_Date_filtered[Year] <> BLANK()
)

RETURN 
    CALCULATE(__w_avg, ALL(Dim_Date_filtered[Year]))

donde prueba = medida de proporción

Intenté poner toda la w. prom. cálculo en una variable y luego elimine todos los filtros en ese cálculo en calcular después. Esto no funcionó.

También probé diferentes variaciones de all (), allselected () y allexcept () en el parámetro de filtro de calcular (vea las líneas comentadas a continuación); esto tampoco funcionó.

m_w_avg_churn = 
VAR __CATEGORY_VALUES = VALUES('Dim_Date_filtered'[Year])

RETURN
--VAR __w_avg = 
	CALCULATE(DIVIDE(
            SUMX(
                KEEPFILTERS(__CATEGORY_VALUES),
                CALCULATE([test] * [m_Utmeldte])
            ),
            SUMX(KEEPFILTERS(__CATEGORY_VALUES), CALCULATE([m_Utmeldte]))
	    ),
        --all(Dim_Date_filtered[Year]),
        --ALLEXCEPT(Dim_Date_filtered),
        --all(),
        --ALLSELECTED(Dim_Date_filtered[Year])
    Dim_Date_filtered[Year] <> BLANK()
)

La única forma en que llegué al número final fue creando otra medida:

test_3 = CALCULATE([m_w_avg_churn], all(Dim_Date_filtered[Year]))

Sí, esto funcionó.

Pero para mí no tiene ningún sentido por qué esto funciona y los otros no. ¿Alguien puede arrojar algo de luz sobre el concepto de contexto en PBI? O muestre cómo se puede hacer esto solo con la primera medida.

¡Gracias!

Hola @ Jon07,

1. También podrías usar medida rápida para calcular el promedio ponderado.

6.PNG

2. La función de TODOS ignora los filtros que podrían haberse aplicado y devuelve todas las filas de una tabla o todos los valores de una columna. Entonces, la medida «test_3» significa calcular «[m_w_avg_churn]»y no se ve afectado por» año «.

Aquí hay un blog sobre el contexto de fila y el contexto de filtro en DAX del que puede aprender. Cuando comencé a aprender DAX, estaba confundido sobre el contexto como tú. Si practica más, podrá comprenderlo mejor.

Atentamente,

Xue Ding

Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente

Jon07

En respuesta a v-xuding-msft

Hola @ v-xuding-msft:

la primera medida en la publicación se basa en realidad en la medida rápida a la que hace referencia, con pequeños ajustes.

Al final obtengo el resultado deseado. Pero lo que me desconcierta es que test_3 (que es una medida de otra medida de m_w_avg_churn) funciona, pero cuando hago la misma lógica para test_3 dentro m_w_avg_churn – la función all () no quiere jugar conmigo.

Gracias por el artículo. Toda la idea del contexto todavía necesita hundirse en mi cabeza, pero como dijiste, los conceptos (con suerte) llegarán con el tiempo.

Deja un comentario

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