Forum Discussion
Creating hierarchy tree from data
- Anonymous5 years ago
Hi dstanisljevic ,
I created a sample pbix file(see attachment), please check whether that is what you want.
1. Added an auxiliary table to get column values without parent elements (4, 5, 6)
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUXJUitWJVjICspzALGMgyxnMMgGyDMEsUyDLCMwyA7KMlWJjAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Parent = _t, Name = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Parent", type text}, {"Name", type text}}), #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each if List.Contains(#"Changed Type"[Name], [Parent]) then null else [Parent]), #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Parent", "Name"}), #"Filtered Rows" = Table.SelectRows(#"Removed Columns", each ([Custom] <> null)), #"Renamed Columns" = Table.RenameColumns(#"Filtered Rows",{{"Custom", "Name"}}) in #"Renamed Columns"2. Append this table to the original table
3. Create some calculated columns to get the path and pathlength by using Parent and Child functions
Path = PATH('Table'[Name],'Table'[Parent])Pathlen = PATHLENGTH('Table'[Path])4. Create calculated columns to get the parent, sub and name values
nParent = VAR _len = MAX ( 'Table'[Pathlen] ) RETURN IF ( 'Table'[Pathlen] = _len, PATHITEM ( 'Table'[Path], 1 ), BLANK () )Sub = VAR _len = MAX ( 'Table'[Pathlen] ) RETURN IF ( 'Table'[Pathlen] = _len, PATHITEM ( 'Table'[Path], 2 ))nName = VAR _len = MAX ( 'Table'[Pathlen] ) RETURN IF ( 'Table'[Pathlen] = _len, PATHITEM ( 'Table'[Path], 3 ))Best Regards
Should also add that not all values in the 'Parent' column exist in the 'Name' column.
Hi dstanisljevic ,
I created a sample pbix file(see attachment), please check whether that is what you want.
1. Added an auxiliary table to get column values without parent elements (4, 5, 6)
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUXJUitWJVjICspzALGMgyxnMMgGyDMEsUyDLCMwyA7KMlWJjAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Parent = _t, Name = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Parent", type text}, {"Name", type text}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each if List.Contains(#"Changed Type"[Name], [Parent]) then null else [Parent]),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Parent", "Name"}),
#"Filtered Rows" = Table.SelectRows(#"Removed Columns", each ([Custom] <> null)),
#"Renamed Columns" = Table.RenameColumns(#"Filtered Rows",{{"Custom", "Name"}})
in
#"Renamed Columns"
2. Append this table to the original table
3. Create some calculated columns to get the path and pathlength by using Parent and Child functions
Path = PATH('Table'[Name],'Table'[Parent])Pathlen = PATHLENGTH('Table'[Path])
4. Create calculated columns to get the parent, sub and name values
nParent =
VAR _len =
MAX ( 'Table'[Pathlen] )
RETURN
IF ( 'Table'[Pathlen] = _len, PATHITEM ( 'Table'[Path], 1 ), BLANK () )Sub =
VAR _len =
MAX ( 'Table'[Pathlen] )
RETURN
IF ( 'Table'[Pathlen] = _len, PATHITEM ( 'Table'[Path], 2 ))nName =
VAR _len =
MAX ( 'Table'[Pathlen] )
RETURN
IF ( 'Table'[Pathlen] = _len, PATHITEM ( 'Table'[Path], 3 ))
Best Regards