jueves, 16 de diciembre de 2021

DAX: Media Ponderada en Tabla dinámica

Tiempo atrás escribí un artículo donde explicaba un uso interesante de la función DAX en Power Pivot HASONEVALUE en el modelo de datos (leer más aquí).
Esta función, entre otras cosas, nos permite diferenciar cálculos para las filas y para los Subtotales/Totales generales de una tabla dinámica.

Hoy daremos una vuelta al tema tratado, del cálculo de las medias ponderadas en tablas dinámicas, ya que buscaremos una medida en el modelo de datos de Power Pivot que muestre una media ponderada sobre un total anual, mientras que los subtotales/totales generales lo mostrarán sobre los datos solo de un trimestre.
DAX: Media Ponderada en Tabla dinámica


Si revisas la tabla dinámica con detalle, cargada a partir del modelo de datos, comprobaras en las columnas I, J y K el cálculo mostrado a partir de las siguientes medidas:
    PMP_TA:=SUMX(Tabla1;Tabla1[Ventas_EUR])/SUMX(Tabla1;Tabla1[Ventas Anuales])
PMP_Q4:=SUMX(Tabla1;Tabla1[Q4]*Tabla1[Precio_Unitario])/SUMX(Tabla1;Tabla1[Q4])
Media_Ponderada:=IF(HASONEVALUE(Tabla1[Categoría]);[PMP_Q4];[PMP_TA])
Medidas que replican el comportamiento de un 'campo calculado' estándar de una tabla dinámica, esto es, primero suman o acumulan los campos involucrados, para luego realizar la operación definida...
Nos muestra el cálculo del precio medio ponderado para cada 'Categoría' bien sobre el Total de las unidades vendidas en el año, o bien sobre las unidades vendidas en el cuarto trimestre.
Como cualquier campo calculado estándar en una tabla dinámica, estas medidas se aplican igualmente, i.e., con el mismo cálculo, en las filas de Totales generales (o Subtotales).

En nuestro caso queremos que a nivel de fila muestre la media ponderada calculada sobre el cuarto trimeste, mientras que (por distintos motivos) en la fila de 'Total general' muestre la media ponderada calculada sobre el Total del año... y es aquí donde HASONEVALUE entra a jugar..., ya que en la medida creada:
Media_Ponderada:=IF(HASONEVALUE(Tabla1[Categoría]);[PMP_Q4];[PMP_TA])
con un condicional IF derivamos hacía un cálculo u otro según el caso!!!.

Como apunte final, vemos en la medida del Precio Medio Ponderado del Cuarto Trimestre:
PMP_Q4:=SUMX(Tabla1;Tabla1[Q4]*Tabla1[Precio_Unitario])/SUMX(Tabla1;Tabla1[Q4])
cómo hemos cálculo el importe en euros del Q4, de manera interna, sin necesidad de agregar un campo formulado en la tabla origen...

Sin duda trabajar con tablas dinámicas alimentadas por el Modelo de datos es siempre buena idea.

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.