Право присоединиться к dateX между date1 и date2 (Sql) в DAX - PullRequest
0 голосов
/ 11 ноября 2019

На сервере sql я могу создать представление, соединяя две мои таблицы в поле 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 соответствует одному идентификатору, поэтому все записи здесь имеют одинаковый идентификатор):

Example of the view created in SQL

Я пытался использовать NATURALLEFTOUTERJOIN в DAX и реверсировать таблицы (пытаясь смоделировать правое объединение) с помощью следующего выражения:

=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 Ответ

1 голос
/ 11 ноября 2019

Это лучше всего загрузить в модель с помощью 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]
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...