Transcripción del video
En esta ocasión vamos a ver 3 requerimientos comunes en la inteligencia de negocio:
- Calcular el Bottom de Clientes en general, lo cual es súper rápido
- El top de clientes pero dentro de cada región
- El bottom de clientes dentro de cada región. Y aquí vamos a ver un comportamiento no esperado al trabajar con Power BI y DAX, pero lo vamos a superar y verás como hacerlo por ti mismo. .
Así que quédate hasta el final para que veas cómo puedes implementar esto en tu trabajo, inmediatamente y que no te sucedan los problemas al trabajar en Power BI que vamos a ver.
Además esto que vamos a ver no aplica solamente para el cliente con la menor venta por Región, sino que lo puedes aplicar para cualquier escenario donde tengas este mismo reto: “ver solamente el top de ciertas subcategorías dentro de otras categorías”. Y con el top me refiero a los máximos y a los mínimos de cualquier categoría.
Bien comencemos. Aquí tengo una matriz con todos mis clientes y su venta. Si te fijas son muchos clientes. Para poder empezar a analizar estos datos, podríamos comenzar mostrando únicamente los 3 clientes con menos venta en general. Entonces podría simplemente aplicar un filtro para visualizar los bottom 3 clientes. En el filtro de Cliente seleccionamos “Top N” y luego selecciono “Bottom”, pongo 3 y luego pongo por “Venta”. Lo aplicamos y veremos solamente 3 clientes. Pero entonces ¿qué pasa si quiero ver al menor cliente de cada Región? Porque cada Región tiene oportunidad de crecimiento y queremos ver si nos podemos enfocar en los clientes con la menor venta por Región.
Agreguemos la Región a la visualización. Bajamos un nivel, y vas a ver que tenemos esos mismos 3 clientes pero ahora con la Región. Sin embargo no estamos viendo una Región, y eso se debe a que ningún cliente de esa Región estuvo en el bottom 3 general.
Por cierto, esta también es una manera de ver el Top 3 de clientes. Simplemente seleccionamos “Top” en lugar de “Bottom”. Y ahí lo tenemos.
Por cierto, si quieres trabajar con este archivo para que pongas en práctica esto que estamos viendo y además puedas ver el modelo de datos, puedes ir a la página que se encuentra en la descripción y ahí podrás descargar todos estos archivos.
Ahora veamos cómo obtener el top de clientes por Región. Para obtener esto vamos a utilizar un poco de DAX. Primero voy a quitar el filtro de “Top N” y vamos a ver todos los clientes otra vez.
Ahora vamos a crear una medida para Rankear nuestros clientes. Esta medida es “RANKX”. Entonces escribo
RankingTop = RANKX()
Este es un iterador X y si quieres ver cómo funcionan estos iteradores, puedes ver mi video de SUM vs SUMX para que comprendas completamente cómo funcionan este tipo de funciones.
Dentro de RANKX() voy a escribir
RANKXClientes =
RANKX(ALLSELECTED(Clientes[Cliente (Sucursal)]),
[Venta]
)
Aquí estoy utilizando la función ALLSELECTED() con el nombre del cliente dentro, que básicamente me permite comparar los clientes entre sí, pero dentro de cada Región. Para entender a fondo lo que hace ALLSELECTED, puedes ver mi video de ALL y ALLSELECTED.
Presiono Enter. Y ahora tenemos un ranking de clientes dentro de cada Región. Puedo aplicar ahora un filtro de visualización tomando en cuenta el ranking que acabo de crear. Selecciono en el panel de Filtros RankingTop, luego “is less than or equal to” y le pongo “3”. Aplico el Filtro y fíjate cómo ahora estamos viendo 3 clientes por Región.
Este cliente que sale en las 4 regiones es porque es un cliente que está presente en las 4 regiones, a diferencia de los otros. Es un cliente especial.
Si quieres eliminar ese número a nivel de categoría, se podría hacer con DAX o con el formato de la visualización. Veamos cómo hacerlo por medio del formato de la visualización porque para hacerlo con DAX necesitamos una función un poco avanzada.
En el formato de la Visualización me voy a Subtotals. Y desactivo la opción “Row Subtotals”. Y ya no lo tenemos.
Además puedo quitar la columna de RankingTop. Y los clientes se van a mantener.
Ya tenemos el Top de nuestros clientes. Ahora obtengamos el Bottom 3 de nuestros clientes. Y cuando lo intentemos vas a ver que va a suceder algo interesante. Copio y pego la tabla que he creado. Voy a copiar la fórmula y la voy a agregar a una nueva medida. La función RANKX te permite cambiar el orden en el que se está calculando el ranking y el default es el que acabamos de usar. Pero esto lo puedo cambiar a ASC, que va a empezar con el ranking desde el valor menor, al mayor.
RankingBottom =
RANKX(ALLSELECTED(Clientes[Cliente (Sucursal)]),
[Venta], , ASC
)
Si arrastro esta medida a la visualización de tabla va a suceder lo interesante que te menciono. Básicamente se debe a que esta tomando en cuenta muchos valores Blank, lo cual puedes ver aquí. Esto se debe a un concepto muy avanzado y complejo de DAX, llamado Shadow Filter Context, pero no lo vamos a ver, debido a que este no es el lugar para verlo. Este comportamiento se genera cuando utilizas la función ALLSELECTED dentro de un iterador X.
Para evitar este problema, simplemente voy a agregar un pequeño segmento a la fórmula, el cual va a hacer que no me considere los valores Blanks que te menciono.
RANKXBottomClientes =
IF(NOT(ISBLANK([Venta])),
RANKX(FILTER(
ALLSELECTED(Clientes[Cliente (Sucursal)]),
NOT(ISBLANK([Venta]))),
[Venta],,ASC
)
)
Esto que agregué hace que, si no hubo venta registrada para algún cliente, simplemente no me lo considere en ninguna parte del cálculo. Ahora podemos aplicar un filtro a la visualización para que solamente me muestre los 3 clientes de hasta abajo, que sería el 1, 2 y 3, por como lo hemos configurado.
Antes de continuar quiero mencionarte que esto también lo puedes ver como un MINIF o un MAXIF de Excel porque podrías ponerle que solo quieres un valor con esta función. Pero al manejarlo así tienes más flexibilidad porque no solamente obtienes el valor mínimo, sino que puedes definir el número de valores que quieres ver. Puede ser 1, 3, 5, 10 o más. Los que desees.
Bien ahí lo tenemos. Ahora ya sabes cómo calcular tus clientes Top y Bottom dentro de otras categorías. O incluso otras Subcategorías dentro de otras Categorías.