Цитата |
---|
surkenny написал: Вроде, SUMMARIZE более производительная функция |
Коллега, а можно показать - на основании чего сделано такое заключение? Сопоставил GROUPBY и SUMMARIZE для получения строкового контекста
Код |
---|
EVALUATE
ADDCOLUMNS(SUMMARIZE('Query1', Query1[DateKey], Query1[StoreKey]), "foo", 1) |
Исходник - типовая база ContosoRetailDW с таблицей dbo.FactOnlineSales c более чем 12,6 миллиона строк. Создаётся таблица на 3288 строк. Типовые результаты выполнения в DAX Studio - разница в пределах погрешности по нескольким стартам.
Я ожидал критику, но не в этой части. Займусь самокритикой
1. Формально не определено что набор полей: Регион; Компания; Отчетный период; Дата отчета; Дата изменения; Продукция - это первичный ключ. Если нет, и существует несколько записей, отличающихся только значением поля Сумма, то в решении
azma будет один результат, у меня другой результат - значение поля Сумма первой попавшейся записи, удовлетворяющей условию отбора. Естественно, можно перепилить и на сумму, получив максимальную дату тем же путём, а уж её использовать в фильтре CALCULATE
2. Если возвращается кодом
Код |
---|
var latestByReportDateAndProduct = CALCULATETABLE(TOPN(1; 'Таблица2'; 'Таблица2'[Дата изменения]; DESC)) |
всегда одна строка, то тогда зачем ею фильтровать входные данные?!
То есть вместо
Код |
---|
Return CALCULATE(SUM('Таблица2'[Сумма]); latestByReportDateAndProduct) |
использовать обработку уже полученной виртуальной таблицы (собственно извлечение данных поля записи)
Код |
---|
Return SUMX(latestByReportDateAndProduct; 'Таблица2'[Сумма]) |