eliminar todas las columnas de un conjunto que comience con «Columna»

Un usuario Pregunto ✅

Anónimo

En Power Query, me gustaría eliminar todas las columnas que no tienen encabezado. Así que traté de averiguar cómo eliminar todas las columnas que comienzan con «Columna» en el nombre de la columna. Me gustaría hacer esto de forma dinámica porque mis archivos fuente pueden tener una cantidad diferente de columnas sin encabezados.
¿Se puede hacer esto en el script de Power Query M?

Greg_Deckler

Bueno, en teoría, podría usar Table.ColumnNames para obtener una lista de nombres de columna, hacer un análisis de texto con funciones de texto, esencialmente recorrer cada valor en la lista de texto proveniente de ColumnNames y construir un nuevo conjunto que solo incluye la palabra Column en ellos y luego ingrese la lista resultante en la función Table.RemoveColumns.

Las primeras y últimas partes son fáciles. La parte complicada es la parte media. Usaría Text.Split para dividirlo en una lista porque hay muchas funciones de lista que podría usar para hacer potencialmente lo que quiera.

https://msdn.microsoft.com/en-us/library/mt211003.aspx

redzstarkiss

Normalmente transpondría las columnas.

Luego, debajo de la primera columna, eliminaré los valores ‘nulos’.

Luego, vuelva a transponer las columnas antes de promover los encabezados.

Jasonmaskell

Así es como lo resolví.

  1. Obtener los nombres de las columnas de la tabla con Table.ColumnNames.
  2. Utilizando List.FindText para encontrar la cadena deseada dentro de esas columnas (por ejemplo, «Columna») y devolverla como una lista.
  3. Devolver una lista con la diferencia entre todas las columnas y las columnas deseadas usando List.Diferencia.
  4. Utilizando Tabla.RetirarColumnas para eliminar columnas que no se encuentran en nuestra lista de columnas deseadas.

Nota: esto devuelve todas las columnas que Contiene la cadena de entrada (p. ej., «Columna»), no solo los a partir de con esa cuerda.

let
    Source = #"Query Containing Table",
    #"Column Names" = Table.ColumnNames(Source),
    #"Columns Containing String" = List.FindText(#"Column Names", "Column"),
    #"List Difference" = List.Difference(#"Column Names", #"Columns Containing String"),
    #"Remove Columns" = Table.RemoveColumns(Source, #"List Difference")
in
    #"Remove Columns"

CidcleyBarbosa

En respuesta a Jasonmaskell

¡Buena solución! Alternativamente, este código es más simple:

= Table.RemoveColumns(#"Last step",List.FindText(Table.ColumnNames(#"Last step"), "Column"))

Greg_Deckler

Bueno, en teoría, podría usar Table.ColumnNames para obtener una lista de nombres de columna, hacer un análisis de texto con funciones de texto, esencialmente recorrer cada valor en la lista de texto proveniente de ColumnNames y construir un nuevo conjunto que solo incluye la palabra Column en ellos y luego ingrese la lista resultante en la función Table.RemoveColumns.

La primera y la última parte son fáciles. La parte complicada es la parte media. Usaría Text.Split para dividirlo en una lista porque hay muchas funciones de lista que podría usar para hacer potencialmente lo que quiera.

https://msdn.microsoft.com/en-us/library/mt211003.aspx

Deja un comentario

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