Forum Discussion

Powerwoman's avatar
Powerwoman
Helper II
1 year ago
Solved

Create a column with hierarchy information

Hi there, I have a table:   rowNo description totaling rowNo value 1009 Level 0 1030   1009 Level 0 4820   1030 Level 1 1050   1030 Level 1 1060   1050 data 1   ...
  • dufoq3's avatar
    1 year ago

    Hi Powerwoman, another approach:

     

    Output

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQwsFTSUfJJLUvNUTAAsgwNjEGUUqwOFkkTCyMkSbBCiKQhWKcpPkkzJEmwwpTEkkSwHFgaKmMGlzGCyBhBZKA2g2WMITJAQ2JjAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [rowNo = _t, description = _t, #"totaling rowNo" = _t, value = _t]),
        ChangedType = Table.TransformColumnTypes(Source,{{"rowNo", type text}, {"totaling rowNo", type text}, {"value", Int64.Type}}),
        R = Function.Invoke(Record.FromList, Table.ToColumns(Table.SelectRows(ChangedType, each not List.Contains({null, ""}, [totaling rowNo]))[[rowNo], [totaling rowNo]])),
        F = (child, optional lvl)=>
            let l = lvl ?? 0,
                a = Record.FieldOrDefault(R, child, 0), // 0 = highest parent (Level 0)
                b = if a = 0 then l else @F(a, l+1)
            in  b,
        Ad_Level = Table.AddColumn(ChangedType, "Level", each F([rowNo]), type text)
    in
        Ad_Level