Anexar archivos dinámicamente

Un usuario Pregunto ✅

alexanderg

Hola a todos … Quiero agregar varios archivos ubicados en una carpeta, pero tengo que aplicar algunas transformaciones a estos archivos, la transformación es similar a cada archivo. Así que quiero que todos los archivos obtengan la misma transformación y todos se agreguen dinámicamente, lo que significa que para cada archivo nuevo en la carpeta, el modelo debe agregar automáticamente el contenido.

Gracias por tus comentarios…

@alexanderg, esto debería ser bastante fácil de hacer en el escritorio PowerBI. Pero necesitas un poco de conocimiento de M (https://msdn.microsoft.com/en-us/library/mt211003.aspx)

Desglosaré el proceso en pasos

1. Obtenga la lista de archivos de la carpeta

Puede usar la función New Source-> From Folder para hacer esto. Haga clic en EDITAR una vez que vea la lista de archivos

2. (Opcional) Filtre la lista de archivos hasta los que desee. Normalmente, puede filtrar por extensión, etc.

3. (Opcional) Ordene la lista de archivos según sus necesidades. Esto garantizará una salida estable

4. La primera columna de la tabla es una lista de elementos «binarios». Estos representan el contenido de los archivos. Dado que desea aplicar transformaciones similares a todos estos elementos, debe escribir su transformación en una consulta separada y luego convertirla en una función que tome UNA entrada binaria. Haga clic en Nueva fuente-> Consulta en blanco e ingrese lo siguiente en la barra de fórmulas:

= (input) => Table.FromColumns({Lines.FromBinary(input)})

Cambie el nombre de esta consulta por algo significativo, como «Transformar».

5. Ahora tiene una consulta base para sus transformaciones. Puede adaptar esta consulta a sus necesidades. Un truco para crear esto si no está muy familiarizado con M es volver a la consulta con la lista de binarios, hacer clic en uno de ellos para abrirlo y usarlo como muestra para trabajar. Una vez que haya terminado con la muestra, puede ir al Editor avanzado y copiar los pasos agregados. Estos se pueden convertir en una función usando la expresión lambda anterior. Una cosa importante a tener en cuenta: su transformación personalizada debe devolver una TABLA; de lo contrario, no funcionarán más tarde para la concatenación.

6. Ahora puede invocar la función en cada uno de los binarios. En la lista de binarios, haga clic con el botón derecho en el encabezado de la columna binaria y luego haga clic en «Profundizar». Deberías terminar con solo una lista. Entonces desea invocar la función list.transform para aplicarles su función personalizada. Cambie el texto de la fórmula a:

= List.Transform(#"Filtered Rows"[Content], each Transform(_)}))

Tenga en cuenta que en este ejemplo solo había filtrado mis archivos, por lo que # «Filas filtradas»[Content] es el texto de la fórmula para el paso detallado. Transformar es el nombre de la consulta en 4.

7. Combine la lista en el resultado final. Aquí simplemente puede usar Table.Combine

= Table.Combine(Content)

El contenido es el nombre del paso en 6.

¡Eso debería ser!

También debo mencionar que si no está buscando aplicar transformaciones complejas a cada uno de los archivos antes de que se combinen, entonces es un proceso mucho más fácil, simplemente use el botón Combinar

BinaryCombine.PNG

Una vez que haga clic aquí, PowerQuery combinará automáticamente los archivos binarios y luego los abrirá de acuerdo con. Terminará con una tabla con todos los contenidos concatenados. Luego puede aplicar las transformaciones a CADA FILA de la tabla resultante.

Hay dos razones para aplicar transformaciones antes o después de la concatenación. Debería experimentar con estas herramientas según sus necesidades.

Greggyb

Puede hacerlo mediante la opción de carpeta de importación de Power BI en Power Query.

Capture.JPG

Greg_Deckler

@alexanderg: si entiendo lo que quiere hacer, quiere usar la fuente de datos Carpeta.

@alexanderg, esto debería ser bastante fácil de hacer en el escritorio PowerBI. Pero necesitas un poco de conocimiento de M (https://msdn.microsoft.com/en-us/library/mt211003.aspx)

Desglosaré el proceso en pasos

1. Obtenga la lista de archivos de la carpeta

Puede usar la función New Source-> From Folder para hacer esto. Haga clic en EDITAR una vez que vea la lista de archivos

2. (Opcional) Filtre la lista de archivos hasta los que desee. Normalmente, puede filtrar por extensión, etc.

3. (Opcional) Ordene la lista de archivos según sus necesidades. Esto garantizará una salida estable

4. La primera columna de la tabla es una lista de elementos «binarios». Estos representan el contenido de los archivos. Dado que desea aplicar transformaciones similares a todos estos elementos, debe escribir su transformación en una consulta separada y luego convertirla en una función que tome UNA entrada binaria. Haga clic en Nueva fuente-> Consulta en blanco e ingrese lo siguiente en la barra de fórmulas:

= (input) => Table.FromColumns({Lines.FromBinary(input)})

Cambie el nombre de esta consulta por algo significativo, como «Transformar».

5. Ahora tiene una consulta base para sus transformaciones. Puede adaptar esta consulta a sus necesidades. Un truco para crear esto si no está muy familiarizado con M es volver a la consulta con la lista de binarios, hacer clic en uno de ellos para abrirlo y usarlo como muestra para trabajar. Una vez que haya terminado con la muestra, puede ir al Editor avanzado y copiar los pasos agregados. Estos se pueden convertir en una función usando la expresión lambda anterior. Una cosa importante a tener en cuenta: su transformación personalizada debe devolver una TABLA; de lo contrario, no funcionarán más tarde para la concatenación.

6. Ahora puede invocar la función en cada uno de los binarios. En la lista de binarios, haga clic con el botón derecho en el encabezado de la columna binaria y luego haga clic en «Profundizar». Deberías terminar con solo una lista. Entonces desea invocar la función list.transform para aplicarles su función personalizada. Cambie el texto de la fórmula a:

= List.Transform(#"Filtered Rows"[Content], each Transform(_)}))

Tenga en cuenta que en este ejemplo solo había filtrado mis archivos, por lo que # «Filas filtradas»[Content] es el texto de la fórmula para el paso detallado. Transformar es el nombre de la consulta en 4.

7. Combine la lista en el resultado final. Aquí simplemente puede usar Table.Combine

= Table.Combine(Content)

El contenido es el nombre del paso en 6.

¡Eso debería ser!

Deja un comentario

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