【问题标题】:Right join on dateX between date1 and date2 (Sql) in DAXDAX 中 date1 和 date2 (Sql) 之间的 dateX 右连接
【发布时间】:2019-11-11 10:07:25
【问题描述】:

在 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):

我尝试在 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 很陌生,所以如果我做错了什么,请告诉我。

【问题讨论】:

  • 您的源数据来自哪里?如果您有一个有效的 SQL 查询并且数据在数据库中,那么使用该查询加载到模型中可能会更容易,而不是使用 DAX 再次创建它。
  • 这能回答你的问题吗? DAX JOIN if a value is between two dates
  • @BarneyL 我可以在我的个人数据库中创建视图,但是在某些时候我必须使用我的整个团队工作的数据库。因为我们只需要这种方式的数据来进行特定用途-如果我们宁愿在项目中创建这个表,而不是在数据库中添加一个额外的表。我正在查看您现在发送的链接。
  • 您无需创建新表,只需将查询用作数据源而不是原始表即可。

标签: sql dax


【解决方案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]
)

【讨论】:

  • 我正在尝试通过使用以下电源查询将我的查询用作源:let Source = #"SourceName" #"Target" = Value.NativeQuery(Source, "MyQuery") in #"Target" 但是,它一直说:等待“SourceName”
  • 与此同时,我尝试实现您编写的 DAX,但它使我的 Visual Studio 崩溃(非常多的行,所以您称之为)。因此,我将尝试使用 NativeQuery,或者如果所有其他方法都失败了,最终还是会在公共数据库中实现它。感谢您的帮助!
猜你喜欢
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多