Repita Power Query para diferentes tablas en el mismo libro de trabajo

Un usuario Pregunto ✅

Anónimo

¡Hola todos!

Actualmente tengo la siguiente situación:

– Un archivo de Excel con 15 tablas, para 15 métricas de empresa por día y por empleado.

Métrica1:

Nombre 01/01/2020 01/02/2020
Empleado1 1% 10%
Empleado2 3% 5%

– Cada una de las tablas debe ser desdivotada y algunos otros pasos. Me las arreglé para escribir una consulta de energía para cada uno de ellos.

– Después de esas consultas, tengo un Join gigante entre las 15 mesas para obtener una tabla completa, como esta.

Fecha Nombre Métrica1 Métrica 2
01/01/2020 Empleado1 1% 127
01/01/2020 Empleado2 3% 256

Entonces, el mantenimiento del código M es un trabajo que requiere mucho tiempo, porque hay algo así como más de 40 consultas.

Busqué el tema, pero solo encontré tutoriales sobre cómo aplicar una función personalizada a un carpeta con diferentes archivos. ¿Se me escapa algo? ¿Cómo se puede iterar una sola consulta en todas las tablas dentro del archivo?

¡Gracias!

Alba

En respuesta a Anónimo

@Anónimo

Dije dejar solo las tablas con datos. Todavía tiene Planinha1 y Join como hoja de trabajo. ¿Por qué? Retirarlos. Entonces funcionará. Una alternativa es eliminar las filas correspondientes para esas dos hojas de trabajo en el código M, inmediatamente después del paso Fuente en la consulta principal. Nuevamente, no cargue el resultado de la consulta principal (Consulta1) en una tabla de Excel, cárguelo a través de una conexión solo en el modelo de datos. Y nuevamente, una vez que esto funcione, recomendaría mantener las tablas de datos en un archivo y las consultas y el procesamiento en otro (solo tendría que cambiar la forma en que obtiene sus tablas al comienzo de la consulta principal, ya que no será con Excel.Currentbook ())

Marque la pregunta resuelta cuando haya terminado y considere dar felicitaciones si las publicaciones son útiles.

Comuníquese conmigo de manera privada para obtener asistencia con cualquier necesidad de BI a mayor escala

Salud

SU18_powerbi_badge

mahoneypat

Estoy de acuerdo en que podrías crear una función para hacer esto. Si publica un archivo de muestra con datos ficticios con más de 2 tablas, la comunidad podría proporcionar el código M para hacerlo. También le sugiero que agregue los datos de cada archivo y luego lo deje en ese formato o lo modifique según el nombre de la tabla / hoja de trabajo (y luego cambie el nombre, si es necesario).

Si esto le funciona, márquelo como solución. Las felicitaciones también son apreciadas. Por favor avíseme si no es así.

Saludos,

Palmadita

Anónimo

En respuesta a mahoneypat

Hola @mahoneypat,

Hice una versión simplificada, ¿puedes verla? No tengo PBI en esta computadora, así que lo hice en Excel con PowerQuery, pero es el mismo concepto.

https://drive.google.com/file/d/1GxP_gn3B470zJo7ZgXJ-Mf6bMqtsUSrV/view?usp=sharing

Alba

En respuesta a Anónimo

Hola @Anónimo

Esto se debe ejecutar en el archivo de Excel con solo las tablas de datos originales, sin las consultas agregadas que tenía, de modo que Excel.CurrentWorkbook () en la consulta principal solo arroje las tablas de datos. Cargue la (s) tabla (s) resultante (s) como conexión solo directamente en el modelo de datos. De lo contrario, tendrá un ciclo de retroalimentación y Excel.CurrentWorkbook () también cargará la consulta resultante como tabla en la consulta principal

1. Cree esta función, asígnele el nombre «processTableFunct_»:

(inputT as table, tableName as text )=>
let
    number_cols_not_2_unpivot = List.Count(Table.ColumnNames(inputT)) - List.NonNullCount( List.Transform(Table.ColumnNames(inputT), each try Date.From(_) otherwise null)),
    cols_names_not_2_unpivot = List.FirstN(Table.ColumnNames(inputT), number_cols_not_2_unpivot),
    unpivotedT = Table.UnpivotOtherColumns(inputT, cols_names_not_2_unpivot, "Data", "Valor"),
    output_ = Table.AddColumn(unpivotedT,"Input table name", each tableName)
in
    output_

2. Cree la consulta principal (usa la función anterior)

let
    Source = Excel.CurrentWorkbook(),
    #"Added Custom" = Table.AddColumn(Source, "processed_tables", each processTableFunct_([Content],[Name])),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Content", "Name"}),
    #"Expanded processed_tables" = Table.ExpandTableColumn(#"Removed Columns", "processed_tables", {"Tecnico", "Data", "Valor", "Input table name"}, {"Tecnico", "Data", "Valor", "Input table name"}),
    #"Pivoted Column" = Table.Pivot(#"Expanded processed_tables", List.Distinct(#"Expanded processed_tables"[#"Input table name"]), "Input table name", "Valor", List.Sum)
in
    #"Pivoted Column"

Nuevamente, recomendaría usar el formato que obtiene en el paso # «Tablas_procesadas expandidas» en lugar del que obtiene al final de la consulta (lo que estaba buscando). Probablemente también sería mejor, dependiendo de lo que necesite, tener las tablas de datos en un archivo de Excel separado del que está usando para procesarlas.

Anónimo

En respuesta a Alba

¡Muchas gracias @AlB!

Soy realmente nuevo en funciones y parámetros, así que no sé si hice algo mal, porque en el paso 2 recibí el error:

Significa que el campo «Datos» ya existe en el registro.

errot.png

Todo lo que hice fue lo siguiente:

1. Eliminó las 4 consultas.

2. Creó una consulta en blanco y pegó el primer código, lo renombró a processTableFunct_

3. Creó una consulta en blanco y pegó el segundo código.

¿Hay tal vez algún paso antes o después del que me perdí? Como dije, no sé mucho sobre funciones, así que si puedes ser muy específico, te lo agradezco.

¿Puedes echarle un vistazo, por favor? Incluí el archivo actualizado si ayuda

https://drive.google.com/file/d/1mfiB7r_Sc9TdZyjeqCrjogDOlXcNwCfL/view?usp=sharing

Alba

En respuesta a Anónimo

@Anónimo

Dije dejar solo las tablas con datos. Todavía tiene Planinha1 y Join como hoja de trabajo. ¿Por qué? Retirarlos. Entonces funcionará. Una alternativa es eliminar las filas correspondientes para esas dos hojas de trabajo en el código M, inmediatamente después del paso Fuente en la consulta principal. Nuevamente, no cargue el resultado de la consulta principal (Consulta1) en una tabla de Excel, cárguelo a través de una conexión solo en el modelo de datos. Y nuevamente, una vez que esto funcione, recomendaría mantener las tablas de datos en un archivo y las consultas y el procesamiento en otro (solo tendrías que cambiar la forma en que obtienes tus tablas al comienzo de la consulta principal, ya que no será con Excel.Currentbook ())

Marque la pregunta resuelta cuando haya terminado y considere dar felicitaciones si las publicaciones son útiles.

Comuníquese conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala

Salud

SU18_powerbi_badge

Alba

Hola @Anónimo

¿Por qué hay 40 consultas si tienes 15 tablas?

Seguro, definitivamente deberías usar una función. Si los pasos a aplicar a cada tabla son los mismos (o muy similares). Puede cargar todos los archivos en la carpeta (es muy simple, solo: Nueva fuente -> Carpeta) y luego obtendrá una tabla que muestra todos los archivos, uno por fila. Luego puede crear una columna personalizada que aplicará la función a cada archivo (extrayendo la tabla de interés y transformándola según sea necesario). Finalmente puedes unir todas las tablas resultantes.

Puede usar el código que ya tiene para transformar una tabla para crear la función. Por cierto, el formato final que desearía sería similar al de la tabla siguiente. Necesitaría algo adicional (des) pivotar:

Fecha Nombre Tipo de métrica Resultado
01/01/2020 Empleado1 Métrica1 1%
01/01/2020 Empleado1 Métrica2 127
01/01/2020 Empleado2 Métrica1 3%
01/01/2020 Empleado2 Métrica2 256

Marque la pregunta resuelta cuando haya terminado y considere dar felicitaciones si las publicaciones son útiles.

Comuníquese conmigo de manera privada para obtener asistencia con cualquier necesidad de BI a mayor escala

Salud

SU18_powerbi_badge

Deja un comentario

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