Forum Discussion
Anonymous
2 years agoNot applicable
Multiple (2) Matrix Table Links with 1 main table...achiveable?
Hi Community, I'm wondering what is the best way to link three tables together (in which two are like matrix tables). It's not a simple link (at least for me) and seeking the most efficient way o...
- 2 years ago
Hi Anonymous, check this:
Result
let T1Main = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("hdA9C4MwEAbgv1IyO+TOnDWjinRqKXQUhw4dS6XQ/98786FJoB0iEh7eu7zTpADBgKqUnHPHn8v9+TjIz+n9+iyg5oqRwfo/OgIhXxk+Y0R9hqxBAZigISB0qGXm0bKN6zOFBCIoXSpm1U6RRuuzNtV3WVZjQfNVw2e4FbsHhCgN2J+ICGWjNW43MK5Fvgfb1sIoDcuZQQ2BjWXzFPrSa5iUdi2rN165NwIkI/cT5y8=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, Type = _t, TypeLVL2 = _t, Name = _t, Group = _t]), T2Matrix1 = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUfKE4rzSnBwMKsgRlwwqFZyZl56TqhSrE61kRLYhhEw2JqCUoD0wryKZaYIpS4SjPNFsQzLQlHhTCDobyVgzYv1HWpCakxF6mLYgGWhBQVRjCRYkky0xXUJswvLE6lRDA5gR2AgizfMtzSnJhBhnqIQtbAgaBlaAw4VGWO0kMRWhpXhDQtmIXHNNKDUQZ6IyNMUXU8jpEovh0BiKBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Type = _t, RoleID1 = _t, RolelD2 = _t, RoleID3 = _t, RoleID4 = _t, RolelD5 = _t, RoleID6 = _t, RolelD7 = _t, RolelD8 = _t, RolelD9 = _t, RolelD10 = _t, RolelD11 = _t, #"Single/Multi" = _t]), T3Matrix2 = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ZVC7DoMwEPuVKjNDefWxk4tKUxEFxIIYu0WlqsT/l7ukF6CLMTaxHYZBqM80v0Ui7OSetyoNzFUZazmzgt2StRNrZ2YXZldm6THSVIxJaMbCtvOIlT0gPiyipjna5uRiOdAsBW7Bu0Rdm8MqDV2j8RRI5ECZjUHlNTsXH7UsdqgprzFZjPMFcVxN9SHBS9BGQ8s/G6s5rtjdNXzZrBp83HaqpSPWL1imcl7JeWFk7++8iqO/pgi3odDlv5dx/AI=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [TypeLVL2 = _t, MA = _t, EA = _t, PA = _t, CS = _t, DF = _t, WS = _t, KF = _t, EW = _t, FA = _t, JU = _t, RY = _t]), T2_Unpivoted = Table.UnpivotOtherColumns(T2Matrix1, {"Type"}, "RoleID", "Value"), T3_DemoteHeaders = Table.DemoteHeaders(T3Matrix2), T3_TransposedTable = Table.Transpose(T3_DemoteHeaders), T3_PromotedHeaders = Table.PromoteHeaders(T3_TransposedTable, [PromoteAllScalars=true]), T3_RenamedColumns = Table.RenameColumns(T3_PromotedHeaders,{{"Group", "RoleID"}}), T3_Unpivoted = Table.UnpivotOtherColumns(T3_RenamedColumns, {"TypeLVL2", "RoleID"}, "Group", "Value"), T2_SelfMerge_T3 = Table.NestedJoin(T2_Unpivoted, {"RoleID"}, T3_Unpivoted, {"RoleID"}, "T3_Unpivoted", JoinKind.LeftOuter), T2_ExpandedT3_Unpivoted = Table.ExpandTableColumn(T2_SelfMerge_T3, "T3_Unpivoted", {"Group", "TypeLVL2", "Value"}, {"T2Group", "T2TypeLVL2", "T2Value"}), T2_FilteredRA = Table.SelectRows(T2_ExpandedT3_Unpivoted, each ([Value] = "RA")), StepBackToT1 = T1Main, SelfMerge_T1_T2 = Table.NestedJoin(StepBackToT1, {"Type"}, T2Matrix1, {"Type"}, "T2", JoinKind.LeftOuter), AddedIndex = Table.AddIndexColumn(SelfMerge_T1_T2, "Index", 0, 1, Int64.Type), ExpandedT2 = Table.ExpandTableColumn(AddedIndex, "T2", {"Single/Multi"}, {"Single/Multi"}), SelfMergeT2_Single = Table.NestedJoin(ExpandedT2, {"Group", "Type"}, T2_FilteredRA, {"T2Group", "Type"}, "T2_Single", JoinKind.LeftOuter), SelfMergeT2_Multi = Table.NestedJoin(SelfMergeT2_Single, {"Group", "Type", "TypeLVL2"}, T2_FilteredRA, {"T2Group", "Type", "T2TypeLVL2"}, "T2_Multi", JoinKind.LeftOuter), ExpandedT2_Multi = Table.ExpandTableColumn(SelfMergeT2_Multi, "T2_Multi", {"T2Value"}, {"T2Value"}), SortedRows = Table.Sort(ExpandedT2_Multi,{{"Index", Order.Ascending}}), Ad_MainRoleID = Table.AddColumn(SortedRows, "MainRole_ID", each if [T2Value] <> null then [T2Value] else Table.First([T2_Single])[T2Value], type text), RemovedOtherColumns = Table.SelectColumns(Ad_MainRoleID,{"ID", "Group", "Type", "TypeLVL2", "Single/Multi", "MainRole_ID"}) in RemovedOtherColumns
dufoq3
2 years agoCommunity Champion
Hi Anonymous, check this:
Result
let
T1Main = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("hdA9C4MwEAbgv1IyO+TOnDWjinRqKXQUhw4dS6XQ/98786FJoB0iEh7eu7zTpADBgKqUnHPHn8v9+TjIz+n9+iyg5oqRwfo/OgIhXxk+Y0R9hqxBAZigISB0qGXm0bKN6zOFBCIoXSpm1U6RRuuzNtV3WVZjQfNVw2e4FbsHhCgN2J+ICGWjNW43MK5Fvgfb1sIoDcuZQQ2BjWXzFPrSa5iUdi2rN165NwIkI/cT5y8=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, Type = _t, TypeLVL2 = _t, Name = _t, Group = _t]),
T2Matrix1 = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUfKE4rzSnBwMKsgRlwwqFZyZl56TqhSrE61kRLYhhEw2JqCUoD0wryKZaYIpS4SjPNFsQzLQlHhTCDobyVgzYv1HWpCakxF6mLYgGWhBQVRjCRYkky0xXUJswvLE6lRDA5gR2AgizfMtzSnJhBhnqIQtbAgaBlaAw4VGWO0kMRWhpXhDQtmIXHNNKDUQZ6IyNMUXU8jpEovh0BiKBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Type = _t, RoleID1 = _t, RolelD2 = _t, RoleID3 = _t, RoleID4 = _t, RolelD5 = _t, RoleID6 = _t, RolelD7 = _t, RolelD8 = _t, RolelD9 = _t, RolelD10 = _t, RolelD11 = _t, #"Single/Multi" = _t]),
T3Matrix2 = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ZVC7DoMwEPuVKjNDefWxk4tKUxEFxIIYu0WlqsT/l7ukF6CLMTaxHYZBqM80v0Ui7OSetyoNzFUZazmzgt2StRNrZ2YXZldm6THSVIxJaMbCtvOIlT0gPiyipjna5uRiOdAsBW7Bu0Rdm8MqDV2j8RRI5ECZjUHlNTsXH7UsdqgprzFZjPMFcVxN9SHBS9BGQ8s/G6s5rtjdNXzZrBp83HaqpSPWL1imcl7JeWFk7++8iqO/pgi3odDlv5dx/AI=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [TypeLVL2 = _t, MA = _t, EA = _t, PA = _t, CS = _t, DF = _t, WS = _t, KF = _t, EW = _t, FA = _t, JU = _t, RY = _t]),
T2_Unpivoted = Table.UnpivotOtherColumns(T2Matrix1, {"Type"}, "RoleID", "Value"),
T3_DemoteHeaders = Table.DemoteHeaders(T3Matrix2),
T3_TransposedTable = Table.Transpose(T3_DemoteHeaders),
T3_PromotedHeaders = Table.PromoteHeaders(T3_TransposedTable, [PromoteAllScalars=true]),
T3_RenamedColumns = Table.RenameColumns(T3_PromotedHeaders,{{"Group", "RoleID"}}),
T3_Unpivoted = Table.UnpivotOtherColumns(T3_RenamedColumns, {"TypeLVL2", "RoleID"}, "Group", "Value"),
T2_SelfMerge_T3 = Table.NestedJoin(T2_Unpivoted, {"RoleID"}, T3_Unpivoted, {"RoleID"}, "T3_Unpivoted", JoinKind.LeftOuter),
T2_ExpandedT3_Unpivoted = Table.ExpandTableColumn(T2_SelfMerge_T3, "T3_Unpivoted", {"Group", "TypeLVL2", "Value"}, {"T2Group", "T2TypeLVL2", "T2Value"}),
T2_FilteredRA = Table.SelectRows(T2_ExpandedT3_Unpivoted, each ([Value] = "RA")),
StepBackToT1 = T1Main,
SelfMerge_T1_T2 = Table.NestedJoin(StepBackToT1, {"Type"}, T2Matrix1, {"Type"}, "T2", JoinKind.LeftOuter),
AddedIndex = Table.AddIndexColumn(SelfMerge_T1_T2, "Index", 0, 1, Int64.Type),
ExpandedT2 = Table.ExpandTableColumn(AddedIndex, "T2", {"Single/Multi"}, {"Single/Multi"}),
SelfMergeT2_Single = Table.NestedJoin(ExpandedT2, {"Group", "Type"}, T2_FilteredRA, {"T2Group", "Type"}, "T2_Single", JoinKind.LeftOuter),
SelfMergeT2_Multi = Table.NestedJoin(SelfMergeT2_Single, {"Group", "Type", "TypeLVL2"}, T2_FilteredRA, {"T2Group", "Type", "T2TypeLVL2"}, "T2_Multi", JoinKind.LeftOuter),
ExpandedT2_Multi = Table.ExpandTableColumn(SelfMergeT2_Multi, "T2_Multi", {"T2Value"}, {"T2Value"}),
SortedRows = Table.Sort(ExpandedT2_Multi,{{"Index", Order.Ascending}}),
Ad_MainRoleID = Table.AddColumn(SortedRows, "MainRole_ID", each if [T2Value] <> null then [T2Value] else Table.First([T2_Single])[T2Value], type text),
RemovedOtherColumns = Table.SelectColumns(Ad_MainRoleID,{"ID", "Group", "Type", "TypeLVL2", "Single/Multi", "MainRole_ID"})
in
RemovedOtherColumns