2014-11-04 7 views
0

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

Это (довольно стандартная) модель: FactData --- > Счет < --- AccountCustomerM2M ---> Клиент

Пример 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]) 
) 

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

ответ

2

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

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

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

Marco

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^