Dividir / Segmentar / Seccionar tu tabla en Power BI / Power Query

El siguiente es un escenario bastante común que he visto con archivos planos exportados desde sistemas heredados, pero también se aplica a muchos otros escenarios. Utilizas el lenguaje M dentro de Power BI Desktop / Power Query, pero puedes seguirlo sin saber mucho al respecto.

El escenario: una tabla que contiene múltiples segmentos o particiones

Imagine la siguiente tabla:

Tienes 3 columnas, pero dentro de las filas de esa tabla notamos que hay un patrón repetitivo. Cada 3 filas hay una primera fila que contiene lo que comúnmente se le llama, una fila de encabezado y debajo tendremos 2 valores.

Específicamente en nuestro caso, el sistema siempre exportará el archivo con un número simétrico de filas para cada «sección» o «segmento».

Al final del día, lo que estamos tratando de alcanzar es el siguiente resultado:

La solución: dividir funciones al rescate

Puedes descargar el archivo de muestra haciendo clic en el botón a continuación:

Descargar el archivo

No olvides que comenzaremos con una tabla que se ve así:

Paso 1: dividir su tabla en varias tablas más pequeñas del mismo tamaño

Dado que nuestro primer paso en nuestra consulta se llama «Fuente», todo lo que necesitamos hacer es aplicar la fórmula Table.Split (Fuente) como un nuevo paso personalizado (haciendo clic en el botón fx en la barra de fórmulas) y se verá así esta:

Esto esencialmente transforma nuestra tabla en una Lista de tablas donde cada valor en esa lista es básicamente una tabla. El # 3 que ves en esa fórmula es porque nuestro patrón indicaba que cada 3 filas había un nuevo «registro» u «objeto».

La realidad es que en Power Query siempre es más fácil apuntar a cosas a un nivel mucho más granular en lugar de tratar de aplicar una función que debería tener en cuenta una gran cantidad de variables desconocidas. Al dividir esto en piezas de tablas más pequeñas, podemos crear un enfoque mucho más rápido y fácil de entender.

Paso 2: uso de una función personalizada en las tablas de la lista

Ya tengo una función dentro del archivo llamada myFx que transformará cada tabla dentro de esa lista en la tabla que estamos buscando. Para que esto suceda, creamos un nuevo paso personalizado e ingresamos la fórmula List.Transform (Custom1, myFx) que aplicará nuestra función personalizada a cada elemento de la lista.

El resultado de esto se ve así:

Paso 3: combina todas las tablas

Esta es la última parte y probablemente la más fácil de entender porque es algo que hemos visto antes en el blog. Tenemos una lista de tablas y ahora lo que buscamos es una forma de combinar todas esas tablas en una sola tabla.

La forma más fácil es mediante la función Table.Combine como se muestra en la siguiente imagen:

Y así, tenemos la tabla de salida que estamos buscando.

Sobre otros patrones para este escenario

Es posible que hayas notado que este escenario también podría resolverse con algunos patrones que Ken Puls y yo hemos publicado en nuestro libro ‘M is for Data Monkey’ donde usamos cosas como una columna de índice, módulo, división de enteros y otros que están fuera de los botones del cuadro en la interfaz de usuario de Power Query.

Esos siguen siendo válidos y se prefieren para usuarios nuevos a intermedios, pero si buscas el mejor rendimiento posible, usar las funciones de Split sería la mejor opción. Ten en cuenta que digo funciones divididas porque acabamos de ver Table.Split, pero también está List.Split.

Incluso hice una llamada con Ken sobre cómo usar List.Split y él estaba muy entusiasmado con esta función cuando le mostré lo que podíamos hacer con ellos, así que espere algunas publicaciones para el blog y mas de mí y Ken sobre una actualización de nuestros patrones de libros que son increíblemente rápidos.

Lo más probable es que agreguemos estos nuevos patrones a nuestra Academia Power Query como videos y a las Recetas Power Query, así que estén atentos a ellos.

Posted in:

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.