Tips y Trucos en Power Query y DAX

¡Bienvenidos, muy buenos días tardes o noches , según donde me leas !

 

Cremamos el post para publicar sobre este diseño.

Tenemos un dataset interesante sobre Juguetes, sobre empresas que comercializan juguetes.
Así que en base a ello crearemos el dataset es en un CSV, el cual manejamos y modificamos específicamente, en Power Query, es decir las transformaciones las realizaremos en Power Query todo el ETL.

En las transformaciones lo primero será quitar las 4 columnas primeras utilizando específicamente la opción de Power Query llamada «quitar filas superiores».

Luego de ello, realizamos varias modificaciones, las cuales serían, específicamente, luego utilizaremos usar filas como encabezado.

Ahora para empezar a organizar nuestros datos y la creación de un modelo de datos en Power Query, primero será crear carpetas para las consultas, la que creamos primero es la de aterrizaje, la cual será nuestro punto de partida. Imagen 1.

Ahora bien, empezamos a analizar qué columnas son las que deseamos realmente trabajar, removemos las columnas que no deseamos para nuestro análisis. Imagen 2.

Ahora, a partir de la que realizamos los cambios, crearemos un duplicado de la información de la consulta para crear nuestras tabla de hechos, las dimensiones, es decir, todo el modelado de datos.

Lo primero será crear la tabla calendario, desde cero dinámica en base a la columna de la tabla de hechos llamada «date», ubicando el mínimo y el máximo de fechas de esta columna abarcando así todo el rango para analizar. Para ello creamos una consulta en blanco, donde crearemos el siguiente código:

«`
let
Source = {Number.From(List.Min(Tabla_Hechos[Date]))..Number.From(List.Max(Tabla_Hechos[Date]))}
in
Source
«`

Imagen 3, la lista resultante la pasamos tabla, luego convertimos a fecha la columna y tenemos nuestra tabla calendario para empezar a añadirle las columnas que deseamos. Imagen 5 .

Ahora, para la columna nombre del mes, me gusta colocarlo en nombre corto, así que creamos una columna personalizada en M que nos permita esta creación. ALGO PARECIDO A LO QUE SE PUEDE HACER en DAX con FORMAT(Dim_Calendario[Fecha],»MMM»), tendríamos nuestra tabla calendario. Imagen 6.

Procedemos a quitar duplicados de nuestra tabla de hechos. Imagen 7.

Ahora procedemos a crear la siguiente dimensión que será producto, uniendo en esta dimensión nombre del producto y categoría del producto. Debemos remover los duplicados y añadir una clave subrogada o un campo clave nuevo, el cual será una columna autoincrementable. Imagen 8.

Continuamos con la siguiente dimensión llamada tienda, repetimos proceso, la cual seguimos los mismos pasos: duplicar, quitar duplicados, y crear la clave subrogada. Serán dos columnas: nombre de la tienda y tipo de tienda. Imagen 9.

Seguimos con la siguiente dimensión llamada región, la cual seguimos los mismos pasos: duplicar, quitar duplicados y crear la clave subrogada. Imagen 10.

Ahora para crear formalmente nuestra tabla de hechos empezamos a combinar consultas, para traernos nuestras llaves primarias o id o claves subrogadas de las dimensiones y que sean foráneas en nuestra tabla de hechos (acá está el cierre de la estrategia como en el fútbol el gol jejejeje). Recuerda combinar consultas por los campos categóricos, luego desglosamos o expandimos la columna traída la cual era el id, le cambiamos el nombre y por último eliminamos los nombres categorías dejando solo el id como vinculante para luego ser relacionados en Power BI. Imágenes 11, 12 y 13.

Resultando en una hermosa tabla de hechos única y bella con solo datos aditivos numéricos y fecha, el sueño de toda herramienta BI JEJEJEJE. Imágenes 14 y 15.

Ahora crearemos una tabla para solo las medidas que utilizaremos. Imagen 16.

Creamos nuestras medidas, las cuales serán la total ganancias, fácil una suma sencilla.

Total Ganancia = SUM(Tabla_Hechos[Revenue])

Ahora creamos a nuestra manera el top de ganancias por producto pero que se permita recibir el total de ganancias y sus top pero en base a un selector creado manualmente.

Top ganancias por producto =

«`
VAR _top_venta = RANKX(ALL(Dim_Producto[Product Name]),[Total Ganancia],,,Dense)

VAR _top_dinamico = FILTER(Dim_Producto,_top_venta <= 3)

RETURN
CALCULATE([Total Ganancia],_top_dinamico)
«`

Esta es la medida y ahora imagen 17 y ahora vamos a crear el parámetro que será de filtro, para luego editar la medida. Imagen 18.

Ahora editamos nuestra medida para que reciba el valor seleccionado.

Top ganancias por producto =

«`
VAR _seleccion_dinamica = SELECTEDVALUE(‘Top dinamico ganancias'[Top dinamico ganancias])
VAR _top_venta = RANKX(ALL(Dim_Producto[Product Name]),[Total Ganancia],,,Dense)

VAR _top_dinamico = FILTER(Dim_Producto,_top_venta <= _seleccion_dinamica)

RETURN
CALCULATE([Total Ganancia],_top_dinamico)
«`

Imagen 19.

Tendríamos un filtro dinámico del 1 al 5 para visualizar el top del 1 al 5 en un gráfico de barras de las ganancias por nombre del producto. Imagen 20.

Ahora deseamos saber en base a la selección cuánto representa el N top seleccionado en el % de ganancia total, eso nos cambia el caso dado que deseamos visualizar en una tarjeta el top seleccionado dinámico, el número de ganancias y la representación % o el peso que representa en ganancias el top seleccionado por el usuario, para este caso creamos esta nueva medida.

Top Ganancias news =

«`
VAR _seleccion_dinamica = SELECTEDVALUE(‘Top dinamico ganancias'[Top dinamico ganancias])

VAR _virtualTabla = SUMMARIZE(Dim_Producto, Dim_Producto[Product Name], «@Ganancia», [Total Ganancia])

VAR _virtualTabla_1 = SUMMARIZE(_virtualTabla, Dim_Producto[Product Name], [@Ganancia], «@Top», RANKX(_virtualTabla, [@Ganancia]))

VAR _filtrado = FILTER(_virtualTabla_1, [@Top] <= _

seleccion_dinamica)

RETURN
CALCULATE(SUMX(_filtrado, [@Ganancia]))
«`

Imagen 21.

Usaremos la nueva tarjeta visual, para representar las ganancias totales, el % de representación según selección, luego creamos el subtítulo para nuestra tarjeta visual.

Titulo de el % de ganancias =

«El top » & SELECTEDVALUE(‘Top dinamico ganancias'[Top dinamico ganancias]) & » de las ganancias representa el » & FORMAT([Peso % de las ganancias], «#.##%») & » del total de los productos vendidos»

Imagen 22.

Y empezamos a colocar nuestras medidas en la nueva tarjeta visual. Dado que queda más genial y fácil de utilizar, dado que el título puedes utilizar medidas personalizadas.

Titulo de el % de ganancias =

«El top » & SELECTEDVALUE(‘Top dinamico ganancias'[Top dinamico ganancias]) & » de las ganancias representa el » & FORMAT([Peso % de las ganancias], «#.##%») & » del total de los productos vendidos»

Y la medida anterior top ganancias news es la medida en sí de la tarjeta. Imagen 23.

Ahora procedemos a crear una tarjeta más llamada, para las ventas pero deseo ver las ventas anteriores y las actuales. Esta medida super sencilla Ganancia mes anterior =

«`
CALCULATE([Total Ganancia], DATEADD(Dim_Calendario[Fecha], -1, MONTH))
«`

Pero la idea es que cuando sea menor que la actual manita abajo, pero crearemos varias medidas personalizadas para las etiquetas título, subtítulo y valor.

Variación texto =

«`
VAR calculo = DIVIDE([Total Ganancia] – [Ganancia mes anterior], [Total Ganancia])

VAR condicion = IF(calculo <= 0, «❌ La variación bajo un: «, «✔️ La variación subió un: «)

RETURN condicion
«`

Variación número =

«`
VAR calculo = DIVIDE([Total Ganancia] – [Ganancia mes anterior], [Total Ganancia])

VAR condicion = IF(calculo <= 0, FORMAT(calculo, «##,#%»), FORMAT(calculo, «##,#%»))

RETURN condicion
«`

Color tarjeta ganancias =

«`
VAR calculo = DIVIDE([Total Ganancia] – [Ganancia mes anterior], [Total Ganancia])

VAR condicion = IF(calculo <= 0, «#F5A4A1», «#B5F5A1»)

RETURN condicion
«`

Debemos usar las etiquetas de referencias y las etiquetas de valor. Estas medidas son usadas en las tarjetas. Imagen 24.

Cómo usar medidas específicas en el título y subtítulo. Imágenes 25 y 26.

Recordemos que en mi ejemplo estoy utilizando solo los objetos visuales nativos.

Ahora pasamos a crear un gráfico de líneas con las ventas del 2020 y 2021 comparándolas.

Creamos dos medidas super fáciles con las cuales utilizaremos específicamente el CALCULATE para ambos años.

Total ganancias 2020 =

«`
CALCULATE(SUM(Tabla_Hechos[Revenue]), Dim_Calendario[Año] = 2020)
«`

Total ganancias 2021 =

«`
CALCULATE(SUM(Tabla_Hechos[Revenue]), Dim_Calendario[Año] = 2021)
«`

Para este caso y que no se solaparan los datos decidí que para un año se muestran los pares en mes y para otros solo los impares.

Total ganancias 2020 color =

«`
SWITCH(TRUE(),
MOD(DISTINCT(Dim_Calendario[Mes]), 2) = 1,
«#FFFFFF», «#000000»)
«`

Total ganancias 2021 color =

«`
SWITCH(TRUE(),
MOD(DISTINCT(Dim_Calendario[Mes]), 2) = 0,
«#FFFFFF», «#000000»)
«`

Imagen 27.

Con estas fórmulas puedes ver el alcance de los objetos visuales y su nivel de personalización.

Ajustamos títulos personalizados para cada caso de los gráficos que llevamos.

Ahora crearemos títulos dinámicos en base a la selección de nuestro filtro tanto de la región como del mes.

Titulo gráfico de líneas =

«`
SWITCH(TRUE(),
SELECTEDVALUE(Dim_Calendario[Nombre corto mes]) <> BLANK() && SELECTEDVALUE(Dim_Region[Region]) <> BLANK(),
«Ventas del mes de » & SELECTEDVALUE(Dim_Calendario[Mes completo]) & » en la región » & SELECTEDVALUE(Dim_Region[Region]),
«Tendencia de ganancias 2020 vs 2021»)
«`

Pero debemos modificar que cuando se seleccione un mes si que logremos ver el color de el vamos sea mes par o no así que modificaremos ese paso.

Total ganancias 2020 color =

«`
VAR Sin_seleccion = SWITCH(TRUE(),
MOD(DISTINCT(Dim_Calendario[Mes]), 2) = 1,
«#FFFFFF», «#000000»)

VAR Con_seleccion = SWITCH(TRUE(),
MOD(DISTINCT(Dim_Calendario[Mes]), 2) = 1,
«#000000», «#000000»)

VAR Condicion = IF(
SELECTEDVALUE(Dim_Calendario[Nombre corto mes]) = BLANK() && SELECTEDVALUE(Dim_Region[Region]) = BLANK(),
Sin_seleccion, Con_seleccion)

RETURN Condicion
«`

Imagen 28.

Ahora para el gráfico de barras inferiores creamos el siguiente título dinámico.

Titulo gráfico de barras inferior =

«`
SWITCH(TRUE(),
SELECTEDVALUE(Dim_Calendario[Nombre corto mes]) <> BLANK() && SELECTEDVALUE(Dim_Region[Region]) <> BLANK(),
«Ventas del mes de » & SELECTEDVALUE(Dim_Calendario[Mes completo]) & » en la región » & SELECTEDVALUE(Dim_Region[Region]) &
» Top » & SELECTEDVALUE(‘Top dinamico ganancias'[Top dinamico ganancias]) & » De ventas»,
» Top » & SELECTEDVALUE(‘Top dinamico ganancias'[Top dinamico ganancias]) & » De ventas por producto»)
«`

Imagen 29.

Ahora pasamos a crear los últimos dos gráficos.

Creamos el título personalizado para el de ganancias de ventas por día.

Titulo gráfico de barras superior izquierda =

«`
SWITCH(TRUE(),
SELECTEDVALUE(Dim_Calendario[Nombre corto mes]) <> BLANK() && SELECTEDVALUE(Dim_Region[Region]) <> BLANK(),
«Ventas del mes de » & SELECTEDVALUE(Dim_Calend

ario[Mes completo]) & » en la región » & SELECTEDVALUE(Dim_Region[Region]) & » por día»,
«Ganancias por día de la semana»)
«`

Imagen 30.

Y ahora creamos la medida del de ganancias por región.

Creamos el título he insertamos una imagen referente a nuestro cuadro de mando, la cree con Copilot la imagen.

Imagen 31.

Faltaría colocarle un campo condicional a nuestras barras que el mayor dato tenga un color más oscuro para resaltar las ventas principales tanto por región como por día, colocando el degrado como opción.

 

Te comparto el link de YouTube:https://youtu.be/sitGRIBxKJY

Te comparto el link del informe: https://app.powerbi.com/view?r=eyJrIjoiODBlMDM5YjUtOGQ5Yi00ZGE5LTg2OGYtYzk5N2ZkMmY2Zjk5IiwidCI6IjkxMTVmY2FmLWE5NGQtNDBiMS1hM2JhLWIwNjJjODA1NTVlMCIsImMiOjl9

 

Vicente Antonio Juan Magallanes.

Loading

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *