在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):
我尝试在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还是很陌生,所以如果我做错了什么严重的事情,请告诉我。
答案 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]
)