Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
3 years ago
Solved

Splitting 1 large text body into several columns

So I have an issue where I this large chunk of text which I can not transform before I load it into Power BI:   "ubff-prd99.74 %98.90 %100.00 %99.78 %cecartsservice-prd81.59 %21.01 %0.00 %88.40%cec...
  • AntrikshSharma's avatar
    3 years ago

    Anonymous Use this:

    let
        Source = Table.FromRows (
            Json.Document (
                Binary.Decompress (
                    Binary.FromText (
                        "jZLdjoIwEEZfhZhw2aYgFPosxotaBm0iP2mRjW+/04Laimv2xknMmW/OTDkcdrdT25LRNELQqkhSUVPBkjRjjDKs7t86SRUoaSZrwcxagcPrjJYiSfOMsixJF7iuacEce7PT0IF54zlb+DLkMxcecG4+5ooKS2ixrxyIoeoi+3cTzn3ynoXJJfKDabYaC5yLEC5c+ijvHcThPMeV1vAVr7gfhLjRSvfnf6gUnh6am/rLPItx201EDZ1bF6A/6x6IVFdy1TPUOS3RNi8pe20gsKxNfau9EhhiZ/VoYXi+fE9ZHcypsLieRtrLaZCmIS00vsEhKxf+ehjkFU960aON8GTDe/wsJ/iR90iFLyr8g8ryXkSO+p0uXjAXEfzdYkFH3YUHZHxzjEcoPtOsrR56fNmn9ZcFLUyT+wgi5w/HfuQ/+a12NGB3PP4C",
                        BinaryEncoding.Base64
                    ),
                    Compression.Deflate
                )
            ),
            let
                _t = ( ( type nullable text ) meta [ Serialized.Text = true ] )
            in
                type table [ Column1 = _t ]
        ),
        ChangedType = Table.TransformColumnTypes ( Source, { { "Column1", type text } } ),
        AddedCustom = 
        Table.AddColumn (
            ChangedType,
            "Split",
            ( Data ) =>
                let
                    SplitToRows = 
                        Splitter.SplitTextByCharacterTransition (
                            { "%" },
                            { "a" .. "z", "A" .. "Z" }
                        )( Data[Column1] ),
                    SplitNamesAndPercentage = 
                        List.Transform (
                            SplitToRows,
                            each Splitter.SplitTextByCharacterTransition (
                                { "a" .. "z", "A" .. "Z" },
                                { "0" .. "9" }
                            )( _ )
                        ),
                    TransformPercentages = 
                        List.Transform (
                            SplitNamesAndPercentage,
                            each Table.FromRows (
                                {
                                    { _{0} }
                                        & List.Transform (
                                            List.Select (
                                                Text.Split ( _{1}, "%" ),
                                                each not List.Contains ( { " ", "" }, _ )
                                            ),
                                            each try Number.From ( _ ) / 100 otherwise null
                                        )
                                },
                                type table [
                                    Name = text,
                                    Percentage 1 = Percentage.Type,
                                    Percentage 2 = Percentage.Type,
                                    Percentage 3 = Percentage.Type,
                                    Percentage 4 = Percentage.Type
                                ]
                            )
                        ),
                    Result = Table.Combine ( TransformPercentages )
                in
                    Result,
            type table [
                Name = text,
                Percentage 1 = Percentage.Type,
                Percentage 2 = Percentage.Type,
                Percentage 3 = Percentage.Type,
                Percentage 4 = Percentage.Type
            ]
        ),
        RemovedColumns = Table.RemoveColumns ( AddedCustom, { "Column1" } ),
        ExpandedSplit = 
            Table.ExpandTableColumn (
                RemovedColumns,
                "Split",
                { "Name", "Percentage 1", "Percentage 2", "Percentage 3", "Percentage 4" },
                { "Name", "Percentage 1", "Percentage 2", "Percentage 3", "Percentage 4" }
            )
    in
        ExpandedSplit