我正在尝试在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中,如何获得合并的查询结果?
首先,您要按照建议的方式进行操作,然后将状态表修改为具有开始日期和停止日期,而不是Status Change Date
。您可以通过排序,建立索引和自合并来实现此目的,正如我之前在此处和此处所解释的那样。
有了后,您可以在每行中加载状态表的副本,并使用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
列,它是列表数据类型,因此我们选择列表的第一个元素以获取列表中唯一成员的文本值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句