如何检查相应的父子列是否被标记为x?

问题描述 投票:0回答:1

我有一个数据表源,其中包含可以为 x 或 null 的各种列。根据层次结构表,我想检查源是否填写正确,如果没有,可能会列出数据不正确的子到父路径。

有效的规则/检查是:如果孩子是 x,则所有父母都必须是 x 如果父母是 x,则至少一个孩子必须是 x

我希望有人能够弄清楚,我想要实现什么。

    source = Table.FromRecords({
        [Name="Jason", A="x", B="x", C="x", D="x", E="x", F="x", G=null, H="x", I=null, J=null, K=null, L="x", M=null],
        [Name="Joe", A="x", B=null, C="x", D=null, E=null, F=null, G="x", H="x", I=null, J=null, K=null, L=null, M="x"],
        [Name="Eddie", A="x", B=null, C="x", D=null, E=null, F="x", G=null, H="x", I=null, J="x", K=null, L=null, M=null],
        [Name="Phil", A=null, B=null, C=null, D="x", E=null, F=null, G=null, H=null, I=null, J=null, K=null, L="x", M=null],
        [Name="Thomas", A="x", B=null, C=null, D=null, E=null, F="x", G="x", H="x", I=null, J=null, K=null, L=null, M=null],
        [Name="David", A="x", B=null, C=null, D=null, E="x", F="x", G=null, H=null, I=null, J=null, K=null, L=null, M=null],
        [Name="Matthew", A=null, B="x", C=null, D=null, E=null, F=null, G=null, H=null, I=null, J=null, K="x", L=null, M=null]
    }),

    hierarchy = Table.FromRecords({
        [Column1 = "A", Hierarchy = {null}],
        [Column1 = "B", Hierarchy = {"A"}],
        [Column1 = "C", Hierarchy = {"A"}],
        [Column1 = "D", Hierarchy = {"A", "C"}],
        [Column1 = "E", Hierarchy = {"A", "C"}],
        [Column1 = "F", Hierarchy = {"A"}],
        [Column1 = "G", Hierarchy = {"A", "F"}],
        [Column1 = "H", Hierarchy = {"A", "F"}],
        [Column1 = "I", Hierarchy = {null}],
        [Column1 = "J", Hierarchy = {"I"}],
        [Column1 = "K", Hierarchy = {"I"}],
        [Column1 = "L", Hierarchy = {"I", "K"}],
        [Column1 = "M", Hierarchy = {"I", "K"}]
    }),

这里是一些手动比较的截图:

enter image description here

excel powerquery hierarchy
1个回答
0
投票

好吧,这一次很有趣,假设这可行(更新 Phil 输入以匹配图像,代码错误)

let source = Table.FromRecords({
    [Name="Jason", A="x", B="x", C="x", D="x", E="x", F="x", G=null, H="x", I=null, J=null, K=null, L="x", M=null],
    [Name="Joe", A="x", B=null, C="x", D=null, E=null, F=null, G="x", H="x", I=null, J=null, K=null, L=null, M="x"],
    [Name="Eddie", A="x", B=null, C="x", D=null, E=null, F="x", G=null, H="x", I=null, J="x", K=null, L=null, M=null],
    [Name="Phil", A=null, B=null, C=null, D="x", E=null, F=null, G=null, H=null, I="x", J=null, K="x", L="x", M=null],
    [Name="Thomas", A="x", B=null, C=null, D=null, E=null, F="x", G="x", H="x", I=null, J=null, K=null, L=null, M=null],
    [Name="David", A="x", B=null, C=null, D=null, E="x", F="x", G=null, H=null, I=null, J=null, K=null, L=null, M=null],
    [Name="Matthew", A=null, B="x", C=null, D=null, E=null, F=null, G=null, H=null, I=null, J=null, K="x", L=null, M=null]
}),
#"Added Index" = Table.AddIndexColumn(source, "Index", 0, 1, Int64.Type),

 hierarchy = Table.FromRecords({
    [Column1 = "A", Hierarchy = {null}],
    [Column1 = "B", Hierarchy = {"A"}],
    [Column1 = "C", Hierarchy = {"A"}],
    [Column1 = "D", Hierarchy = {"A", "C"}],
    [Column1 = "E", Hierarchy = {"A", "C"}],
    [Column1 = "F", Hierarchy = {"A"}],
    [Column1 = "G", Hierarchy = {"A", "F"}],
    [Column1 = "H", Hierarchy = {"A", "F"}],
    [Column1 = "I", Hierarchy = {null}],
    [Column1 = "J", Hierarchy = {"I"}],
    [Column1 = "K", Hierarchy = {"I"}],
    [Column1 = "L", Hierarchy = {"I", "K"}],
    [Column1 = "M", Hierarchy = {"I", "K"}]
}),

#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Added Index", {"Name","Index"}, "Attribute", "Value"),
#"Grouped Rows" = Table.Group(#"Unpivoted Other Columns", {"Name","Index"}, {{"data", each 
    let a = Table.NestedJoin(_, {"Attribute"}, hierarchy, {"Column1"}, "hierarchy", JoinKind.LeftOuter),
    b = Table.ExpandTableColumn(a, "hierarchy", {"Hierarchy"}, {"Hierarchy.1"}),
    c = Table.ExpandListColumn(b, "Hierarchy.1"),
    d = Table.NestedJoin(c, {"Hierarchy.1"}, c, {"Attribute"}, "Expanded Hierarchy.1", JoinKind.LeftOuter),
    e = Table.ExpandTableColumn(d, "Expanded Hierarchy.1", {"Attribute"}, {"Attribute.1"}),
    f = Table.SelectRows(e, each ([Hierarchy.1] <> null) and ([Attribute.1] = null)),
    g= Table.Group(f, {"Name","Attribute"}, {{"Concat", each Text.Combine([Hierarchy.1],","), type text}}),
    h = Table.AddColumn(g, "Custom", each [Attribute]&"->"&[Concat],type text),
    i= Table.Group( h, {"Name"}, {{"Concat", each Text.Combine([Custom],";"), type text}})
in i
, type table }}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "Attribute", each "!Error"),
#"Expanded data" = Table.ExpandTableColumn(#"Added Custom", "data", {"Concat"}, {"Value"}) & #"Unpivoted Other Columns",
#"Sorted Rows2" = Table.Sort(#"Expanded data",{{"Attribute", Order.Ascending}}),
#"Pivoted Column" = Table.Pivot(#"Sorted Rows2", List.Distinct(#"Sorted Rows2"[Attribute]), "Attribute", "Value"),
#"Sorted Rows" = Table.Sort(#"Pivoted Column",{{"Index", Order.Ascending}}),
#"Removed Columns" = Table.RemoveColumns(#"Sorted Rows",{"Index"})

在 #“删除的列”

© www.soinside.com 2019 - 2024. All rights reserved.