Segmentación dinámica con DAX 1

Inicio una serie de tres artículos sobre segmentación dinámica de datos

Se trata de poder definir rangos, segmentos o intervalos de datos y obtener con DAX que importes o cantidades de elementos los componen.

Y además que sea de modo dinámico: o sea, se vea afectado por los filtros que apliquemos

La mayoría de las ideas las he obtenido de dynamic segmentation que es una excelente web de DAX aplicado a Excel.

Lo he trabajado y aplicado a Power BI añadiendo algunos datos que interesa obtener: cantidad de elementos (clientes, artículos, etc…) que están en un rango.

Partimos del A3ERP Ventas totales detalladas base que pude obtener de nuestra página de descargas

Vamos a intentar obtener un cuadro que nos diga cuantos artículos hemos vendido de precio Alto, Medio y Bajo, siendo esto unos valores que podemos definir nosotros.

Tabla de rangos

Primero hay que crear una tabla de rangos de precios a nuestro gusto

Vamos a Inicio, Especificar datos

Y creamos una tabla de rangos de precios según nos interese

Antes de guardar le damos nombre: Rango precios

Si posteriormente necesita editar los rangos deberá recurrir al truco Como editar los datos entrados en Especificar datos

La medida para el rango

Como en la tabla de ventas no hay el precio vamos a Añadir una columna que lo calcule

Precio = DIVIDE(Ventas[Neto];Ventas[Unidades];0)

Uso el Divide para que si hay unidades 0, no de un error, sino de 0

Y añadimos una medida con la siguiente formula

EUR Rango precios =

CALCULATE (

SUM(Ventas[Neto]);

FILTER (

VALUES ( Ventas[Precio] );

COUNTROWS (

FILTER (

‘Rangos precios’;

Ventas[Precio] >= ‘Rangos precios'[Minimo]

&& Ventas[Precio] < ‘Rangos precios'[Maximo]

)

) > 0

)

)

Lo que podemos explicar como

Calcula la suma de neto, filtrando según el precio, en la tabla de rangos precios donde el precio >= mínimo y precio < máximo

Ahora lo vamos a representar en una tabla

Y obtenemos

Lo que nos indica la suma de los importes vendidos en cada rango de precios

Verificación de los cálculos

Siempre que hagamos cálculos es bueno buscar una manera de comprobarlo, para ello creamos otra tabla y ponemos

Donde Nº Factura, Artículo y Precio No se resumen

Y Unidades y Neto se suman

Al final tenemos los totales

Hasta aquí ambos totales cuadran.

Ahora vamos a aprovechar los filtros de la tabla para pedir que solo muestre los artículos cuyo precio es menor de 100

Lo que nos da un total de

Que cuadra con el importe Pequeño de nuestra tabla de rangos

Medidas complementarias: unidades y número de ventas

Queremos calcular también cuantas unidades se han vendido de cada rango de precios, para ello creamos la medida:

Q Rango precios =

CALCULATE (

SUM(Ventas[Unidades]);

FILTER (

VALUES ( Ventas[Precio] );

COUNTROWS (

FILTER (

‘Rangos precios’;

Ventas[Precio] >= ‘Rangos precios'[Minimo]

&& Ventas[Precio] < ‘Rangos precios'[Maximo]

)

) > 0

)

)

Que hace lo mismo que la medida anterior, pero sumando las unidades.

Y también queremos sabe cuántas líneas de factura se han hecho por rango de precios. Añadimos la medida:

Líneas Rango precios =

CALCULATE (

COUNT(Ventas[Artículo]);

FILTER (

VALUES ( Ventas[Precio] );

COUNTROWS (

FILTER (

‘Rangos precios’;

Ventas[Precio] >= ‘Rangos precios'[Minimo]

&& Ventas[Precio] < ‘Rangos precios'[Maximo]

)

) > 0

)

)

Donde usamos un COUNT, por ejemplo de artículo.

Si añadimos estos campos a nuestra tabla

Obtenemos

El total de importe, unidades y cantidad de líneas de cada rango de precio

Aprovecharemos los cálculos para ver la distribución de las ventas por familia, creando una matriz con

Obteniendo

Y como podemos comprobar los totales de la derecha cuadran con la tabla anterior.

Segmentación

Ahora añadimos un segmentador por rangos

Y una tabla que muestre los artículos con las dos columnas de EUR

Lo que nos da una tabla donde las dos columnas son iguales

Pero si en el segmentador marcamos Medio, obtenemos

Se ven las ventas de cada artículo, y el total de ventas de la empresa.

Pero en la columna EUR Rango solo salen las ventas de los artículos que se han vendido dentro del rango medio, en este caso de 100 a 600 € unidad

Visualización

Por ultimo representemos en un gráfico las ventas por meses y rango de precios

Obteniendo

Está claro que en febrero se venden más artículos de precio medio, cosa que baja en agosto.

Continua en Segmentación dinámica con DAX 2

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.