我正在尝试在Power BI Desktop中合并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中,如何获取合并的查询结果?
答案 0 :(得分:0)
首先,您要按照建议的方式进行操作,并修改状态表,使其具有开始和结束日期,而不是Status Change Date
。您可以通过排序,建立索引和自合并来实现此目的,如我先前所解释的here和here。
一旦有了,就可以在每行中加载状态表的副本,并使用User
和Date
列来过滤该表,最后为{{1}返回一个值}。
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
和{{1}之间}。从该过滤表中,选择Start
列,它是列表数据类型,因此我们选择列表的第一个元素以获取列表中唯一成员的文本值。