Функція DAX CALCULATETABLE проти FILTER

Обидваіце потужні інструменти для обробки та аналізу даних у запиті DAX, але вони мають деякі ключові відмінності, які важливо розуміти.

У цьому блозі ми розглянемо функцію CALCULATETABLE та її , а також зрозуміємо, чим вона відрізняється від функції FILTER . Зрештою ви краще зрозумієте, як вибрати правильну функцію для ваших потреб аналізу даних.

Для демонстрації ми використаємо наведений нижче код DAX.

Функція DAX CALCULATETABLE проти FILTER

Коли ви запустите цей код, ви отримаєте таблицю, у якій буде показано бренд і колір.

Функція DAX CALCULATETABLE проти FILTER

На вкладці Плани запитів ви отримаєте код, що відповідає оператору CrossApply у .

Функція DAX CALCULATETABLE проти FILTER

У той же час ви бачите, що код лише отримує колір і бренд продукту на вкладці «Таймінг сервера» .

Функція DAX CALCULATETABLE проти FILTER

Зміст

Результат синхронізації сервера DAX Studio для CALCULATETABLE

Як приклад, давайте відфільтруємо колір продукту, щоб відображати лише червоний та/або чорний.

Це можна зробити за допомогою функції FILTER. Коли ви запускаєте його, часові параметри сервера покажуть, що аргумент FILTER не застосовано до .

Функція DAX CALCULATETABLE проти FILTER

Але якщо ви використовуєте функцію CALCULATETABLE, запит на вкладці «Час сервера» покаже, що результати було відфільтровано за кольором продукту.

Функція DAX CALCULATETABLE проти FILTER

План запиту CALCULATETABLE у DAX Studio

Давайте розглянемо план запиту для кожної функції.

CALCULATETABLE знаходиться в першому рядку плану логічного запиту, оскільки це функція верхнього рівня в коді, а тому не залежить від жодних вимог.

Функція DAX CALCULATETABLE проти FILTER

Коли ви читаєте план запиту функції CALCULATETABLE, ви не починаєте з першого аргументу. Спочатку потрібно зрозуміти контекст фільтра, який використовується. Отже, переходимо до рядка 5.

Ви бачите, що оператору потрібен стовпець кольору товару через застосований фільтр. Потім він сканує цей стовпець і використовує комбінацію фільтра Not IsEmpty , щоб перевірити колір продукту в кожному рядку.

Після підготовки контексту фільтра виконується аргумент.

Оглядаючись назад, якщо ви використовуєте функцію FILTER, ви побачите інший план запиту, тому аргумент CROSSJOIN виконується перед визначенням контексту фільтра.

Функція DAX CALCULATETABLE проти FILTER

Недоліком цього підходу є те, що він не передає умову фільтра в Storage Engine. Ви не зможете використовувати речення WHERE всередині xmSQL, що ляже важким тягарем на механізм формул.

А коли ви працюєте з кількома таблицями, комбінація фільтрів функції CROSSJOIN буде величезною. Це сповільнює продуктивність коду DAX. Тому в більшості випадків рекомендується використовувати функцію CALCULATETABLE.

Таким чином, замість того, щоб виконувати всі обчислення в механізмі формул, ви можете додати умову фільтра всередину класу WHERE коду XMSQL.

Перехід контексту для подібних функцій DAX

Таймінг сервера

Ця концепція також застосовна до функції CALCULATE. Давайте використаємо наведений нижче код DAX як приклад.

Функція DAX CALCULATETABLE проти FILTER

Міра автоматично має функцію CALCULATE навколо неї.

Коли ви запустите цей код, ви отримаєте таблицю, яка показує загальну суму продажів для кожного кольору.

Функція DAX CALCULATETABLE проти FILTER

На вкладці Server Timings ви можете побачити, що код виконує два запити. Перший запит обчислює суму обсягу продажів із таблиці продажів відносно таблиці продуктів.

Функція DAX CALCULATETABLE проти FILTER

З іншого боку, другий запит знову отримує колір продукту з таблиці «Товари». Це відповідає функції в коді DAX.

Функція DAX CALCULATETABLE проти FILTER

Formula Engine розміщує кеші даних двох запитів поруч. Він починається з отримання значень із другого кешу даних, а потім виконує пошук у першому кеші даних.

План запиту

На вкладці План запиту логічний план запиту сканує колір продукту через аргумент.

Потім VertiPaq підсумовує загальну суму продажів залежно від кольору продукту. Він виконує перехід контексту, який перетворює значення кольору продукту в еквівалентний контекст фільтра.

Функція DAX CALCULATETABLE проти FILTER

Фільтр, створений контекстним переходом, перетворюється на властивість DependOnCols у плані запиту. Після того як VertiPaq сканує стовпці, необхідні для обчислення загального обсягу продажів, він множить кількість продажів на чисту ціну.

Тоді загальний обсяг продажів повертається як результат у формі типу даних валюти. І, нарешті, ADDCOLUMNS повертає таблицю з двома стовпцями, що містять колір і загальну суму продажів.

Висновок

План запиту може мати значний вплив на продуктивність запиту, оскільки різні плани запиту можуть мати різні рівні ефективності.

Під час використання функцій CALCULATETABLE і FILTER у запиті DAX план запиту може відрізнятися залежно від конкретного сценарію та ряду факторів, наприклад використовуваного конкретного виразу формули та можливостей механізму запитів.

Загалом доцільно протестувати та порівняти продуктивність різних планів запитів, щоб визначити найефективніший підхід для певного сценарію.

Все найкраще,


Змініть формати дати за допомогою редактора Power Query

Змініть формати дати за допомогою редактора Power Query

У цьому посібнику ви дізнаєтеся, як перетворити текст у формат дати за допомогою редактора Power Query в LuckyTemplates.

Power Query: об’єднайте файли з кількох папок

Power Query: об’єднайте файли з кількох папок

Дізнайтеся, як об’єднати файли з кількох папок у мережі, робочому столі, OneDrive або SharePoint за допомогою Power Query.

Обчисліть місячне ковзне середнє з початку року (з початку року) у LuckyTemplates

Обчисліть місячне ковзне середнє з початку року (з початку року) у LuckyTemplates

Цей підручник пояснює, як обчислити місячне ковзне середнє на базі даних з початку року за допомогою функцій AVERAGEX, TOTALYTD та FILTER у LuckyTemplates.

Створення таблиці дат у LuckyTemplates

Створення таблиці дат у LuckyTemplates

Дізнайтеся, чому важлива спеціальна таблиця дат у LuckyTemplates, і вивчіть найшвидший і найефективніший спосіб це зробити.

Мобільні звіти LuckyTemplates. Поради та методи

Мобільні звіти LuckyTemplates. Поради та методи

У цьому короткому посібнику розповідається про функцію мобільних звітів LuckyTemplates. Я збираюся показати вам, як ви можете ефективно створювати звіти для мобільних пристроїв.

Звіти про професійну аналітику послуг у LuckyTemplates

Звіти про професійну аналітику послуг у LuckyTemplates

У цій презентації LuckyTemplates ми розглянемо звіти, що демонструють професійну аналітику послуг від фірми, яка має кілька контрактів і залучених клієнтів.

Оновлення Microsoft Power Platform | Microsoft Ignite 2021

Оновлення Microsoft Power Platform | Microsoft Ignite 2021

Ознайомтеся з основними оновленнями для Power Apps і Power Automate, а також їх перевагами та наслідками для Microsoft Power Platform.

Загальні функції SQL: огляд

Загальні функції SQL: огляд

Відкрийте для себе деякі поширені функції SQL, які ми можемо використовувати, наприклад String, Date і деякі розширені функції для обробки та маніпулювання даними.

Створення шаблону LuckyTemplates: керівництво та поради

Створення шаблону LuckyTemplates: керівництво та поради

У цьому підручнику ви дізнаєтеся, як створити свій ідеальний шаблон LuckyTemplates, налаштований відповідно до ваших потреб і вподобань.

Параметри полів і малі кратні в LuckyTemplates

Параметри полів і малі кратні в LuckyTemplates

У цьому блозі ми продемонструємо, як шарувати параметри поля з малими кратними, щоб створити неймовірно корисну інформацію та візуальні ефекти.