Anillado en DAX – R Marketing

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp

Contenidos

Nivel: intermedio

Como sabrían los lectores habituales de mi blog, disfruto ayudar a las personas en los foros que necesitan ayuda con DAX, Power Query o Power BI. Recientemente he respondido bastantes preguntas para personas que podrían beneficiarse de una solución DAX “Banding” y, por lo tanto, he decidido escribir esta publicación como un enlace permanente al tema. Aprendí por primera vez sobre la técnica de bandas DAX de Alberto Ferrari en http://sqlbi.com

¿Qué son las bandas?

El agrupamiento es una técnica que le permite «agrupar» o «estratificar» sus datos en una tabla en «bandas» (a veces se denomina análisis de cohortes). Digamos que tiene una tabla de clientes como esta (que se muestra a continuación). En mi base de datos de muestra tengo 18.000 clientes y sé la edad de cada uno.

image_thumb-11-4890612

Esto brinda la oportunidad de analizar los datos de ventas en función de la edad para que para saber si las personas de diferentes edades compran de manera diferente. A continuación se muestra una tabla dinámica que ilustra lo que es posible con los datos. Pero el problema es que hay demasiados detalles para ser útiles.

image_thumb-12-9280602

Realmente no quiero apuntar a los clientes de 35 años de manera diferente a los clientes de 36 años. Idealmente, me gustaría agrupar (o estratificar) a los clientes en «bandas» para poder tratar a un grupo de clientes similares de la misma manera. Por eso, es posible que desee agrupar a mis clientes de esta manera.

image_thumb-13-6497399

Una vez que haya agrupado a los clientes por edad, puedo crear una tabla dinámica como la que se muestra a continuación.

image_thumb-14-6226429

Observe que es mucho más fácil encontrar información sobre los datos cuando hay menos detalles. Inmediatamente puedo ver en la tabla dinámica anterior que a medida que las personas envejecen, tienden a estar más interesadas en las bicicletas de montaña y de turismo y menos en las bicicletas de carretera (por supuesto, esta es una base de datos falsa, por lo que las ideas no son necesariamente realistas). .

Necesitará una columna calculada para las bandas

Soy un firme defensor del uso de Medidas (no columnas calculadas) siempre que sea posible. Puede leer más sobre eso en mi Base de conocimientos aquí. Pero en este caso, una Medida no funcionará. Las medidas solo se pueden usar en la sección de valores de una tabla dinámica – no puede usarlos en las áreas de «filtrado» como Slicers, Rows, Columns y Filters. En la tabla dinámica anterior, las bandas se utilizan para dividir la tabla dinámica en filas y, por lo tanto, una medida no funcionará.

Podría escribir una declaración If

Entonces el objetivo es crear una columna calculada en la tabla de clientes que agrupa a las personas según la edad en una banda estratificada. Cualquier usuario de Excel sabría que puede escribir una declaración IF para eso (DAX tiene una sintaxis muy similar para la declaración IF en Excel normal). La sintaxis de DAX para una sola instrucción IF es la siguiente

= IF(Customers[Age] <= 18, "18 and Under", "Over 18")

La columna calculada de DAX anterior devolverá uno de los dos valores posibles según la edad del cliente. La complejidad surge cuando desea tener múltiples condiciones. Como mencioné anteriormente en esta publicación, hay 6 grupos posibles que tengo en mente (que se muestran aquí nuevamente).

image_thumb-15-9336982

Para hacer esto con declaraciones IF, necesitaría anidar múltiples declaraciones IF entre sí de la siguiente manera.

=
IF(
    Customers[Age] <= 18,
     "18 and Under",
     IF(
         Customers[Age] > 18
         && Customers[Age] <= 30,
         ">18 and <=30",
          IF(
              Customers[Age] > 30
              && Customers[Age] <= 40,
              ">30 and <=40",
               IF(
                   Customers[Age] > 40
                   && Customers[Age] <= 50,
                   ">40 and <=50",
                   IF(Customers[Age] > 50 && Customers[Age] <= 60, ">50 and <=60", ">60" )
               )
           )
       )
)

¿Ves el problema? Esta columna calculada funciona, pero es muy difícil de escribir, leer y modificar. Y lo que es más importante, hay una mejor manera: use la técnica de bandas.

Proceso para crear bandas

La mejor forma implica el siguiente proceso.

  1. Cree una tabla en Excel que contenga los nombres de los grupos y los límites de edad inferior / superior
  2. Cargue la tabla en Power Pivot
  3. No conecte la mesa a ninguna otra mesa, es una mesa desconectada
  4. Escriba una columna calculada de DAX que compare la edad de cada cliente con los límites inferior / superior en su tabla desconectada y devuelva la fila única de la tabla de bandas que coincida con cada cliente.

Aquí está el detalle de cómo hacerlo.

Crear una tabla en Excel

Así es como se ve una tabla en Excel.

image_thumb-16-6229274

Las características clave a tener en cuenta son

  1. Hay una columna de ID: esto se usará para ordenar la columna de Banda más adelante
  2. Una columna de «Banda»: esta es la etiqueta que describe a cada grupo. Tenga en cuenta que los grupos son mutuamente excluyentes y colectivamente exhaustivos (MECE).
  3. Hay una columna «desde» y «hasta» que establece los límites inferior y superior de cada grupo de edad. Tenga en cuenta que la edad superior de un grupo coincidirá con la edad inferior del siguiente grupo. He usado DAX para asegurarme de que no haya superposición en la columna calculada.

Escribir una columna calculada

El objetivo de la columna calculada es filtrar la tabla de bandas desconectada para que 1 y solo 1 fila sea «visible» o «sin filtrar» para cada cliente. Esta es la formula

= CALCULATE(
     VALUES(AgeBands[Band]),
     FILTER(AgeBands,
            Customers[Age] > AgeBands[From] &&
                Customers[Age] <= AgeBands[To]
     )
   )

El rol de la porción de FILTRO de esta fórmula es filtrar la tabla AgeBands para solo una fila está sin filtrar. Lo que hace el FILTRO es aplicar 2 reglas de filtro para garantizar que el cliente sea mayor que la columna «desde» y «menor o igual» que la columna «hasta». Es esta porción menor o igual a la que asegura que no haya cruces de individuos en múltiples grupos. (Mutuamente excluyentes).

La función VALORES tiene una capacidad única. VALUES devuelve una tabla de una sola columna. Si esa tabla también tiene una sola fila, VALUES convierte la tabla en un valor escalar y permite que ese valor se use como resultado en una columna calculada o de hecho en una celda de tabla dinámica. Dado que la fórmula garantiza que queda 1 y solo 1 fila sin filtrar en esta tabla de bandas, entonces VALUES se activará, extraiga la etiqueta para el grupo de AgeBands[Band] columna y coloque ese valor en la columna calculada.

Ordenar la nueva columna calculada

Hay un problema más que resolver: los nombres de los nuevos grupos no se ordenan correctamente en la tabla dinámica. De forma predeterminada, las columnas de datos se ordenarán en orden alfanumérico. Entonces las etiquetas se ordenarán así:

image_thumb-17-6850947

Para resolver este problema, creé una segunda columna calculada que trae el ID de clasificación a la tabla de clientes. Es simple hacer esto – simplemente copie la fórmula en la primera columna calculada y luego actualice la porción de VALORES con la columna «ID» de la siguiente manera.

= CALCULATE(
   VALUES(AgeBands[ID]),
   FILTER(AgeBands, Customers[Age] > AgeBands[From] && Customers[Age] <=AgeBands[To])
)

Una vez que se ha creado esta segunda columna calculada, es posible decirle a Power Pivot que use la nueva columna de valores de ID de clasificación como el orden de clasificación para la columna de la franja de edad (que se muestra a continuación).

image_thumb-18-7153437

Compresión de las columnas calculadas

Como mencioné anteriormente, no soy un gran fanático de las columnas calculadas, excepto donde realmente se necesitan. Hay algunas pautas sobre cuándo está bien usar una columna calculada; puede leer sobre todas ellas en el enlace que proporcioné a mi Base de conocimientos anteriormente. Sin embargo, los puntos clave a tener en cuenta aquí son.

  1. Estas columnas calculadas están en la tabla de búsqueda (Clientes). Las columnas calculadas en las tablas de búsqueda generalmente están bien.
  2. Las columnas calculadas tienen una cardinalidad baja (es decir, un número bajo de valores únicos). En general, esto también está bien, incluso en una tabla de datos grande si es necesario.

Ahora para usar la nueva columna calculada

Ahora que la tabla Clientes tiene esta nueva columna de «Banda de edad», es posible utilizar esta columna en las visualizaciones. Se puede utilizar en filas, columnas, filtros y segmentaciones. Aquí hay un ejemplo de filas:

image_thumb-19-4525786

Y un ejemplo de cortadora:

image_thumb-20-7287971

Aprenda a escribir DAX

El tema de las bandas es solo una de las muchas técnicas que cubro en mis libros «Supercarga Power BI» y «Supercarga Excel“. Si es un usuario de Power BI o un usuario de Excel y está aprendiendo a usar DAX, mis libros brindan una cobertura integral de todos los temas que necesita para comenzar su viaje como un ninja de Power Pivot.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.