martes, 5 de mayo de 2020

PowerPivot: Doble CROSSFILTER con DAX

Continuando con el modelo de datos del post anterior, expondré un ejemplo adicional de cómo y cuándo emplear un 'doble CROSSFILTER'.
Ver post anterior aquí.

El modelo de datos:

PowerPivot: Doble CROSSFILTER con DAX



Un apunte relevante para estos casos:
Si las expresiones de CALCULATE están anidadas y más de una expresión de CALCULATE contiene una función CROSSFILTER, la instancia de CROSSFILTER más interna es la que prevalece en caso de conflicto o ambigüedad.


El ejercicio de hoy consiste en lograr un informe que muestre un resultado de los Precios de coste por tipos de IVA y por Zonas.

Así pues comenzaremos creando una primera medida donde se emplea CROSSFILTER para saltarse el sentido inverso de la relación entre las tablas
TblProducto y TblPdtoPrecio
La medida sería:
PCM:=AVERAGEX(TblVentas;CALCULATE(SUM(TblPdtoPrecio[Precio unitario coste]);CROSSFILTER(TblProducto[Id Pdto];TblPdtoPrecio[Id Pdto];Both)))

La siguiente medida que se basa en la anterior (para facilitar su comprensión) y donde empleamos la segunda función CROSSFILTER sobre las tablas:
TblDirector y TblPais
sería:
PCM_total:=CALCULATE([PCM];CROSSFILTER(TblDirector[Cod país];TblPais[Cod país];Both))

PowerPivot: Doble CROSSFILTER con DAX



Al generar el informe de tabla dinámica en la hoja de cálculo, empleando estas medidas vemos los diferentes comportamientos...

PowerPivot: Doble CROSSFILTER con DAX



Observamos que la primera de las medidas [PCM] donde solo teníamos en cuenta una de las 'relaciones inversas' al usar CROSSFILTER(TblProducto[Id Pdto];TblPdtoPrecio[Id Pdto];Both), en la columna C de la hoja, donde deberíamos ver el dato cruzado de Tipo de IVA y Zona, solo se muestra el cruce de uno de ellos... sin considerar los elementos del otro... con valores en todas las zonas, incluso donde no existen datos ¿!?.
Llegamos solo al Precio de Coste asociado por producto, pero no a la Zona!!.

Sin embargo, comprobamos que sobre la segunda medida [PCM_total], donde si aplican los cambios en las dos relaciones... (con el segundo CROSSFILTER(TblDirector[Cod país];TblPais[Cod país];Both) )si llegamos al dato cruzado correcto.

No hay comentarios:

Publicar un comentario

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