Power Query在分层嵌套循环中标识父记录

时间:2016-04-11 04:17:31

标签: excel powerquery

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

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

对数据集进行排序,使记录按正确顺序排列。

下面是它如何显示为缩进的分层文本文件的屏幕截图。

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

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

enter image description here

示例数据,第一列索引只是行号,第二列级别号是层次结构级别。

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

数据是文本格式,但会进入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

1 个答案:

答案 0 :(得分:0)

我在Microsoft TechNet论坛上找到了answer,虽然它的运行速度非常慢,但它正在寻找我正在寻找的东西。对于30k记录,在i7 cpu,16 GB RAM,64位Excel / Power Query机器上完成需要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

相关问题