我有一个父表和一个子表。父表仅列出属性范围。我想合并这两个来创建一个合适的层次结构,但我需要一种方法来首先按父范围过滤子表,我相信。
以下是父表的示例:
parent_item start_attribute end_attribute
A 10 120
B 130 130
C 140 200
和子表:
child_item child_attribute
U 10
V 50
W 60
X 130
Y 140
Z 150
我要找的输出表是这样的:
parent_item child_item
A U
A V
A W
B X
C Y
C Z
为了进一步混淆事物,属性是字母数字,这消除了使用我相信的List.Generate()函数。我想我正在寻找类似于DAX中的EARLIER()函数的东西,但我不确定我是否正在以正确的方式看待这个问题。这是我的伪代码,因为我看到它正常工作:
Table.AddColumn(
#"parent_table",
"child_item",
each
Table.SelectRows(
child_table,
each ([child_attribute] <= EARLIER(end_attribute) and [child_attribute]>= EARLIER(start_attribute) )
)
)
这是一种简化,因为子表实际上包含五个属性,而父表包含五个相应的属性范围。
答案 0 :(得分:1)
一种可能的方法是进行完全交叉连接,然后过滤掉你不想要的行。
答案 1 :(得分:1)
我找到了this blog post,它掌握了引用当前行环境的关键。主要内容是:
每个都是创建简单函数的关键字。 每个是
(_) =>
的缩写,其中下划线表示(如果您在表格环境中,就像我们一样)当前行。
为C
使用新功能child_table
,我们可以写
= Table.AddColumn(#"parent_table", "child_table", each
Table.SelectRows(Child, (C) =>
C[child_attribute] >= [start_attribute] and
C[child_attribute] <= [end_attribute]))
或更明确地作为
= Table.AddColumn(#"parent_table", "child_table", (P) =>
Table.SelectRows(Child, (C) =>
C[child_attribute] >= P[start_attribute] and
C[child_attribute] <= P[end_attribute]))
添加此列后,只需展开新child_item
列中的child_table
列。