合并多行日期上的查询匹配

时间:2019-04-09 18:45:52

标签: powerbi powerquery m

我正在尝试在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中,如何获取合并的查询结果?

1 个答案:

答案 0 :(得分:0)

首先,您要按照建议的方式进行操作,并修改状态表,使其具有开始和结束日期,而不是Status Change Date。您可以通过排序,建立索引和自合并来实现此目的,如我先前所解释的herehere

一旦有了,就可以在每行中加载状态表的副本,并使用UserDate列来过滤该表,最后为{{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进行匹配,并且UserDate和{{1}之间}。从该过滤表中,选择Start列,它是列表数据类型,因此我们选择列表的第一个元素以获取列表中唯一成员的文本值。