Не только результаты, но и способ получения этих результатов для обеих мер не будет одинаковым.
Я создал две меры, аналогичные вашему примеру, чтобы проверить это:
TestAvgNoFilter = CALCULATE([PrcAvg]; cal[ReadDate]=DATE(2018;05;23))
TestAvgFilter = CALCULATE([PrcAvg]; filter(cal; cal[ReadDate]=DATE(2018;05;23)))
Когда я просто выбрасываю их обоих в сводную таблицу без каких-либо дополнительных полей или срезов, конечно, обе они показываюттот же результат:
Однако:
Использование FILTER
оказывает значительное влияние на производительность, что может бытьотчетливо видны планы запросов и использование Storage Engine против Formula Engine.Он создает дополнительную временную таблицу, которая должна ему «взаимодействовать» с уже существующими фильтрами, поступающими из самой таблицы отчета / сводной таблицы (строки, столбцы, слайсеры).Вы ничего не заметите для простого среднего значения в одной ячейке, но если ваша мера [x] сложна и существует много таких «начальных» фильтров, разница во времени расчета может быть огромной.
FILTER
сохраняет и выполняет итерацию с начальным контекстом фильтра, тогда как выражение фильтра, используемое непосредственно в CALCULATE
, игнорирует его.Посмотрите, что произойдет, когда я добавлю ReadDate в сводную таблицу:
Именно поэтому показатель без FILTER
быстрее: ему все равно, какие даты в столбцах - он уже рассчитал одно «истинное» значение, в то время как мера с FILTER
сравнивает себя с исходными фильтрами для каждой строки.
Результаты в обоих столбцах можно считать правильными - все действительно зависит от интерпретации и от того, как вы называете показатели;).
Как правило, я бы советовал вам не использовать FILTER
, когда вам это не нужно.Сохраните его энергию, когда это действительно необходимо.