我正在尝试在Power BI Desktop中合并2个查询,将基于一个查询中的用户和日期列的行与另一个查询中的行匹配,其中用户匹配,第二个查询中的日期是最接近的一个。第一个查询中的日期。
在其他情况下,我需要匹配多个列,我通常会创建一个匹配的复合键,但这里不是直接匹配。
2个查询的示例是:
QUERY1
User Activity Activity Date
User 1 Activity 1 2019-01-24
User 1 Activity 2 2019-03-03
User 1 Activity 3 2019-04-17
QUERY2
User Status Status Change Date
User 1 Status 1 2019-02-05
User 1 Status 2 2019-03-06
User 1 Status 3 2019-04-05
我正在寻找的合并查询是:
合并的查询
User Activity Activity Date Status
User 1 Activity 1 2019-01-24
User 1 Activity 2 2019-03-03 Status 1
User 1 Activity 3 2019-04-17 Status 3
这两个查询都来自REST API。如果它是一个SQL源,我将使用SQL查询基于Query2创建一个包含起始和停止日期的派生岛表,并对Query1进行BETWEEN连接,并将其作为Power BI的源。
在Power Query Editor中,我如何获得合并的查询结果?
首先,您希望按照建议执行操作并修改状态表以具有开始和停止日期而不是Status Change Date
。你可以通过排序,索引和自我合并来实现这一点,正如我之前解释过的here和here。
完成后,您可以在每行中加载状态表的副本,并使用User
和Date
列过滤表,最后返回Status
的单个值。
let
Source = <Query1 Source>
#"Added Custom" =
Table.AddColumn(Source, "Status",
(C) => List.First(
Table.SelectRows(Status,
each [User] = C[User] and
[Start] < C[Date] and
([Stop] = null or C[Date] <= [Stop])
)[Status]
),
type text)
in
#"Added Custom"
这表示我们采用Status
表并过滤它,以便基于当前行User
匹配,Date
在Start
和Stop
之间。从该筛选表中,我们选择Status
列,这是列表数据类型,因此我们选择列表的第一个元素来获取列表中唯一成员的文本值。