Страницы: 1
RSS
SELECTCOLUMNS поверх NATURALLEFTOUTERJOIN с разным контекстом, Нужна помощь в DAX
 
Всем привет!

В общем, NATURALLEFTOUTERJOIN объединяет две таблицы, которые строятся из одной и той же, но по разному фильтруются (активациями связей).
Читсый NATURALLEFTOUTERJOIN возвращает корректные данные, но почему то сначала идут столбцы правой таблицы, а потом левой... Это неудобно эстетически (данный запрос представляет строки детализации).

И чтобы упорядочить столбцы как мне надо, я использую дополнительную обертку SELECTCOLUMNS.
Но она меняет результат запроса кардинально, контектс со второй таблицы слетает, и в ее столбцах я вижу ровно теже данные, что и в столбцах левой таблицы!!!
Ниже запрос, пример выложить не могу, так как запрос на сервере SSAS Tabular 2017.
Код
EVALUATE CALCULATETABLE(
    SELECTCOLUMNS(
        NATURALLEFTOUTERJOIN(
            CALCULATETABLE(
                SELECTCOLUMNS('Услуги',
                    "migration_id",RELATED('orders_migrations'[migration_id])+0,
                    "A",RELATED('Наряды'[Слой разовой услуги])
                ),
                USERELATIONSHIP('Наряды'[bi_order_id], orders_migrations[bi_order_id_make]),
                USERELATIONSHIP('Наряды'[bi_order_id],'services'[bi_order_make_num_list])
            ),
            CALCULATETABLE(
                SELECTCOLUMNS('Услуги',
                    "migration_id",RELATED('orders_migrations'[migration_id])+0,
                    "B",RELATED('Наряды'[Слой разовой услуги])
                ),
                USERELATIONSHIP('Наряды'[bi_order_id], orders_migrations[bi_order_id_drop]),
                USERELATIONSHIP('Наряды'[bi_order_id],'services'[bi_order_drop_num_list])
            )
        ),
        "migration_id",[migration_id],
        "A",[A],
        "B",[B],
    ),
    USERELATIONSHIP('Отчетный период'[date],'orders_migrations'[date_make_report])
)

Физический план запроса из DAX Studio
Скрытый текст

Логический план запроса из DAX Studio
Скрытый текст

Выглядит вывод вот так:
Скрытый текст

А без SELECTCOLUMNS выглядит вот так:
Скрытый текст
У кого-нибудь есть идеи как это вылечить?)
Изменено: vetrintsev - 28.06.2019 02:11:16
 
извините, а в чем суть задачи?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
извините, а в чем суть задачи?

Темой ранее мы сделали таблицу, которая из одного реестра событий связывает их в цепочку из двух последовательных событий (бизнес логика - миграция абонентов с одной услуги на другую)

Поле чего эта таблица связывается с первичной таблицей событий неактивными связями (активируя которые я успешно получаю срезы).

Теперь есть мера, которая считает количество миграций (с услуги, на услугу) и надо настроить выражение строк детализации.
Соответственно в деталях надо вывести какая услуга была до миграции, и какая стала после (там на самом деле 10 столбцов слева и 5 справа).

Это обычный джоин, но он не работает...
 
Да вроде работает...
Не, не всегда.
Вот так и правда кашу выдал
Изменено: Максим Зеленский - 28.06.2019 11:43:49
F1 творит чудеса
 
ну вот так у меня работает. Дальше я бы предложил внешний SELECTCOLUMNS всё же вытащить наружу, перед CALCULATETABLE
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
Не, не всегда.
Вот сервер ночью переночевал и утром выдает корректные данные сразу после NATURALLEFTOUTERJOIN. Так потребность в SELECTCOLUMNS отпала сама собой.

Цитата
Максим Зеленский написал:
Дальше я бы предложил внешний SELECTCOLUMNS всё же вытащить наружу
перед публикацией пробовал такой маневр вчера - он не помог.

Цитата
Максим Зеленский написал:
ну вот так у меня работает
по поводу вывода в VAR да, не подумал про такой вариант...

В общем все как-то само заработало, что немного пугает :)
Но это мелочи, все таки результат космический)))
Страницы: 1
Наверх