tondeli
En mis datos tengo id-key, dimension y dimension value. Tres columnas en total. No sé cuántos valores diferentes contiene la columna de dimensión (0,1,2 … n). He pivotado mis datos para que las dimensiones estén en columnas. El siguiente paso es que necesito fusionar los valores de dimensión como una columna.
My data after pivot-operation:
id-key 1 2 3 4 5 0 Merged id001 a 3 aa true a - 3 - aa - - - true id002 5 rh zz false - 5 - rh - zz - - false
Mi problema es que no estoy seguro de cuántas columnas tendré en este punto. Entonces, lo siguiente no funciona.
= Table.AddColumn(#"Pivoted Column", "Merged", each Text.Combine({[1], [2], [3], [4], [5], [0]}, " - "), type text)
Me gustaría usar una solución como esta:
= Table.AddColumn(#"Pivoted Column", "Merged", each Text.Combine({between([1], [0])}, " - "), type text)
¡Todas las ideas son bienvenidas!
MarcelBeug
En respuesta a v-huizhn-msft
Una solución dinámica:
#"Added Custom" = Table.AddColumn( #"Pivoted Column", "Merged", each Text.Combine( List.Transform( List.Skip( Record.FieldValues(_)), each Replacer.ReplaceValue( Text.From(_), null, "")), " - "), type text)
tondeli
Mis ideas fueron comenzar con:
Table.ColumnNames
- Crea una lista de todos los nombres de columna en la tabla -> No estoy seguro de cómo nombrar mi tabla. ¿Es el último paso en mi QueryEditor?
List.Generar
- Crea una lista basada en valores -> Necesito crear un valor mínimo y máximo de mi columna de dimensión
Text.Combine
- Lista de texto para combinar -> No estoy seguro de si necesitaré este paso …
No tengo ninguno de estos para trabajar todavía …
v-huizhn-msft
En respuesta a tondeli
Hola @tondeli,
Como probé, seleccione todas las columnas (sin importar cuántas columnas tenga) haciendo clic en «CTRL + A», luego haga clic derecho-> Combinar columnas-> escriba el espacio personalizado como se muestra en la imagen 2.
Obtendrá el resultado esperado de la siguiente manera.
Es más fácil fusionar columnas mediante la navegación de la interfaz, en lugar de escribir la instrucción de consulta. Después de la operación en la interfaz, la declaración de Power Query se generará automáticamente, puede hacer clic en «Editor avanzado» y ver las declaraciones.
Atentamente,
Angelia
tondeli
En respuesta a v-huizhn-msft
Esta solución me da la siguiente línea de consulta:
= Table.CombineColumns(#"Pivoted Column",{"id-key", "1", "2", "3", "4", "5", "0"},Combiner.CombineTextByDelimiter(" - ", QuoteStyle.None),"Merged")
Todavía «codifica» esos nombres de columna. Si elimino una columna, este paso da error. Si agrego una nueva columna, este paso omite esa columna en este paso.
El resultado está bien, pero me gustaría hacer referencia a la cantidad dinámica de columnas en mis datos.
MarcelBeug
En respuesta a tondeli
Solo para aclarar:
no reaccionó a mi solución ya que es dinámica.
smpa01
En respuesta a MarcelBeug
Hola @MarcelBeug,
Tengo una situación similar y me preguntaba si podría ayudarme con esto.
Tengo los datos sin procesar adjuntos y el resultado deseado aquí: https://drive.google.com/open?id=1fNQePPTGmQ8dDXTsQFwsSS6UMPb4Sss1
La salida debe generarse en dos columnas donde Combiner.CombineTextByDelimiter ignorará los valores nulos y si hay un valor nulo no habrá delimitador.
He trabajado en esto siguiendo el código. Pero, por supuesto, no pude generar la salida como deseaba. Si pudiera haber trabajado el código como lo deseaba, en el paso final dividiría la tabla en el primer delimitador y tendría el resultado.
let Source = Excel.Workbook(File.Contents("C:Userssmpa01DocumentsPBIXDynamic Merge Test.xlsx"), null, true), Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data], #"Changed Type" = Table.TransformColumnTypes(Sheet1_Sheet,{{"Column1", type text}, {"Column2", type text}}), #"Promoted Headers" = Table.PromoteHeaders(#"Changed Type", [PromoteAllScalars=true]), #"Changed Type1" = Table.TransformColumnTypes(#"Promoted Headers",{{"Name", type text}, {"Country", type text}}), #"Sorted Rows" = Table.Sort(#"Changed Type1",{{"Name", Order.Ascending}}), #"Grouped Rows" = Table.Group(#"Sorted Rows", {"Name"}, {{"Count", each _, type table}}), #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each Table.AddIndexColumn([Count],"X",1,1)), #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Count"}), #"Expanded Custom" = Table.ExpandTableColumn(#"Removed Columns", "Custom", {"Name", "Country", "X"}, {"Custom.Name", "Custom.Country", "Custom.X"}), #"Removed Columns1" = Table.RemoveColumns(#"Expanded Custom",{"Name"}), #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Removed Columns1", {{"Custom.X", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Removed Columns1", {{"Custom.X", type text}}, "en-US")[Custom.X]), "Custom.X", "Custom.Country"), #"Replaced Value" = Table.ReplaceValue(#"Pivoted Column",null,"",Replacer.ReplaceValue,{"Custom.Name", "1", "2", "3", "4", "5", "6"}), Custom1 = Table.ToList(#"Replaced Value", Combiner.CombineTextByDelimiter(",")), #"Converted to Table" = Table.FromList(Custom1, Splitter.SplitByNothing(), null, null, ExtraValues.Error) in #"Converted to Table"
Gracias de antemano
smpa01
En respuesta a smpa01
Lo encontré: https://community.powerbi.com/t5/Desktop/Combine-columns-if-not-null-or-empty/td-p/187969
MarcelBeug
En respuesta a v-huizhn-msft
Una solución dinámica:
#"Added Custom" = Table.AddColumn( #"Pivoted Column", "Merged", each Text.Combine( List.Transform( List.Skip( Record.FieldValues(_)), each Replacer.ReplaceValue( Text.From(_), null, "")), " - "), type text)
Flyckten
En respuesta a MarcelBeug
@MarcelBeug ¿Podría explicar qué hacen las partes en su función? Me gusta el resultado, pero me cuesta ajustarlo a mis necesidades.
Atentamente,
Alex
smpa01
En respuesta a MarcelBeug
Esto es asombroso.