Obtención de los datos de ventas relativos a los 10 productos con mayores ventas

En este escenario partimos de una tabla de ventas ("Sales") y otra con información sobre los productos ("Products"). En la primera tenemos un campo que indica el producto vendido y otro ("Amount") con la cifra de venta. En la tabla de productos tenemos un campo ("Product name") con el nombre del producto. Obviamente, ambas tablas están relacionadas a través de un campo que contiene el identificador de cada producto.

El objetivo es la creación de una tabla que contenga toda la información de ventas para los 10 productos con mayores ventas (es decir, queremos un subconjunto de la tabla de ventas Sales que contenga información solo de los 10 productos más vendidos). Este escenario es semejante al de Obtención de los 10 clientes que más compras acumulan, salvo por el hecho de que, aquí, no queremos un simple listado de productos con sus cifras de ventas, sino toda la información de ventas relativa a dichos productos.

El plan es sencillo: Generamos una tabla de ventas totales por cada producto, seleccionamos los 10 con mayores cifras y utilizamos esta información para filtrar la tabla original de ventas de forma que solo incluya datos para dichos productos.

Comencemos con la primera de las tablas: la agregación de ventas por producto. Para ello recurrimos a la función SUMMARIZE, especificando como campo de agregación Products[Product name] y como columna a crear la resultante de aplicar la función SUM al campo Sales[Amount]:

10 productos más vendidos = 
    VAR
        VentasPorProducto =
            SUMMARIZE(
                Sales;
                Products[Product name];
                "Sales"; SUM(Sales[Amount])
            )
    RETURN
        VentasPorProducto

Tabla agregada de total de ventas por producto

Como puede verse, se ha llevado la expresión a una variable para poder seguir completando la tabla calculada.

Ahora queremos quedarnos solamente con los 10 productos con mayores ventas, para lo que recurrimos a la función TOPN. Como tabla de partida indicamos la anteriormente obtenida y como expresión, el campo Sales creado:

10 productos más vendidos = 
    VAR
        VentasPorProducto =
            SUMMARIZE(
                Sales;
                Products[Product name];
                "Sales"; SUM(Sales[Amount])
            )
    VAR
        ProductosMasVendidos =
            TOPN(
                10;
                VentasPorProducto;
                [Sales]
            )
    RETURN
        ProductosMasVendidos

Tabla de los 10 productos más vendidos

Por último queremos utilizar esta tabla para filtrar la tabla de ventas, Sales. Para ello vamos a utilizar la función NATURALINNERJOIN para crear una combinación natural entre la tabla de ventas y la tabla generada con los productos más vendidos. Al tratarse de una combinación natural interna, solo se mantendrán los registros que compartan los mismos valores en el campo o campos comunes. El campo común es Product Name (en el caso de la tabla Sales, el campo viene dado por su relación con la tabla Products). El código es el siguiente:

10 productos más vendidos = 
    VAR
        VentasPorProducto =
            SUMMARIZE(
                Sales;
                Products[Product name];
                "Sales"; SUM(Sales[Amount])
            )
    VAR
        ProductosMasVendidos =
            TOPN(
                10;
                VentasPorProducto;
                [Sales]
            )
    RETURN
        NATURALINNERJOIN(
            Sales;
            ProductosMasVendidos
        )

...y el resultado es el que podemos ver en la siguiente imagen:

Tabla resultante de la combinación natural interna

Vemos que se incluyen los campos de ambas tablas. Podríamos seleccionar solo los campos de interés con SELECTCOLUMNS, por ejemplo.

DAX functions involved
Submitted by admin on Sun, 07/28/2019 - 12:17