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

丹尼尔·金

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

亚历克西斯·奥尔森(Alexis Olson)

首先,您要按照建议的方式进行操作,然后将状态表修改为具有开始日期和停止日期,而不是Status Change Date您可以通过排序,建立索引和自合并来实现此目的,正如我之前在此处此处所解释的那样

有了后,您可以在每行中加载状态表的副本,并使用UserDate列来过滤该表,最后返回的单个值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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章