Всем доброго дня, прошу прощения - забыл про данный кейс, но лучше отписаться поздно чем, никогда.
Сразу по выводам:
1. Модель данных оригинально файла построена корректно, связи настроены правильно. Таблица фактов 134 тыс. строк, справочник артикулов около 100 тыс. строк.
2. Подтверждаю, сводная таблица в Эксель (у меня 2016) при детализации до уровня артикулов (143 тыс строк в сводной) без переменной отрабатывает 4 сек., а с переменной 38 сек!
Сравнивал следующие меры:
Код |
---|
DateYSD =CALCULATE([Приход_шт]-[Продано_шт];DATESYTD('ТаблКалендарь'[Дата])) |
Код |
---|
DateYSD (var)=var Result = CALCULATE([Приход_шт]-[Продано_шт];DATESYTD('ТаблКалендарь'[Дата]))
return Result |
Я удивлен!
Анализ в DAX-studio ничего не дал: меры отрабатывают на данном объеме +- одинаково. SQL-запросы формируются одинаково в обеих мерах (если кто не знал, то меры DAX преобразовываются в SQL-запросы для вычисления). Есть у меня подозрение, что на самом деле такое поведение переменных в Эксель типично! Дело в том, что если результирующая сводная на выходе не большая (по ощущению не более 10 тыс. строк) то меры с переменной и без отрабатывают одинаково - хватает оперативки видимо. А если сводная на выходе большая, то меры с переменной начинают тормозить. Я не спец, как под капотом движок отрабатывает, но видимо внутри вычисления с переменными и без идут по разному. Хотел протестить данную модель данных в PBI в матрице - не получилось, потому что матрица и таблица PBI не выдает весь результат сразу (как сводная в эксель) и подгружает данные при скроллинге результирующей таблицы. ИТОГО: меры с переменными при больших массивах результирующей таблицы могут работать медленнее (не путать с с массивами исходных данных). Почему так происходит - у меня, к сожалению, ответа нет.