我是 PowerQuery 的新手,我遇到了一个小问题。我在 powerquery 中有两个表,具有以下结构(示例):
表一(型号)
PSET | 参数 | 属性 |
---|---|---|
PSet_Location | PM_大面积&楼层代码 | 7 |
PSet_Location | PM_大面积&楼层说明 | 屋顶 |
表2(规则)
PSET | 参数 | 属性权 | PSET.规则 | 参数.rule | 属性 |
---|---|---|---|---|---|
PSet_Location | PM_大面积&楼层代码 | 99 | PSet_Location | PM_大面积&楼层说明 | 屋顶 |
PSet_Location | PM_大面积&楼层代码 | 7 | PSet_Location | PM_大面积&楼层说明 | 一级 |
PSet_Location | PM_大面积&楼层代码 | 1 | PSet_Location | PM_大面积&楼层说明 | 二级 |
简单来说,第一个表是“建筑物的模型”。 PSET 是一组属性,一组可以有多个参数,一个参数可以有多个值。
第二张表是“规则检查”表。最后三列代表一个“规则”。例如,如果第一个表中存在“PSetLocation”“PMMacroArea&FloorDescription”和“Roof”(第一个条件),则“PSetLocation”“PM*MacroArea&FloorCode”需要具有 99 作为属性(第二个条件)。
*
我想创建一个自定义函数以添加为 Table1 中应用这些检查的新列。如果两个条件都满足,我得到“真”,如果只满足第一个条件,我得到“假”,否则为“空”。在我的示例中,我会在新列的第一行输出“FALSE”,因为存在“PSetLocation”、“PM_MacroArea&FloorDescription”和“Roof”,但我有 7 个而不是 99 个。
我已经使用“PSET”和“Parameter”合并了两个表并扩展了“AttributeRight”“PSET.rule”“Parameter.rule”和“Attribute.rule”并使用了以下函数:
= (Table as table) =>
Table.AddColumn(#"Tabella valutazione", "Verifica regola",
each let
condition1 =
List.Contains(Table.Column(#"Tabella valutazione", "PSET"), [PSET.relazione])
and List.Contains(Table.Column(#"Tabella valutazione", "Parametro"), [Parametro.relazione])
and List.Contains(Table.Column(#"Tabella valutazione", "Attributo"), [Valore.relazione]),
condition2 = [Attributo] = [AttributoCheck]
in
if condition1 and condition2 then
true
else if condition1 then
false
else
null
)
这是我需要的结果示例:
输出是我想要的,但我必须复制我的表然后将其合并回我的第一个表以避免任何循环引用错误并且我的模型变得非常慢(我有数百万行)。总而言之,使用新列的自定义函数似乎是个好主意,但我不知道如何继续!我希望我足够清楚,提前致谢:)