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

问题描述 投票:1回答:1

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

powerbi powerquery m
1个回答
0
投票

首先,您希望按照建议执行操作并修改状态表以具有开始和停止日期而不是Status Change Date。你可以通过排序,索引和自我合并来实现这一点,正如我之前解释过的herehere

完成后,您可以在每行中加载状态表的副本,并使用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匹配,DateStartStop之间。从该筛选表中,我们选择Status列,这是列表数据类型,因此我们选择列表的第一个元素来获取列表中唯一成员的文本值。

© www.soinside.com 2019 - 2024. All rights reserved.