Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 SSAS Tabular DAX CROSSFILTER скорость работы без/с фильтрами таблицы с фактами  [new]
100ts
Member

Откуда:
Сообщений: 23
добрый день!

вот эта мера работает быстро

EVALUATE
ROW (
"MyResult", CALCULATE (
DISTINCTCOUNT ( 'ClientProduct'[Client_ID] ),
CROSSFILTER ( 'Fact'[Product_ID], ClientProduct[Product_ID], BOTH )
)
)

а вот эта медленно? та, что выше и не нужна в таком чистом виде, нужно, чтобы считалось не по всей таблице фактов
буду признателен, если кто-то сталкивался, или как решал подобные задачи

DEFINE
VAR HelpTest =
CALCULATETABLE (
'Fact',
'VidOfSum'[VidOfSumID] = 1,
'Fact'[FlagSumValNotNull] = 2,
FIRSTDATE ( 'Calendar'[Date] )
)
EVALUATE
ROW (
"MyResult", CALCULATE (
CALCULATE (
DISTINCTCOUNT ( 'ClientProduct'[Client_ID] ),
CROSSFILTER ( 'Fact'[Product_ID], ClientProduct[Product_ID], BOTH )
),
HelpTest
)
)
29 ноя 17, 09:25    [20990530]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Tabular DAX CROSSFILTER скорость работы без/с фильтрами таблицы с фактами  [new]
IDVT
Member

Откуда:
Сообщений: 230
EVALUATE
ROW ( "MyResult"
    , CALCULATE ( DISTINCTCOUNT ( 'ClientProduct'[Client_ID] )
                , CROSSFILTER ( 'Fact'[Product_ID]
                              , ClientProduct[Product_ID]
                              , BOTH )
                , 'VidOfSum'[VidOfSumID] = 1
                , 'Fact'[FlagSumValNotNull] = 2
                , FIRSTDATE ( 'Calendar'[Date] )
                ))
могу в синтаксисе ошибаться, но суть понятна.
29 ноя 17, 11:15    [20991039]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Tabular DAX CROSSFILTER скорость работы без/с фильтрами таблицы с фактами  [new]
100ts
Member

Откуда:
Сообщений: 23
IDVT,

вот с этой мерой сравниваю, так по старинке делал
EVALUATE
ROW (
"MyResults", CALCULATE (
DISTINCTCOUNT ( 'ClientProduct'[Client_ID] ),
CALCULATETABLE (
'Fact',
'VidOfSum'[VidOfSumID] = 1,
'Fact'[FlagSumValNotNull] = 2,
FIRSTDATE ( 'Calendar'[Date] )
)
)
)

и проверяю через DAX Studio

ваш подход дает лучше результаты, а я упершись в старинку никогда бы не стал писать фильтры просто, как вы
к вашему варианту только два калькулейта сделал: внешний фильтрует, потом внутренний кроссит

спасибо вам большое-большое!!! сделали мой день!!!
с уважением!
29 ноя 17, 11:42    [20991147]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Tabular DAX CROSSFILTER скорость работы без/с фильтрами таблицы с фактами  [new]
IDVT
Member

Откуда:
Сообщений: 230
Calculate( [expression / measure]
             , 'Customers'[Title] = "Пупкин")


Фильтр будет оцениваться первым, все выражение будет выполнено именно так:

Calculate( [expression / measure]
             , Filter( All( 'Customers')
                      , 'Customers'[Title] = "Пупкин"))

а у Вас два расчета (Calculate), отсюда и стоимость не лучшая, все дело в оценке контекста, лучше откажитесь от своей привычки.
Об этом есть отлична статью у Руссо на SQLBI.... там же прочтите про оценку фильтра (порядок действий движка).
29 ноя 17, 12:23    [20991336]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить