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
gracias por estos articulos estoy tratando de replicar esta solución con una necesidad que tengo la cual consiste en contar los registros de acuerdo a un rango. He realizo el paso a paso en donde he creado una tabla llamada Intervalo el cual contiene los rangos que necesito y en la medida DAX he realizado de algunas maneras pero sin exito.
Le agradezco si pueden revisar y validar en que estoy fallando.
Adjunto los datos que deseo ordenar.
ORDEN Rangos
111 1.596
111 1.668
111 1.59
111 1.617
111 1.551
111 1.8
111 1.86
111 1.98
111 1.89
111 1.86
111 1.89
111 1.92
111 1.92
111 1.86
111 1.83
111 1.74
111 1.89
111 1.89
111 1.92
111 1.92
111 1.89
111 1.86
Nombre de la tabla: Intervalos
Orden Minimo Maximo Cuenta de registros
1 0 1.77 6
2 1.78 1.92 15
3 1.93 2.1 1
Gracias