Cómo analizar y extraer datos de la columna usando el delimitador

Un usuario Pregunto ✅

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?

Cami_0-1600094135590.png

¡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

Jimmy801_0-1600098582141.png

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

Jimmy801_0-1600098582141.png

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:

Greg_Deckler_0-1600094469967.png

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.

Deja un comentario

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