首页 > 解决方案 > DAX 中 date1 和 date2 (Sql) 之间的 dateX 右连接

问题描述

在 sql server 中,我可以通过在日期时间字段上正确连接我的两个表来创建视图。我想知道如何使用 DAX 创建相同的视图(表)。我在创建视图时使用的 Select 语句:

SELECT 
T1.identifier_value,
T1.Start_DateTime,
T1.End_DateTime,
T2.[DateTime],
T2.[hour]
FROM
Table1 T1 WITH (NOLOCK)
right join Table2 T2 WITH (NOLOCK) on T2.[DateTime] between T1.Start_DateTime and T1.End_DateTime

结果如下表(本例中 FakeID 对应一个 ID,因此这里的所有记录都具有相同的 ID):

在 SQL 中创建的视图示例

我尝试在 DAX 中使用 NATURALLEFTOUTERJOIN 并使用以下表达式反转表(尝试模拟右连接):

=NATURALLEFTOUTERJOIN(
    SELECTCOLUMNS(
        Table2;
            "DateTime";'Table2'[DateTime];
            "hour"; 'Table2'[hour]
        );
    SELECTCOLUMNS(
        'Table1;
            "Identifier_value"; 'Table1'[identifier_value];
             "Start_DateTime"; 'Table1'[Start_DateTime];
            "End_DateTime"; 'Table1'[End_DateTime]
    )
)

正如预期的那样,这不起作用,因为没有公共连接列。

有没有办法使用 DAX 执行此连接?我对 DAX 很陌生,所以如果我做错了什么,请告诉我。

标签: sqldax

解决方案


这最好通过 SQL 查询加载到模型中,但如果必须在 DAX 中完成,那么我相信唯一可行的方法是交叉连接和过滤器,这对于大量行来说会变得非常慢。

Table =
FILTER(
    CROSSJOIN(
        SELECTCOLUMNS(
            Table2;
                "DateTime";'Table2'[DateTime];
                "hour"; 'Table2'[hour]
            ),
        SELECTCOLUMNS(
            'Table1;
                "Identifier_value"; 'Table1'[identifier_value];
                 "Start_DateTime"; 'Table1'[Start_DateTime];
                "End_DateTime"; 'Table1'[End_DateTime]
        )
    ),
    'Table2'[DateTime] >= 'Table1'[Start_DateTime] &&
    'Table2'[DateTime] <= 'Table1'[End_DateTime]
)

推荐阅读