在DAX中的date1和date2(Sql)之间的dateX上右连接

时间:2019-11-11 10:07:25

标签: sql dax

在sql server中,我可以通过在datetime字段上右联接我的两个表来创建视图。我想知道如何使用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):

Example of the view created in 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还是很陌生,所以如果我做错了什么严重的事情,请告诉我。

1 个答案:

答案 0 :(得分:1)

最好通过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]
)