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。
数据是一系列嵌套层次结构。循环内是子记录。数据是组件和子组件的列表。子组件本身可能有子组件。
循环的顶部是这些嵌套子记录的父记录。这些循环可以相互嵌套。
数据集已排序,因此记录顺序正确。
下面是缩进分层文本文件的屏幕截图。
基本上需要确定每个循环的顶层,以便我可以从中获取其他列信息以与嵌套的子值进行比较。嵌套的子属性应该与父属性相同。我需要检查是否是这种情况。
我没有要显示的代码。不确定如何进行。 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。