March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early bird discount ends December 31.
Register NowBe one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now
En PQ, inició un nuevo origen desde una carpeta con una gran cantidad de archivos de Excel con MMDDYYYY incrustado en sus nombres de archivo.
Después de combinar y transformar, el campo Source.Name incluye MMDDYYYY dentro de los respectivos nombres de archivo de Excel.
Después de agregar una columna personalizada para extraer el MMDDYYYY (a través de Text.Middle([Source.Name], 16, 8)), se deja una columna personalizada Type Any. El error (en la línea de asunto de esta correspondencia) se produce simplemente al intentar transformar a Fecha. Primero transformar a Texto o Número entero no resuelve el problema; tampoco Recortar y/o Limpiar. ¿Alguna idea?
Miré publicaciones anteriores relacionadas con este tema, pero todas son un contexto ligeramente diferente.
Chat GPT no pudo entenderlo. 🙂
Gracias de antemano.
Eso es solo infalible qué archivos obtener. Yo u otra persona podríamos guardar erróneamente un archivo no relevante en esas carpetas.
Interesante.... Nunca he pensado en importar archivos desde una carpeta con varios archivos, tipos de archivos; Siempre configuro una carpeta / subcarpeta exclusivamente para los archivos importados.
Mi estilo, al conectarme a una carpeta, es asegurarme de que estoy obteniendo datos de los archivos correctos, por lo que aplico filtros al nombre del archivo (contiene o comienza con una cadena en particular y no contiene $ ya que este es un archivo temporal) y la extensión. También guardo el nombre del archivo para saber de qué archivo provienen mis datos. Muy útil cuando espero algunos datos para una columna o más con filas en blanco o cuando espero que se cargue este recuento x de archivos pero faltan algunos.
Al obtener datos de una carpeta de libros de Excel, independientemente de la estructura subyacente de los libros dentro de la carpeta, el primer par de pasos de PQ son columnas de metadatos que incluyen una columna de origen de los nombres de los libros. La convención de nomenclatura de nombres de archivo de los libros subyacentes dentro de la carpeta es fundamental ya que se incrusta un MMDDYYYY en cada nombre de archivo. Por ejemplo, "FILE05312023", "FILE06302023", etc. La intención de este subproceso era encontrar una manera de extraer el MMDDYYYY de cada nombre de archivo e incluir esta fecha en cada fila de los libros respectivos de la carpeta.
Junto con las columnas de metadatos está la columna Tabla, que es cada libro que se expandirá para incluir todos los campos subyacentes. A continuación se muestra un ejemplo en el que se han eliminado todas las columnas de metadatos excepto las columnas Origen y tabla:
Fuente | Transformar archivo |
FILE01312023 | Mesa |
FILE02282023 | Mesa |
FILE03312023 | Mesa |
FILE04302023 | Mesa |
FILE05312023 | Mesa |
FILE06302023 | Mesa |
La consulta se vería así después de expandir la tabla:
Fuente | Campo 1 | Campo 2 | Campo 3 |
FILE01312023 | Valor 1 | Valor 1 | Valor 1 |
FILE01312023 | Valor 2 | Valor 2 | Valor 2 |
FILE01312023 | Valor 3 | Valor 3 | Valor 3 |
FILE02282023 | Valor 4 | Valor 4 | Valor 4 |
FILE02282023 | Valor 5 | Valor 5 | Valor 5 |
FILE02282023 | Valor 6 | Valor 6 | Valor 6 |
FILE03312023 | Valor 7 | Valor 7 | Valor 7 |
FILE03312023 | Valor 8 | Valor 8 | Valor 8 |
FILE03312023 | Valor 9 | Valor 9 | Valor 9 |
FILE03312023 | Valor 10 | Valor 10 | Valor 10 |
FILE04302023 | Valor 11 | Valor 11 | Valor 11 |
FILE05312023 | Valor 12 | Valor 12 | Valor 12 |
FILE05312023 | Valor 13 | Valor 13 | Valor 13 |
FILE05312023 | Valor 14 | Valor 14 | Valor 14 |
FILE06302023 | Valor 15 | Valor 15 | Valor 15 |
FILE06302023 | Valor 16 | Valor 16 | Valor 16 |
La intención es agregar una columna personalizada extrayendo la fecha de la columna Origen:
Fuente | Campo 1 | Campo 2 | Campo 3 | Fecha |
FILE01312023 | Valor 1 | Valor 1 | Valor 1 | 1/31/2023 |
FILE01312023 | Valor 2 | Valor 2 | Valor 2 | 1/31/2023 |
FILE01312023 | Valor 3 | Valor 3 | Valor 3 | 1/31/2023 |
FILE02282023 | Valor 4 | Valor 4 | Valor 4 | 2/28/2023 |
FILE02282023 | Valor 5 | Valor 5 | Valor 5 | 2/28/2023 |
FILE02282023 | Valor 6 | Valor 6 | Valor 6 | 2/28/2023 |
FILE03312023 | Valor 7 | Valor 7 | Valor 7 | 3/31/2023 |
FILE03312023 | Valor 8 | Valor 8 | Valor 8 | 3/31/2023 |
FILE03312023 | Valor 9 | Valor 9 | Valor 9 | 3/31/2023 |
FILE03312023 | Valor 10 | Valor 10 | Valor 10 | 3/31/2023 |
FILE04302023 | Valor 11 | Valor 11 | Valor 11 | 4/30/2023 |
FILE05312023 | Valor 12 | Valor 12 | Valor 12 | 5/31/2023 |
FILE05312023 | Valor 13 | Valor 13 | Valor 13 | 5/31/2023 |
FILE05312023 | Valor 14 | Valor 14 | Valor 14 | 5/31/2023 |
FILE06302023 | Valor 15 | Valor 15 | Valor 15 | 6/30/2023 |
FILE06302023 | Valor 16 | Valor 16 | Valor 16 | 6/30/2023 |
... a continuación, elimine la columna Origen y continúe con los pasos de consulta adicionales.... Espero que esto aclare.
¡Gracias! ... finalmente me tomé el tiempo para calcular el código M en el contexto de mi consulta existente.... Aquí está el final de la consulta:
#"Added Custom" = Table.AddColumn(#"Expanded Table Column1", "dt", each Text.BetweenDelimiters([Source.Name], " ", ".x")),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "yr", each Number.From(Text.End([dt],4))),
#"Added Custom2" = Table.AddColumn(#"Added Custom1", "mo", each Number.From(Text.Start([dt], 2))),
#"Added Custom3" = Table.AddColumn(#"Added Custom2", "dy", each Number.From(Text.Range([dt],2,2))),
#"Added Custom4" = Table.AddColumn(#"Added Custom3", "Date", each #date([yr],[mo],[dy])),
#"Tipo cambiado" = Table.TransformColumnTypes(#"Agregado personalizado4",{{"Fecha", tipo fecha}}),
#"Columnas eliminadas" = Table.RemoveColumns(#"Tipo cambiado",{"dt", "yr", "mo", "dy"})
en
#"Columnas eliminadas"
.... Datos exportados desde Table Visual:
Fecha |
3/21/2022 |
3/31/2022 |
4/30/2022 |
5/31/2022 |
6/30/2022 |
7/31/2022 |
8/31/2022 |
9/30/2022 |
10/31/2022 |
11/30/2022 |
12/31/2022 |
1/31/2023 |
2/28/2023 |
3/31/2023 |
4/30/2023 |
5/31/2023 |
6/30/2023 |
7/31/2023 |
No sé lo suficiente sobre el lenguaje M para incrustar lo que tienes en mi consulta existente. Esto es lo que tengo hasta ahora ... ¿Puedes ayudar con la incrustación?
dejar
Origen = Carpeta.Archivos("Carpeta C:\FVE TB"),
#"Archivos ocultos filtrados1" = Table.SelectRows(Origen, cada [Atributos]?[ ¿Oculto]? <> verdadero),
#"Invoke Custom Function1" = Table.AddColumn(#"Archivos ocultos filtrados1", "Transformar archivo (4)", cada #"Transformar archivo (4)"([Contenido])),
#"Renamed Columns1" = Table.RenameColumns(#"Invoke Custom Function1", {"Name", "Source.Name"}),
#"Removed Other Columns1" = Table.SelectColumns(#"Renamed Columns1", {"Source.Name", "Transform File (4)"}),
#"Columna de tabla expandida1" = Table.ExpandTableColumn(#"Otras columnas eliminadas1", "Transformar archivo (4)", Table.ColumnNames(#"Transformar archivo (4)"(#"Archivo de ejemplo (4)")))
en
#"Columna de tabla expandida1"
Acabo de probar y esa cadena de texto mmddyyyy no se pudo analizar como una fecha, incluso si agregué una referencia cultural. Prueba esta columna personalizada
let
dt = Text.BetweenDelimiters([Column1], " ", ".x"),
yr = Number.From(Text.End(dt, 4)),
mo = Number.From(Text.Start(dt, 2)),
dy = Number.From(Text.Range(dt,2,2))
in #date(yr, mo, dy)
Gracias Danextian, han confirmado que la fecha comienza en 16, y el resultado del campo personalizado es por ejemplo '01312023', extraído del valor 'GL_TrialBalance 01312023.xls' de Source.Name columna.
Tal vez sería mejor crear un campo personalizado Fecha de una sola vez; ¿Extraer y formatear al mismo tiempo, en lugar de crear el campo personalizado de caracteres y luego intentar formatear?
Es posible que la fecha comience en 15 y no en 16 o cualquier otro número.
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!