tc5pt
Tengo varias columnas que tienen una fecha en una fila, por lo que contienen «https://community.powerbi.com/». Ninguna de las otras columnas que necesito contiene una barra invertida en ninguna de las filas. Me gustaría eliminar las columnas que contienen esta barra invertida.
Vi un hilo que propone la siguiente fórmula pero tengo dificultades para aplicarla a mi consulta. Me dice «PreviousStepName no reconocido». Lo reemplacé con el nombre del paso anterior en mi consulta, pero eso no funcionó. ¿Se supone que debo completar valores para «ColumnNames» y otras partes de esta fórmula también? ¿O esta fórmula no es precisa para lo que estoy tratando de lograr?
= let columnasParaEliminar = List.Select(Table.ColumnNames(PreviousStepName), cada Text.StartsWith(_, «Var») o Text.Contains(_, «_prep»)) en Table.RemoveColumns(PreviousStepName, columnToRemove)
También encontré un hilo que sugería transponer mis datos y luego eliminar filas, pero esta no era una buena solución para mis datos.
Gracias
Sin bloqueo
En respuesta a tc5pt
Hola @tc5pt,
Intenté integrarlo en el código que mencionaste anteriormente. Simplemente reemplace todas las apariciones de «Fuente» con #»Encabezados promocionados» y debería funcionar en su archivo de Excel.
let Source = Excel.Workbook(File.Contents("C: Source"), null, true), #"1_Sheet" = Source{[Item="1",Kind="Sheet"]}[Data], #"Promoted Headers" = Table.PromoteHeaders(#"1_Sheet", [PromoteAllScalars=true]), // get columns which contains any slash among values ColumnsToRemove = List.Select( // get a list of all columns Table.ColumnNames(#"Promoted Headers"), (columnName) => let // get all values of a columns ColumnValues = Table.Column(#"Promoted Headers", columnName), // go through values and stop when you find the first occurence of a text containing a slash // if there is a value with a slash, return true else false ContainsSlash = List.AnyTrue(List.Transform(ColumnValues, each Text.Contains(_, "https://community.powerbi.com/"))) in ContainsSlash ), // remove columns Result = Table.RemoveColumns(#"Promoted Headers", ColumnsToRemove) in Result
Sin bloqueo
Hola @tc5pt,
Solo estoy adivinando: debe reemplazar todas las ocurrencias de PreviousStepName. En tu caso tienes que reponerlo dos veces.
let PreviousStepName = <THE NAME OF PREVIOUS STEP>, columnsToRemove = List.Select(Table.ColumnNames(PreviousStepName), each Text.StartsWith(_, "Var") or Text.Contains(_, "_prep")) in Table.RemoveColumns(PreviousStepName, columnsToRemove)
Pero supongo que también puede haber otro problema porque tu código comienza con «=». Por favor, publique la consulta completa para ver si la usa correctamente.
tc5pt
En respuesta a Sin bloqueo
Gracias por tu respuesta @Nolock
¿Dónde exactamente ingreso este código? ¿En el Editor avanzado? Cuando hago eso, me da Token Comma o Token Eof esperado. No estoy seguro de cómo ingresar este código.
Sin bloqueo
En respuesta a tc5pt
Hola @tc5pt,
jep, en el Editor avanzado. Publique su consulta de PowerQuery (sin datos) y lo ayudaré a integrar el código.
El mensaje de error significa que falta una coma o tal vez una al final del código antes del último IN o algo similar.
tc5pt
En respuesta a Sin bloqueo
@Nolock
let Source = Excel.Workbook(File.Contents("C: Source"), null, true), #"1_Sheet" = Source{[Item="1",Kind="Sheet"]}[Data], #"Promoted Headers" = Table.PromoteHeaders(#"1_Sheet", [PromoteAllScalars=true]) in #"Promoted Headers"
Esto es lo que está actualmente en mi editor avanzado. También cambió el tipo de forma predeterminada, pero eliminé ese paso porque había más de 100 columnas y creó un gran bloque de código.
¿Cómo inyectaría el código que diste?
Sin bloqueo
En respuesta a tc5pt
Hola @tc5pt,
aquí vamos:
let Source = Excel.Workbook(File.Contents("C: Source"), null, true), #"1_Sheet" = Source{[Item="1",Kind="Sheet"]}[Data], #"Promoted Headers" = Table.PromoteHeaders(#"1_Sheet", [PromoteAllScalars=true]), columnsToRemove = List.Select(Table.ColumnNames(#"Promoted Headers"), each Text.StartsWith(_, "Var") or Text.Contains(_, "_prep")), result = Table.RemoveColumns(#"Promoted Headers", columnsToRemove) in result
tc5pt
En respuesta a Sin bloqueo
@Nolock
Esto no parece estar funcionando y no estoy seguro de por qué. El tipo de datos de las columnas es texto. Me he asegurado de no agregar ningún paso entre (es decir, no se ha agregado ningún código adicional). ¿Algunas ideas?
picante
En respuesta a tc5pt
Hola, mira el ejemplo de código que proporcionaste primero y el requisito. No hacen lo mismo. El ejemplo de código busca nombres de columna que comiencen con «Var» o que contengan «_prep» y elimina la columna.
@Nolock (respeto por la contribución que hace a este sitio) lo ayudó a eliminar los errores de sintaxis y, creo, asumió que el código de muestra era lo que quería.
Creo (corríjame si me equivoco) que desea eliminar columnas donde hay un valor de fila que tiene «https://community.powerbi.com/».
Entonces, si los datos se vieran así:
columna 1 columna 2 columna 3
A GRATUITO 6/2/2019
joe 23/4 x
sd gt y
desea eliminar las columnas 2 y 3. ¿Sí?
tc5pt
En respuesta a picante
Ya cambié esa parte del código. Cambié la fuente y los nombres de elementos/hojas para la publicación y también los volví a cambiar.
Y sí, eso es correcto. ¿Quizás no es el código correcto para ese propósito?
Gracias @HotChilli
Sin bloqueo
En respuesta a tc5pt
Hola @tc5pt y @HotChilli,
Lo siento mucho, entendí mal la tarea al principio.
He escrito otro código que elimina las columnas que tienen al menos un valor que contiene una barra inclinada.
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSlTSUUrUB5FJQKwUqxMNZoBwsn4KTCgZxNBRMtQ3AovEAgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t, Column3 = _t, Column4 = _t]), // get columns which contains at least one value which contains a slash ColumnsToRemove = List.Select( // get a list of all columns of the table Source Table.ColumnNames(Source), (columnName) => let // get all values of a column ColumnValues = Table.Column(Source, columnName), // go through values and stop when you find the first occurence of a text containing a slash // if there is a value with a slash, return true else false ContainsSlash = List.AnyTrue(List.Transform(ColumnValues, each Text.Contains(_, "https://community.powerbi.com/"))) in ContainsSlash ), // remove columns Result = Table.RemoveColumns(Source, ColumnsToRemove) in Result
tc5pt
En respuesta a Sin bloqueo
Gracias. Probaré esto. ¿Necesito reemplazar ciertas palabras allí, como «fuente»?
Soy un novato total, así que pido disculpas si es obvio.
Gracias @Nolock
Sin bloqueo
En respuesta a tc5pt
Hola @tc5pt,
Intenté integrarlo en el código que mencionaste anteriormente. Simplemente reemplace todas las apariciones de «Fuente» con #»Encabezados promocionados» y debería funcionar en su archivo de Excel.
let Source = Excel.Workbook(File.Contents("C: Source"), null, true), #"1_Sheet" = Source{[Item="1",Kind="Sheet"]}[Data], #"Promoted Headers" = Table.PromoteHeaders(#"1_Sheet", [PromoteAllScalars=true]), // get columns which contains any slash among values ColumnsToRemove = List.Select( // get a list of all columns Table.ColumnNames(#"Promoted Headers"), (columnName) => let // get all values of a columns ColumnValues = Table.Column(#"Promoted Headers", columnName), // go through values and stop when you find the first occurence of a text containing a slash // if there is a value with a slash, return true else false ContainsSlash = List.AnyTrue(List.Transform(ColumnValues, each Text.Contains(_, "https://community.powerbi.com/"))) in ContainsSlash ), // remove columns Result = Table.RemoveColumns(#"Promoted Headers", ColumnsToRemove) in Result