¡Bienvenidos, muy buenos días tardes o noches , según donde me leas !
En el mundo del análisis de datos y la visualización de información, es fundamental poder presentar de manera clara y efectiva los resultados obtenidos. En este artículo, nos adentraremos en el proceso de crear visualizaciones impactantes y organizadas de las ventas por estado, destacando los productos más y menos vendidos. Además, exploraremos técnicas para optimizar la presentación de estos datos, utilizando medidas y variables en Power BI.
Durante el artículo, aprenderemos a utilizar el lenguaje de fórmula DAX (Data Analysis Expressions) para calcular el máximo y mínimo de ventas por estado. También veremos cómo crear medidas personalizadas y utilizar funciones condicionales para identificar los productos más y menos vendidos. Además, exploraremos la importancia de la organización y clasificación de medidas en carpetas para mantener una estructura ordenada en nuestros informes.
Llega el post por estado/estado. Lo primero será tener claro que crearemos de manera eficiente y ordenaremos las medidas en carpetas para mantener todo organizado. Por lo tanto, creamos una carpeta dentro de la tabla de medidas para cada gráfica, de modo que esté más ordenado.
- Ahora modificaremos la medida que hemos creado, la cual utilizamos para la región, pero la editaremos para el estado.
Máximo de Ventas por Estado = var _Maximo_ventas_region = maxx(ALL(Dim_Geo[State]), CALCULATE(SUMX(Tabla_hechos, Tabla_hechos[Units Sold] * Tabla_hechos[Price per Unit])))
var _Agrupacion = SUMMARIZE(Dim_Geo, Dim_Geo[State], «Validado», IF(_Maximo_ventas_region = [Total ventas], 1, 0))
var _Tabla = FILTER(_Agrupacion, [Validado] = 1)
var _Numero = CALCULATE([Total ventas], Dim_Geo[State] = if(COUNTROWS(_Tabla) >= 1, CONCATENATEX(_Tabla, Dim_Geo[State], «,»), «0»))
var _Result = «El estado 🗺️ con ➕ ventas » & if(COUNTROWS(_Tabla) >= 1, CONCATENATEX(_Tabla, Dim_Geo[State], «,»), «0») & » Con un total de » & FORMAT(_Numero, «💲#,##0») return _Result
Procedo a explicar el código: La variable _Maximo_ventas_region
calcula el valor máximo de una expresión para cada estado en la tabla Dim_Geo[State]
. Esta expresión calcula la suma de las ventas multiplicando el número de unidades vendidas por el precio por unidad en la tabla Tabla_hechos
. En resumen, se encuentra el máximo de las ventas (en términos de ingresos) en todos los estados.
La variable _Agrupacion
crea una tabla resumida que agrupa la tabla Dim_Geo
por el campo Dim_Geo[State]
y agrega una columna llamada «Validado». Esta columna se asigna con un valor de 1 si el valor de _Maximo_ventas_region
es igual al valor de [Total ventas]
, y 0 en caso contrario.
La variable _Tabla
filtra la tabla _Agrupacion
para incluir solo las filas donde el valor de la columna «Validado» es igual a 1.
La variable _Numero
calcula la medida [Total ventas]
solo para los estados que coinciden con la concatenación de estados en la tabla _Tabla
. Si la tabla _Tabla
tiene una o más filas, se concatenan los estados separados por comas; de lo contrario, se asigna «0».
La variable _Result
crea un mensaje que indica el estado con las ventas máximas y su total de ventas, utilizando emojis y formatos especiales de texto.
La expresión return _Result
devuelve el valor de la variable _Result
como resultado de la medida.
- Tenemos una lista de imágenes, dado que creamos un tooltip personalizado para este gráfico, con el fin de mostrar el producto más vendido por estado y proporcionar más información al respecto.
- Las imágenes que utilizaremos están referidas a cada uno deAquí tienes la continuación corregida y ajustada gramaticalmente del artículo:
los procesos. Las hemos guardado como archivos .jpg en una ruta llamada «imágenes».
- En este paso, utilizaremos una conexión de tipo «carpeta» y nos conectaremos manualmente a la carpeta para obtener las imágenes.
- Crearemos una función para transformar las imágenes en URLs reconocibles por Power BI. El código en lenguaje M será el siguiente:
= (imagen) => let Base64 = Binary.ToText(imagen, BinaryEncoding.Base64), ImagenBase64 = «data:image/jpeg;base64, » & Base64 in ImagenBase64
Procedo a explicar qué hace esta función:
La función tiene un parámetro llamado «imagen», el cual se espera que sea un valor binario que representa la imagen.
El primer paso de la función es convertir la imagen binaria en una cadena de texto en formato Base64 utilizando la función «Binary.ToText». Esta función toma la imagen binaria y la codifica en formato de texto utilizando el esquema de codificación Base64.
El resultado de la conversión a Base64 se almacena en la variable «Base64».
A continuación, se crea una variable llamada «ImagenBase64» que concatena la cadena «data:image/jpeg;base64, » con la variable «Base64». Esto crea una cadena de texto que representa la imagen en formato Base64, con una etiqueta MIME de tipo «image/jpeg». Ten en cuenta que la etiqueta MIME puede variar dependiendo del tipo de imagen que se esté procesando.
Finalmente, se utiliza la declaración «in» para especificar que el resultado de la función es la variable «ImagenBase64».
En resumen, esta función toma una imagen en formato binario, la convierte en una cadena de texto en formato Base64 y agrega una etiqueta MIME correspondiente al tipo de imagen. Esto es útil si necesitas pasar la imagen en formato Base64 a otro sistema o almacenarla en una base de datos que acepte este formato de representación.
- Ahora, en la consulta en la que nos conectamos a la carpeta de imágenes, realizaremos la eliminación de las columnas que no deseamos, quedándonos solo con las columnas «content» y «name». Estas dos columnas son las que utilizaremos para que el proceso funcione de manera eficiente. La columna «content» la utilizaremos para transformarla a Base64, y la columna «name» la utilizaremos para hacer el merge y el cruce con la dimensión de producto.
- Luego de esto, realizaremos unas modificaciones en las cuales podremos validar e invocar la función que creamos y asignarla a nuestra tabla.
- Debemos editar la imagen, en la cual tenemos el nombre que utilizaremos para hacer el merge y llevar nuestro código de imagen a la tabla de productos. Para quitar la extensión, seleccionamos la opción que está más a la derecha en las opciones de cita, la cual nos ayuda a colocarlo como debe estar.
Eliminamos y renombramos para obtener el resultado deseado.
- Ahora realizaremos el merge en el cual haremos las modificaciones adecuadas para llevar la imagen hacia la.. Después del merge, extraemos la columna de imagen y modificamos su nombre. Obteniendo así el resultado esperado.. Luego, cargamos y actualizamos, y modificamos el tipo de esta columna a image URL. Recordemos que queremos que aparezca el producto más vendido como tooltip en cada estado.
- Claro está que para la creación de imágenes utilizaremos, como no puede ser de otra manera, la Inteligencia Artificial. Yo utilicé BlueWillow, con el cual me gusta trabajar y me toca crear imágenes.
- Ahora, que deseamos mostrar en el tooltip, primero será el máximo de ventas por producto, lo cual es fundamental. Luego, el producto menos vendido y el mínimo de ventas, es decir, el producto menos vendido. La idea es crear ambas medidas para saber cuál es el más vendido y dónde se tiene la oportunidad de mejorar en qué estados y qué tipo de productos.
Primero crearemos la medida de los más vendidos por estado y el producto más vendido por estado. Primero será la medida de máximo: Maximo producto vendido por estado =
var _maximoventa = CALCULATE(MAXX(Dim_Producto,[Total ventas]), ALLSELECTED(Dim_Geo[State]), ALL(Dim_Producto))
var _result = IF([Total ventas] = _maximoventa, 1, 0)
RETURN _result
En esta línea, creamos una variable llamada _maximoventa. La función CALCULATE se utiliza para realizar cálculos agregados en una tabla, utilizando uno o más filtros. En este caso, se calcula el valor máximo de la columna [Total ventas] en la tabla Dim_Producto. La función MAXX se utiliza para obtener el valor máximo de una columna o expresión tabular. Los argumentos ALLSELECTED(Dim_Geo[State]) y ALL(Dim_Producto) se utilizan para eliminar los filtros aplicados a las columnas Dim_Geo[State] y Dim_Producto, respectivamente, de modo que se obtenga el máximo de ventas en general.
Después, creamos otra variable llamada _result. Aquí utilizamos la función IF para evaluar una condición. La condición que se evalúa es si el valor de la columna [Total ventas] es igual a _maximoventa. Si la condición es verdadera, se asigna el valor 1 a _result; de lo contrario, se asigna 0.
Finalmente, devolvemos el valor de la variable _result como resultado de la expresión.
En resumen, este código calcula el valor máximo de la columna de ventas en la tabla de productos y verifica si cada fila tiene ese valor máximo de ventas. Si es así, devuelve 1; de lo contrario, devuelve 0. Esto puede ser útil para identificar los productos que han alcanzado el máximo de ventas en un estado específico o en general.
Ahora pasemos a la medida que utilizaremos, que es el mínimo:
Medida: Mínimo productos vendidos =
Var _minimovendido = CALCULATE(MINX(Dim_Producto, [Total ventas]), ALLSELECTED(Dim_Geo[State]), ALL(Dim_Producto))
Var _result = IF([Total ventas] = _minimovendido, 1, 0)
RETURN _result
Aquí declaramos otra variable llamada _minimovendido. La función CALCULATE se utiliza para realizar cálculos agregados en una tabla, y en este caso se utiliza para calcular el valor mínimo de la columna [Total ventas] en la tabla Dim_Producto. La función MINX se utiliza para obtener el valor mínimo de una columna o expresión tabular. Los argumentos ALLSELECTED(Dim_Geo[State]) y ALL(Dim_Producto) se utilizan para eliminar los filtros aplicados a las columnas Dim_Geo[State] y Dim_Producto, respectivamente, para obtener el mínimo de ventas en general.
var _result=IF([Total ventas]=_minimovendido,1,0):
Aquí se declara otra variable llamada _result. La función IF se utiliza para evaluar una condición. La condición que se evalúa es si el valor de la columna [Total ventas] es igual a _minimovendido. Si la condición es verdadera, se asigna el valor 1 a _result; de lo contrario, se asigna 0.
return _result:
Esta línea indica que se debe devolver el valor de la variable _result como resultado de la expresión.
En resumen, este código calcula el valor mínimo de la columna de ventas en la tabla de productos, y luego verifica si cada fila tiene ese valor mínimo de ventas. Si es así, devuelve 1; de lo contrario, devuelve 0. Esto puede ser útil para identificar los productos que han alcanzado el mínimo de ventas en un estado específico o en general.
- Ahora para que funcionen en la tabla le añadimos específicamente en los filtros condiciona a uno para que devuelve en cada caso el maximo o el mínimo y su respectiva imagen asociada
13 )Ahora calcularemos los subtítulos para cada uno , indicando la cantidad de ventas y el total de ventas del producto mas vendido y menos vendido , primero vamos con el mas vendido Subtitulo mas vendido =
«Con un total de ventas de: » & «🟢» & FORMAT([Total ventas],»$##,#0″) & » y
la cantidad de productos vendidos:» & FORMAT([Cantidad registros],»##,#»)& «🟢»
Subtitulo mas vendido =:
Esto indica que el resultado de la expresión será asignado a un campo de subtítulo llamado «Subtitulo mas vendido».
«Con un total de ventas de: » & «🟢» & FORMAT([Total ventas],»$##,#0″) & » y la cantidad de productos vendidos:» & FORMAT([Cantidad registros],»##,#»)& «🟢»:
Aquí se construye el texto descriptivo que se mostrará como el subtítulo. La expresión se construye concatenando diferentes elementos de texto y valores de las columnas en Power BI.
«Con un total de ventas de: «: Es un texto fijo que indica el comienzo de la descripción.
«🟢»: Es un emoji o icono visual que se utiliza para resaltar o dar énfasis.
FORMAT([Total ventas],»$##,#0″): Esta parte formatea el valor de la columna [Total ventas] como un número con formato monetario, utilizando el símbolo «$» y separadores de miles y decimales.
» y la cantidad de productos vendidos:»: Es un texto fijo que proporciona más información sobre el siguiente valor.
FORMAT([Cantidad registros],»##,#»): Esta parte formatea el valor de la columna [Cantidad registros] como un número con separadores de miles.
«🟢»: Es otro emoji o icono visual que se utiliza para resaltar o dar énfasis.
ahora el menos vendido:
Subtitulo menos vendido =«Con un total de ventas de: » & «🔴»&FORMAT([Total ventas],»$##,#0″) & » y
la cantidad de productos vendidos: » & FORMAT([Cantidad registros],»##,#»)& «🔴»
Subtitulo menos vendido =:
Esto indica que el resultado de la expresión será asignado a un campo de subtítulo llamado «Subtitulo menos vendido».
«Con un total de ventas de: » & «🔴»&FORMAT([Total ventas],»$##,#0″) & » y la cantidad de productos vendidos: » & FORMAT([Cantidad registros],»##,#»)& «🔴»:
Aquí se construye el texto descriptivo que se mostrará como el subtítulo. La expresión se construye concatenando diferentes elementos de texto y valores de las columnas en Power BI.
«Con un total de ventas de: «: Es un texto fijo que indica el comienzo de la descripción.
«🔴»: Es un emoji o icono visual en forma de círculo rojo que se utiliza para resaltar o dar énfasis.
FORMAT([Total ventas],»$##,#0″): Esta parte formatea el valor de la columna [Total ventas] como un número con formato monetario, utilizando el símbolo «$» y separadores de miles y decimales.
» y la cantidad de productos vendidos: «: Es un texto fijo que proporciona más información sobre el siguiente valor.
FORMAT([Cantidad registros],»##,#»): Esta parte formatea el valor de la columna [Cantidad registros] como un número con separadores de miles.
«🔴»: Es otro emoji o icono visual en forma de círculo rojo que se utiliza para resaltar o dar énfasis.
14) Ahora creamos la leyenda,en la cual podemos entender los colores categorizados de cada estado en el mapa, pero personaliado y dinámico según filtros están son las dos medias usadas tanto para el maximo como para el mínimo
Maximo leyenda mapa =
maxx(ALL(Dim_Geo[State]),CALCULATE(SUMX(Tabla_hechos,Tabla_hechos[Units Sold]*Tabla_hechos[Price per Unit])))
Minimo leyenda mapa =
MINX(ALL(Dim_Geo[State]),CALCULATE(SUMX(Tabla_hechos,Tabla_hechos[Units Sold]*Tabla_hechos[Price per Unit])))
15) Ahora crearemos una medida para obtener el estado con menor ventas , pero lo colocaremos en el mapa , de tipo footer para enriquecer mas nuestro mapa el cual será esta medida
Minimo Ventas estado =var _Minimo_ventas_region=MINX(ALL(Dim_Geo[State]),CALCULATE(SUMX(Tabla_hechos,Tabla_hechos[Units Sold]*Tabla_hechos[Price per Unit])))
var _Argupacion=SUMMARIZE(Dim_Geo,Dim_Geo[State],»Validado»,IF(_Minimo_ventas_region=[Total ventas],1,0))
var _Tabla=FILTER(_Argupacion,[Validado]=1)
var _Numero=CALCULATE([Total ventas],Dim_Geo[State]=if(COUNTROWS(_Tabla)>=1,CONCATENATEX(_Tabla,Dim_Geo[State],»,»),»0″))
var _Result=»El estado 🗺️ con ➖ ventas » &if(COUNTROWS(_Tabla)>=1,CONCATENATEX(_Tabla,Dim_Geo[State],»,»),»0″) &» Con total de
«&FORMAT( _Numero,
«💲#,##0»)
return
_Result
Por ultimo podemos ver el resultado final
También podrás ver el resultado final en acción en el canal de YouTube :https://youtu.be/D0TpH_GwxnU
La capacidad de presentar información de manera clara y precisa es esencial en el análisis de datos. En este artículo, hemos explorado cómo optimizar la visualización de las ventas por estado, resaltando los productos más y menos vendidos. Aprendimos a utilizar medidas y variables en Power BI para calcular el máximo y mínimo de ventas, y cómo utilizar funciones condicionales para identificar los productos destacados.
Además, destacamos la importancia de organizar nuestras medidas en carpetas para mantener una estructura ordenada en nuestros informes. Esta práctica facilita la navegación y comprensión de los datos, brindando una experiencia más fluida a los usuarios.
Al dominar estas técnicas, podemos crear visualizaciones impactantes que resalten los aspectos clave de nuestros datos de ventas por estado. Esto nos permite tomar decisiones más informadas y descubrir oportunidades para mejorar nuestro desempeño en diferentes regiones.
En resumen, al utilizar las herramientas y técnicas presentadas en este artículo, podrás mejorar la presentación de tus datos de ventas por estado, resaltando los productos más y menos vendidos de manera efectiva. Recuerda siempre mantener una estructura organizada y aprovechar al máximo las capacidades de las herramientas de análisis para obtener información valiosa y tomar decisiones fundamentadas en tu negocio.ç
Vicente Antonio Juan Magallanes
Business Intelligence Technical.
Perfil linkedin.