Cami
Hola,
Tengo la siguiente tabla de entrada (vea la imagen a continuación) y me gustaría tenerla en el formato que se muestra en la tabla de salida. ¿Cómo analizo la columna FruitsQuantity teniendo en cuenta que puede haber N ocurrencias (FruitQuantity) por persona?
¡Gracias!
jimmy801
Hola @Cami
echa un vistazo a esta solución. es dinámicamente
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("LYy9CoAgGEXf5ZsdUqvdKQgChzavg4RU4B9G759Iyx3OOVxjiBOjPce2gColeGAEtHcVmMgyQ6I5Fe7D90aHNwJ86Eo2tOYrdbNUV/wDCGBz6czA/F82KMnaDw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, Name = _t, FruitsQuantity = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Name", type text}, {"FruitsQuantity", type text}}),
TransformTextWIthSplitterToTable = Table.TransformColumns
(
#"Changed Type",
{
{
"FruitsQuantity",
each Table.FromRecords(List.Transform(List.Split(Text.SplitAny(Text.End(_,Text.Length(_)-1),""),2), each [Fruit= _{0}, Quantity= _{1}]))
}
}
),
Expand = Table.ExpandTableColumn(TransformTextWIthSplitterToTable, "FruitsQuantity", {"Fruit", "Quantity"}, {"Fruit", "Quantity"})
in
Expand
Copie y pegue este código en el editor avanzado en una nueva consulta en blanco para ver cómo funciona la solución.
Si esta publicación ayuda o resuelve su problema, márquelo como solución (para ayudar a otros usuarios a encontrar contenido útil y reconocer el trabajo de los usuarios que lo ayudaron)
Los saludos también son buenos
Divertirse
Palanqueta
Rocco_sprmnt21
t
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("HYtLCoAgEIbvMms3RhGdxd/FOIgFPgal+ze0/R4hEDOTI1atGdiBluvowEHRBUopmdT6NpN++5mIGCuT9c4LOG3hXgZwAZrnesRSTzF+", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [name = _t, #"fr/qty" = _t]),
#"Added Custom" = Table.AddColumn(Source, "Custom", each let lst=Text.Split([#"fr/qty"],"") in List.Zip({List.Alternate(lst,1,1,1),List.Alternate(lst,1,1,0)})),
#"Expanded Custom" = Table.ExpandListColumn(#"Added Custom", "Custom"),
#"Extracted Values" = Table.TransformColumns(#"Expanded Custom", {"Custom", each Text.Combine(List.Transform(_, Text.From), ";"), type text}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", "Custom", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"Custom.1", "Custom.2"})
in
#"Split Column by Delimiter"
prueba también esto:
Rocco_sprmnt21
En respuesta a Rocco_sprmnt21
de otra manera
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("HYtLCoAgEIbvMms3RhGdxd/FOIgFPgal+ze0/R4hEDOTI1atGdiBluvowEHRBUopmdT6NpN++5mIGCuT9c4LOG3hXgZwAZrnesRSTzF+", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [name = _t, #"fr/qty" = _t]),
#"Added Custom1" = Table.AddColumn(Source, "Custom.1", each Splitter.SplitTextByCharacterTransition( {"0".."9"},{""})([#"fr/qty"])),
#"Expanded Custom.1" = Table.ExpandListColumn(#"Added Custom1", "Custom.1"),
#"Split Column by Character Transition" = Table.SplitColumn(#"Expanded Custom.1", "Custom.1", Splitter.SplitTextByCharacterTransition({""}, {"0".."9"}), {"fruits", "quantity"}),
#"Replaced Value" = Table.ReplaceValue(#"Split Column by Character Transition","","",Replacer.ReplaceText,{"fruits"})
in
#"Replaced Value"
jimmy801
Hola @Cami
echa un vistazo a esta solución. es dinámicamente
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("LYy9CoAgGEXf5ZsdUqvdKQgChzavg4RU4B9G759Iyx3OOVxjiBOjPce2gColeGAEtHcVmMgyQ6I5Fe7D90aHNwJ86Eo2tOYrdbNUV/wDCGBz6czA/F82KMnaDw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, Name = _t, FruitsQuantity = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Name", type text}, {"FruitsQuantity", type text}}),
TransformTextWIthSplitterToTable = Table.TransformColumns
(
#"Changed Type",
{
{
"FruitsQuantity",
each Table.FromRecords(List.Transform(List.Split(Text.SplitAny(Text.End(_,Text.Length(_)-1),""),2), each [Fruit= _{0}, Quantity= _{1}]))
}
}
),
Expand = Table.ExpandTableColumn(TransformTextWIthSplitterToTable, "FruitsQuantity", {"Fruit", "Quantity"}, {"Fruit", "Quantity"})
in
Expand
Copie y pegue este código en el editor avanzado en una nueva consulta en blanco para ver cómo funciona la solución.
Si esta publicación ayuda o resuelve su problema, márquelo como solución (para ayudar a otros usuarios a encontrar contenido útil y reconocer el trabajo de los usuarios que lo ayudaron)
Los saludos también son buenos
Divertirse
Palanqueta
Cami
En respuesta a jimmy801
Esto resuelve mucho mi problema.
Gran enfoque, muchas gracias!
greg_deckler
@Cami Bueno, primero dividirías por delimitador:
Después de eso, probablemente un pivote y luego haces algo donde numeras cada fila 1 y 2 y haces algunas cosas elegantes. @ImkeF @edhans
Cami
En respuesta a greg_deckler
¡Gracias por tu pronta respuesta!
Esto no resuelve mi problema. Necesito que la solución sea dinámica. Dividir por delimitador tiene en cuenta el número máximo de ocurrencias del delimitador dado de la columna y propone el número de columnas para dividir. En un ambiente podría tener 6 ocurrencias y en otro 10.