Power Query 识别分层嵌套循环中的父记录

Power Query identify parent records in hierarchical nested loops

数据是一系列嵌套层次结构。循环内是子记录。数据是组件和子组件的列表。子组件本身可能有子组件。

循环的顶部是这些嵌套子记录的父记录。这些循环可以相互嵌套。

数据集已排序,因此记录顺序正确。

下面是缩进分层文本文件的屏幕截图。

基本上需要确定每个循环的顶层,以便我可以从中获取其他列信息以与嵌套的子值进行比较。嵌套的子属性应该与父属性相同。我需要检查是否是这种情况。

我没有要显示的代码。不确定如何进行。 Group By 似乎很有前途,但需要找出将层次结构递归备份到当前循环顶部的方法,并将其与其每个子记录相关联,以便我可以比较它们的属性。

示例数据,第一列Index只是行号,第二列Level Number是层级。

行号和层次级别的唯一组合可以标识每个级别的父级 "Index-Level"。我想将此父索引级别与其每个子级别相关联。

数据是文本格式,但会被导入到 Power Query 中进行分析。

Index   Level Number  Parent Index-Level
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
10  10
11  11
12  12
13  13
14  14
15  14
16  14
17  14
18  14
19  14
20  14
21  13
22  13
23  13
24  14
25  14
26  14
27  11
28  9
29  9
30  9
31  9
32  9
33  9
34  9
35  8
36  9
37  10
38  11
39  11
40  12
41  12
42  13
43  13
44  13
45  11
46  12
47  13
48  14
49  14
50  14

我在 Microsoft TechNet 论坛上找到了 answer,虽然 运行 速度非常慢,但它可以满足我的需求。对于 30k 条记录,在 i7 cpu、16 GB RAM、64 位 Excel/Power 查询机器上花费了 30 多分钟才能完成。这是 Power Query 限制。

let
    Source = Excel.CurrentWorkbook(){[Name="Tabelle3"]}[Content],
    ParentIndex = Table.AddColumn(Source, "ParentIndex", each let Index=[Index], LN=[Level Number] in List.Max(Table.SelectRows(Source, each _[Index] < Index and _[Level Number]=LN-1)[Index])),
    #"Merged Queries" = Table.NestedJoin(ParentIndex,{"ParentIndex"},ParentIndex,{"Index"},"NewColumn",JoinKind.LeftOuter),
    #"Expanded NewColumn" = Table.ExpandTableColumn(#"Merged Queries", "NewColumn", {"Level Number"}, {"Level Number.1"})
in
    #"Expanded NewColumn"

如果其他人对克服此性能限制的其他解决方案感兴趣,我是 exploring VBA/ADO SQL 解决方案,但还没有完全实现。

也在考虑将 Python xlWings 用作 potential solution