Табличная модель Много 2 Много

Может ли кто-нибудь объяснить мне, что именно происходит за кулисами со следующими двумя запросами? они, похоже, показывают одинаковые результаты, но что «лучше» для фильтрации меры в табличной модели dax по отношению «многие ко многим»...

Вот (довольно стандартная) модель: FactData ---> Account ‹--- AccountCustomerM2M ---> Customer

Пример 1:

SumAmountM2M - v1 :=
IF (
    COUNTROWS ( ALL ( Customers ) ) > 0,
    CALCULATE ( SUM ( 'FactData'[Amount] ), AccountCustomerM2M ),
    SUM ( 'FactData'[Amount] )
)

Пример 2:

SumAmountM2M - v2 :=
IF (
    ISCROSSFILTERED ( 'Customers'[CustomerKey] ),
    CALCULATE ( SUM ( 'FactData'[Amount] ), AccountCustomerM2M ),
    SUM ( 'FactData'[Amount] )
)

Спасибо за вашу помощь! :)


person m1nkeh    schedule 04.11.2014    source источник


Ответы (1)


В примере 1 всегда используется вычисление «многие ко многим» независимо от выбора клиентов, если только таблица «Клиенты» не пуста. Возможно, вы хотели написать ЕСЛИ (СЧЕТЧИКИ (ВСЕ (Клиенты)) > СЧЕТЧИКИ (Клиенты),...

В примере 2 вычисление «многие ко многим» выполняется только в том случае, если у вас есть прямой или косвенный выбор клиентов (например, вы выбрали город клиента в слайсере).

Пример 2 оптимизирует вычисление, поскольку функция ISCROSSFILTERED выполняется только один раз в плане запроса и более оптимизирована, чем подход COUNTROWS, который в сложной итерации может быть более затратным, поскольку выполняется в контексте каждой строки внешней итерации.

Марко

person Marco Russo    schedule 04.11.2014
comment
конечно, да! ;) спасибо за ответ Марко, причина, по которой возник этот вопрос, заключается в том, что в другой части моей модели у меня есть FactData --> DimCustomer ‹-- DimCustomerSecure, и если я заблокирую таблицу DimCustomerSecure с помощью = FALSE(), мне нужно обернуть загрузка мер с разделом COUNTROWS(ALL(DimCustomerSecure)) для того, чтобы фильтрация работала корректно, а точнее игнорировала фильтрацию! Я надеюсь, что команда AS сделает таблицы и столбцы защищаемыми объектами в каком-нибудь будущем выпуске AS. - person m1nkeh; 06.11.2014