Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Anonymous
Not applicable

¿Cómo codificar Power Query para encabezados que cambian de nombre mensualmente?

Hola a todos,

Tengo un archivo con algunos nombres de columna que están cambiando cada mes, ya que muestra los próximos 12 meses para la previsión y también los meses anteriores. Mi problema es que Power Bi no puede reconocer algunos nombres de columna que ya no están en el informe y bloquea mi consulta. He estado buscando una manera de enumerar los nombres de columna antes de cualquier tipo de cambio / eliminación de columnas por lo que no buscará los nombres exactos... sin embargo, no pude encontrar una solución a mi problema. Debo mantener las columnas comenzando por RSLF y DPFC, ACTD se eliminará.

¡Gracias por tu ayuda!

Aquí está el comienzo de la consulta:

Dejar
Origen: Carpeta.Archivos ("C:-Documentos-Pronóstico"),
"Eliminado otras columnas" - Table.SelectColumns(Source,"Content"-),
"Archivos ocultos filtrados1" - Table.SelectRows("Removed Other Columns", cada [Atributos]?[ ¿Oculto]? <> true),
"Invocar función personalizada1" - Table.AddColumn("Archivos ocultos filtrados1", "Transformar archivo", cada "Archivo de transformación"([Contenido])),
"Eliminado Otras Columnas1" - Table.SelectColumns("Invocar Función Personalizada1", "Transformar Archivo")
"Columna de tabla expandida1" - Table.ExpandTableColumn('"Removed Other Columns1", "Transform File", Table.ColumnNames('Transformar archivo"('Archivo de ejemplo"))))')
#"Changed Type" = Table.TransformColumnTypes(#"Expanded Table Column1",{{"Location", type text}, {"ACTD 9/20", Int64.Type}, {"ACTD 8/20", Int64.Type}, {"ACTD 7/20", Int64.Type}, {"ACTD 6/20", Int64.Type}, {"ACTD 5/20", Int64.Type}, {"ACTD 4/20", Int64.Type}, {"ACTD 3/20", Int64.Type}, {"ACTD 2/20", Int64.Type}, {"ACTD 1/20", Int64.Type}, {"ACTD 12/19", Int64.Type}, {"ACTD 11/19", Int64.Type}, {"ACTD 10/19", Int64.Type}, {"ACTD 9/19", Int64.Type}, {"ACTD 8/19", Int64.Type}, {"ACTD 7/19", Int64.Type}, {"ACTD 6/19", Int64.Type}, {"ACTD 5/19", Int64.Type}, {"ACTD 4/19", Int64.Type}, {"ACTD 3/19", Int64.Type}, {"ACTD 2/19", Int64.Type}, {"ACTD 1/19", Int64.Type}, {"ACTD 12/18", Int64.Type}, {"ACTD 11/18", Int64.Type}, {"ACTD 10/18", Int64.Type}, {"ACTD 9/18", Int64.Type}, {"ACTD 8/18", Int64.Type}, {"ACTD 7/18", Int64.Type}, {"ACTD 6/18", Int64.Type}, {"ACTD 5/18", Int64.Type}, {"ACTD 4/18", Int64.Type}, {"ACTD 3/18", Int64.Type}, {"ACTD 2/18", Int64.Type}, {"ACTD 1/18", Int64.Type}, {"ACTD 12/17", Int64.Type}, {"ACTD 11/17", Int64.Type}, {"ACTD 10/17", Int64.Type}, {"RSLF 10/20", Int64.Type}, {"RSLF 11/20" , Int64.Type, "RSLF 12/20", Int64.Type, "RSLF 1/21", Int64.Type, "RSLF 2/21", Int64.Type, "RSLF 3/21", Int64.Type, "RSLF 4/21", Int64.Type, "RSLF 6/21", Int64.Type, "RSLF 7/21", Int64.Type, "RSLF 8/21", Int64.Type, "RSLF 9/21", Int64.Type, ?"DPFC 10/20", Int64.Type, "DPFC 11/20", Int64.Type, "DPFC 12/20", Int64.Type, "DPFC 1/21", Int64.Type, "DPFC 2/21", Int64.Type, "DPFC 3/21", ", Int64.Type, "DPFC 5/21", Int64.Type, "DPFC 6/21", Int64.Type, "DPFC 7/21", Int64.Type, "DPFC 8/21", Int64.Type, "DPFC 9/21", Int64.Type, Int64.Type, Int64.Type, Int64.Type, "DPFC 9/21", Int64.Type, Int64.Type, Int64.Type, Int64.Type,),
"Columnas eliminadas" - Table.RemoveColumns(-"Changed Type","ACTD 9/20", "ACTD 8/20", "ACTD 7/20", "ACTD 6/20", "ACTD 5/20", "ACTD 4/20", "ACTD 3/20", "ACTD 2/20", "ACTD 1/20", "ACTD 12/19", "ACTD 11/19", "ACTD 10/19", "ACTD 9/19", "ACTD 8/19", "ACTD 7/19", "ACTD 6/19", "ACTD 5/19", "ACTD 4/19", "ACTD 3/19", "ACTD 2/19", "ACTD 1/19", "ACTD 12/18", "ACTD 11/18", "ACTD 10/18", "ACTD 9/18", "ACTD 8/18", "ACTD 7/18", "ACTD 9/18", "ACTD 8/18", "ACTD 7/18", "ACTD 9/18", "ACTD 8/18", "ACTD 7/18", "ACTD 9/18", "ACTD 8/18", "ACTD 7/18", "ACTD 9/18", "ACTD 8/18", "ACTD 7/18", "ACTD 9/18", ACTD 6/18", "ACTD 5/18", "ACTD 4/18", "ACTD 3/18", "ACTD 2/18", "ACTD 1/18", "ACTD 12/17", "ACTD 11/17", "ACTD 10/17")),

1 ACCEPTED SOLUTION
v-lionel-msft
Community Support
Community Support

Hola @Watou62 ,

let
    Source = Excel.Workbook(File.Contents("C:\Users\lionelch\Desktop\Sample data\3.xlsx"), null, true),
    Sheet5_Sheet = Source{[Item="Sheet5",Kind="Sheet"]}[Data],
    #"Promoted Headers" = Table.PromoteHeaders(Sheet5_Sheet, [PromoteAllScalars=true]),
    #"ColumnNames" = Table.ColumnNames(#"Promoted Headers"),
    #"Changed Type" = Table.TransformColumnTypes(
        #"Promoted Headers",
        {
            {#"ColumnNames"{0}, Int64.Type}, 
            {#"ColumnNames"{1}, Int64.Type}, 
            {#"ColumnNames"{2}, Int64.Type}, 
            {#"ColumnNames"{3}, Int64.Type}, 
            {#"ColumnNames"{4}, Int64.Type}, 
            {#"ColumnNames"{5}, Int64.Type}, 
            {#"ColumnNames"{6}, Int64.Type}, 
            {#"ColumnNames"{7}, Int64.Type}, 
            {#"ColumnNames"{8}, Int64.Type}, 
            {#"ColumnNames"{9}, Int64.Type}
        }
    ),
    #"Renamed Columns" = Table.RenameColumns(
        #"Changed Type",
        {
            {#"ColumnNames"{0}, "S1"}, 
            {#"ColumnNames"{1}, "S2"},
            {#"ColumnNames"{2}, "S3"},
            {#"ColumnNames"{3}, "S4"}, 
            {#"ColumnNames"{4}, "S5"},
            {#"ColumnNames"{5}, "S6"},
            {#"ColumnNames"{6}, "S7"},
            {#"ColumnNames"{7}, "S8"},
            {#"ColumnNames"{8}, "S9"}, 
            {#"ColumnNames"{9}, "S10"}
        }
    )
in
    #"Renamed Columns"

Saludos
Lionel Chen

Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

View solution in original post

12 REPLIES 12
v-lionel-msft
Community Support
Community Support

Hola @Watou62 ,

let
    Source = Excel.Workbook(File.Contents("C:\Users\lionelch\Desktop\Sample data\3.xlsx"), null, true),
    Sheet5_Sheet = Source{[Item="Sheet5",Kind="Sheet"]}[Data],
    #"Promoted Headers" = Table.PromoteHeaders(Sheet5_Sheet, [PromoteAllScalars=true]),
    #"ColumnNames" = Table.ColumnNames(#"Promoted Headers"),
    #"Changed Type" = Table.TransformColumnTypes(
        #"Promoted Headers",
        {
            {#"ColumnNames"{0}, Int64.Type}, 
            {#"ColumnNames"{1}, Int64.Type}, 
            {#"ColumnNames"{2}, Int64.Type}, 
            {#"ColumnNames"{3}, Int64.Type}, 
            {#"ColumnNames"{4}, Int64.Type}, 
            {#"ColumnNames"{5}, Int64.Type}, 
            {#"ColumnNames"{6}, Int64.Type}, 
            {#"ColumnNames"{7}, Int64.Type}, 
            {#"ColumnNames"{8}, Int64.Type}, 
            {#"ColumnNames"{9}, Int64.Type}
        }
    ),
    #"Renamed Columns" = Table.RenameColumns(
        #"Changed Type",
        {
            {#"ColumnNames"{0}, "S1"}, 
            {#"ColumnNames"{1}, "S2"},
            {#"ColumnNames"{2}, "S3"},
            {#"ColumnNames"{3}, "S4"}, 
            {#"ColumnNames"{4}, "S5"},
            {#"ColumnNames"{5}, "S6"},
            {#"ColumnNames"{6}, "S7"},
            {#"ColumnNames"{7}, "S8"},
            {#"ColumnNames"{8}, "S9"}, 
            {#"ColumnNames"{9}, "S10"}
        }
    )
in
    #"Renamed Columns"

Saludos
Lionel Chen

Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

PhilipTreacy
Super User
Super User

Hola @Watou62

¿Tal vez lo entendí mal, su solicitud inicial no mencionó el cambio de nombre de columnas? ¿Solo cambiar el tipo o eliminarlos?

Si desea cambiar el tipo sin asignar nombres a las columnas, puede utilizar una función recursiva. Este código incluye el código anterior que escribí para eliminar columnas también.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("DcS3EQAwCASwXai9EUdBDvsP4FchZlKlR2bIHUWgTFSFutEM2kV3JPIB", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"ACTD 9/20" = _t, #"ACTD 8/20" = _t, #"ACTD 7/20" = _t, #"ACTD 6/20" = _t, #"RSLF 10/20" = _t, #"RSLF 11/20" = _t, #"RSLF 12/20" = _t, #"DPFC 10/20" = _t, #"DPFC 11/20" = _t, #"DPFC 12/20" = _t]),
    #"Renamed Columns" = Table.RenameColumns(Source,{{"RSLF 10/20", "Location"}}),
    RemovedColumns = Table.RemoveColumns(#"Renamed Columns", Table.ColumnNames(Table.SelectColumns(#"Renamed Columns", List.FindText(Table.ColumnNames(#"Renamed Columns"),"ACTD")))),

    ChangeTypes = (Tab as table, loop as number) =>

        let
            Temp =  if Table.ColumnNames(Tab){loop} = "Location" 
                    then Table.TransformColumnTypes(Tab, {Table.ColumnNames(Tab){loop}, type text})
                    else Table.TransformColumnTypes(Tab, {Table.ColumnNames(Tab){loop}, Int64.Type}),
                
            result = if loop >= Table.ColumnCount(Tab)-1 then Temp else @ChangeTypes(Temp, loop + 1)
        in
            result,

    Res = ChangeTypes(RemovedColumns,0)

in
    Res

Si necesita cambiar el nombre de las columnas también puedo intentar escribir una función para eso, pero requeriría que las columnas estén en un orden conocido para que se pueda hacer referencia a ellos por posición en lugar de por nombre.

saludos

Phil


Si respondí a su pregunta por favor marque mi post como la solución.
Si mi respuesta ayudó a resolver su problema, déle un kudos haciendo clic en Thumbs Up.



Did I answer your question? Then please mark my post as the solution.
If I helped you, click on the Thumbs Up to give Kudos.


Blog :: YouTube Channel :: Connect on Linkedin


Proud to be a Super User!


Anonymous
Not applicable

Hola Phil, lo siento si no estaba claro. Para resumir mi solicitud, hay 2 temas:

- Eliminar columnas ACTD > Resuelto gracias a su función inicial

- Considere todas las columnas DPFC y RSLF, sin importar lo que mes /año siguen. Por ejemplo, "ACTD 10/17" ya no aparecerá en el nuevo informe y aparecerá "ACTD 10/20". Si dejo los nombres completos codificados de forma rígida, la consulta se bloqueará una vez que la actualice con los nuevos nombres de columna.

Espero tener claro 🙂

Gracias

Hola @Watou62

No te preocupes, todo bien.

¿Ha intentado utilizar el último código que publiqué que incluía la función para cambiar el tipo de las columnas, así como eliminar las columnas ACTD?

saludos

Phil


Si respondí a su pregunta por favor marque mi post como la solución.
Si mi respuesta ayudó a resolver su problema, déle un kudos haciendo clic en Thumbs Up.



Did I answer your question? Then please mark my post as the solution.
If I helped you, click on the Thumbs Up to give Kudos.


Blog :: YouTube Channel :: Connect on Linkedin


Proud to be a Super User!


PhilipTreacy
Super User
Super User

Hola @Watou62

Para buscar cualquier columna con ACTD en su nombre y eliminarlo puede utilizar esta línea

RemovedColumns = Table.RemoveColumns(Source, Table.ColumnNames(Table.SelectColumns(Source, List.FindText(Table.ColumnNames(Source),"ACTD"))))

saludos

Phil



Did I answer your question? Then please mark my post as the solution.
If I helped you, click on the Thumbs Up to give Kudos.


Blog :: YouTube Channel :: Connect on Linkedin


Proud to be a Super User!


Anonymous
Not applicable

Hola Felipe,

Gracias por eso, funciona para eliminar las columnas ACTD.

Todavía necesita encontrar la solución para tener una lista dinámica de encabezados y se ordenaría.

Gracias

@Watou62

Para cambiar varias columnas, debe usar la expresión "Table.ColumnNames" para cada columna que necesite un cambio de nombre.

Por ejemplo, para cambiar los tres primeros nombres de columna de una tabla (tenga en cuenta que Power Query hace referencia a filas y columnas a partir de "0"):

Rename Columns.JPG

O puede hacer esto en la línea "Tipo cambiado" que también hace referencia a los nombres de columna:

Rename Columns1.JPG

Este es el código completo para este ejemplo en particular:

let
    Source = Excel.Workbook(File.Contents("C:\Users\Paul\OneDrive\1 Shared web\Comm PBIs\1 Community files\Channel Item actuals target all 2020 2 tables.xlsx"), null, true),
    Actuals_Table = Source{[Item="Actuals",Kind="Table"]}[Data],
    #"Renamed Columns" = Table.RenameColumns(Actuals_Table,{{Table.ColumnNames(Actuals_Table){0}, "Date"}, {Table.ColumnNames(Actuals_Table){1}, "Sales"}, {Table.ColumnNames(Actuals_Table){2}, "Dist Channel"}}),
    #"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"Date", type date}, {"Sales", Int64.Type}, {"Dist Channel", type text}})
in
    #"Changed Type"

(El truco de nomenclatura en este caso se aplica en la etapa de cambio de nombre de columna)





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






Anonymous
Not applicable

Gracias Paul. Tengo 24 columnas que potencialmente podrían cambiar, ¿necesito incluir las 24 columnas en esta función? Será bastante largo. ¿Hay alguna solución en la que podamos enumerar todas las columnas y hacer referencia a esta función o parámetro tal vez?

@Watou62

Sí, tendrá que incluir la expresión para todas las columnas (y solo chage la referencia de columna para cada una en el valor de la palabra "a").

No soy consciente de otra forma de hacer esto. Tal vez @ImkeF puedan hacer canos.





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






PaulDBrown
Community Champion
Community Champion

@Watou62

Vea si este video de Curbal puede ayudar a:

Administración de encabezados de columna cambiantes en Power Query





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






Anonymous
Not applicable

Hola Paul, gracias. Ya lo he visto un par de veces, pero creo que mis habilidades no son lo suficientemente buenas como para replicarlo en mi modelo. En su ejemplo, se refiere a solo 1 columna que cambia de ahí su función fx- Table.ColumnNames(-"Promoted Headers"){0} para seleccionar la primera columna. ¿Cómo podría añadir todas las columnas a estos corchetes?

Gracias

amitchandak
Super User
Super User

@ImkeF , ¿Puede ayudar en este

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.