一个PowerQuery中的自定义列如何引用另一个PowerQuery

时间:2017-07-19 12:17:05

标签: excel powerquery excel-2016

我希望在第二个电源查询中创建自定义列时使用来自一个电源查询的数据,但不知道如何操作(或者如果我以错误的方式进行此操作)。

我有一个查询(QueryOne),它最终返回一个整数列(DataValue)和一个datetime列(DateOfCompletion)。然后我有第二个查询(QueryTwo),它有一个PeriodName,StartDate和EndDate。我所追求的是,​​在第二个查询上有一个计算列,它是QueryOne.DataValue的总和,其中QueryOne.DateOfCompletion位于QueryTwo.StartDate和QueryTwo.EndDate之间。 (所以我得到PeriodName完成的项目的DataValue)

在QueryTwo上创建自定义列时,我似乎无法引用QueryOne;这是可能的,还是有一种组合该形式数据的标准方法?

2 个答案:

答案 0 :(得分:2)

这里一个方式......

如果我以QueryOne开头:

enter image description here

这就是QueryTwo:

enter image description here

我可以使用以下代码获得此结果:

enter image description here

这是M代码:

let
Source = QueryTwoSource,
#"Added Custom" = Table.AddColumn(Source, "QueryOne", each QueryOne),
#"Expanded QueryOne" = Table.ExpandTableColumn(#"Added Custom", "QueryOne", {"DateValue", "DateOfCompletion"}, {"QueryOne.DateValue", "QueryOne.DateOfCompletion"}),
#"Added Custom1" = Table.AddColumn(#"Expanded QueryOne", "Custom", each if ([QueryOne.DateOfCompletion] >= [StartDate]) and ([QueryOne.DateOfCompletion] <= [EndDate]) then "True" else "False"),
#"Renamed Columns" = Table.RenameColumns(#"Added Custom1",{{"Custom", "WithinPeriod"}}),
#"Grouped Rows" = Table.Group(#"Renamed Columns", {"PeriodName", "WithinPeriod"}, {{"CountWithinPeriod", each Table.RowCount(_), type number}, {"SumOfDateValuesWithinPeriod", each List.Sum([QueryOne.DateValue]), type number}, {"AllData", each _, type table}}),
#"Filtered Rows" = Table.SelectRows(#"Grouped Rows", each ([WithinPeriod] = "True")),
#"Expanded AllData" = Table.ExpandTableColumn(#"Filtered Rows", "AllData", {"QueryOne.DateValue", "QueryOne.DateOfCompletion"}, {"QueryOne.DateValue", "QueryOne.DateOfCompletion"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded AllData",{"WithinPeriod"})
in
#"Removed Columns"

P.S。上面代码中的Source只是电子表格表的另一个查询,它包含三列:PeriodName,StartDate和EndDate。 ...类似于QueryOne是如何查询具有DateValue和DateOfCompletion列的电子表格表。所以,基本上,Source = QueryTwoSource是我如何获得QueryTwo,如上图所示。我可以直接使用电子表格表作为QueryTwo的源代码,但这就是我的做法。

答案 1 :(得分:0)

两个表的行数是否相同?如果添加索引列,则可以引用QueryOne行,然后引用该列。例如,如果您的索引列名为Index,则QueryOne{Index}[DataValue]将访问该行DataValue列中的值。

通常,您可以使用查询的名称在自定义列公式中访问其值。 QueryOne将为您提供QueryOne中的表格。如果您的查询名称中包含空格或其他特殊字符,例如Query One,那么#"Query One"将获得其值。