Home
» Power BI
»
Функція DAX COLUMNSTATISTICS у LuckyTemplates
Функція DAX COLUMNSTATISTICS у LuckyTemplates
Я хотів би продовжити вивчення динамічного використання функції DAX COLUMNSTATISTICS() – нової, майже повністю незадокументованої функції DAX, доданої до LuckyTemplates у серпні 2021 року, яка має деякі дуже унікальні аспекти, з якими, на мою думку, буде дуже цікаво познайомитися. Ви можете переглянути повне відео цього підручника внизу цього блогу.
Я провів багато експериментів і дізнався деякі дійсно цікаві речі про те, як працює ця функція та що ви можете з нею робити. У моєму першому блозі про цю функцію я розповідав про деякі статичні використання. Сьогодні я розповім про дуже дивовижні динамічні способи використання функції, які навіть IntelliSense ще не оновлені.
Для кожної таблиці та поля у вашій моделі даних COLUMNSTATISTICS створює таблицю з шести додаткових полів із назвою таблиці, назвою стовпця, мінімальними та максимальними значеннями для стовпця, кількістю елементів і максимальною довжиною. Здається, що даних небагато, але з ними можна багато чого зробити.
Дані, якими я зараз користуюся, є лише практичним набором даних для зовнішніх інструментів LuckyTemplates. Це відносно проста модель даних із п’ятьма таблицями вимірів, таблицею фактів і a. Таку модель не так вже й важко відслідковувати, але складна модель потребує набагато складнішого моніторингу набору даних.
Метадані для складного набору даних стають набагато важливішими з точки зору кардинальності, тобто кількості унікальних значень у полі. Це має великий вплив на розмір вашої моделі, а також потенційно на швидкість обробки.
Крім того, коли ви будуєте модель, це допомагає знати не лише кількість таблиць, але й діапазон дат цих таблиць. Створюючи таблицю дат, ви переконаєтесь, що охоплюєте весь діапазон даних у своїй таблиці фактів.
Отже, для цього прикладу давайте спробуємо додати таблицю до цієї моделі даних, над якою я працюю. У Power Query ми підемо New Source , а потім Blank Query . Потім ми зайдемо в розширений редактор і просто вставимо функцію під назвою List.Dates . Ми збираємося використати це, щоб створити таблицю потужності 10 000, тож це 10 000 унікальних дат.
Він поверне список із 10 000 елементів, і ми можемо просто перетворити його на таблицю, а потім перейменувати цю таблицю.
Ми можемо змінити поле тут до дати. І якщо ми натиснемо «Закрити та застосувати», ми побачимо, що наш інтелектуальний наратив оновлюватиметься динамічно, без необхідності оновлювати всю модель (як ми це робили в минулому).
Причина, чому це повністю динамічно, полягає в тому, що ми робимо все це за допомогою заходів. Цікаво те, що він показує багато помилок, і ця функція настільки нова, що IntelliSense не вловлює її належним чином, але насправді вона працює.
Давайте заглянемо в табличний редактор 3, який, на мою думку, є найкращим способом зрозуміти, що насправді роблять складні показники DAX.
Пам’ятайте, що запит DAX повертає таблиці, а не масштабувальники. Отже, якщо ми візьмемо цю міру і скопіюємо це в a, він показує помилку, оскільки результат тут все ще є масштабувальником. Ми можемо використати підхід до налагодження, замінивши цей результат RETURN окремими компонентами міри.
У цьому випадку ми замінимо його на ColStats , що ми зробили вгорі, просто помістивши COLUMNSTATISTICSу змінну. Завдяки цьому ми отримуємо саме те, що очікуємо, а саме стандартну таблицю статистики стовпців.
А тепер ми хочемо просто поглянути на стовпець «Назва таблиці», і ми хочемо взяти з нього окремі значення та підрахувати їх. Це буде кількість таблиць у нашій моделі даних.
Спочатку ми виберемо стовпці в нашій таблиці ColStats і просто повернемо це поле імені таблиці. Як правило, у вимірюванні DAX або запиті DAX потрібно повернути ім’я поля з назвою таблиці перед ним. Але в цьому випадку ми не знаємо, на що посилається відповідна назва таблиці, оскільки вона існує лише віртуально. Здається, ім’я змінної не приймається як ім’я таблиці.
Тож у цьому випадку ми маємо залишитися на тому, що виглядає як міра, але насправді це посилання на стовпець без посилання на таблицю перед ним. І це все ще працює, хоча це заплутано в номенклатурі. Тепер, якщо ми замінимо цей оператор RETURN нашим TabCol , ми отримаємо саме те, що ми очікуємо, а саме це поле таблиці моделі.
А потім для результату ми просто підраховуємо окремі стовпці таблиці. Отже, якщо ми замінимо це на DISTINCT(TabsCol) , ми отримаємо наші сім таблиць.
Тепер давайте подивимось на найвищу потужність у таблиці найвищої потужності та побачимо, як ми її отримали. Насправді це важливий шаблон, який можна використовувати для багатьох різних речей, де ви шукаєте, не лише максимальне число, але й максимальний атрибут, пов’язаний із цим числом.
Отже, давайте подивимося на MaxCardinality . Незважаючи на те, що це масштабувальник, ми можемо перетворити його на таблицю з однією коміркою, просто поставивши її в дужки. І якщо ми досягнемо п’яти, ми побачимо, що це кардинальність 10 000.
Тож питання полягає в тому, як ми візьмемо це та повернумо таблицю, пов’язану з цією потужністю.
Для цього ми використовуємо цей дуже поширений шаблон. Потім ми копіюємо його в наш оператор RETURN, і він дасть нам рядок, який ми очікували отримати, тобто стовпець 10 000 дат. Замість того, щоб отримати один рядок (оскільки це TOPN), ми отримуємо два, оскільки є нічия.
ColStats також створює для кожної таблиці індекс у прихованому рядку індексу під назвою RowNumber , який є унікальним ідентифікатором для кожного рядка таблиці. Таким чином, MaxCardinality завжди віддзеркалюватиметься RowNumber, якщо це унікальний ідентифікатор.
Отже, насправді неважливо, що ми маємо два рядки, тому що ми дивимося на максимальне значення імені таблиці. І цей максимум існує лише для того, щоб повернути певне значення, інакше це був би просто голий стовпець. Але нам потрібно застосувати деяке агрегування навколо цього, і в цьому випадку ми використовуємо.
Потім, якщо ми розмістимо MaxCardinality у нашому операторі RETURN і помістимо його в дужки, щоб повернути таблицю, а не масштабувальник, він поверне значення Test.
Цей шаблон TOPN DAX є дійсно хорошим шаблоном для запам’ятовування, коли ви хочете визначити максимальне або мінімальне значення, а потім повернути атрибут, пов’язаний із цим мінімальним або максимальним.
Висновок
Я надав вам загальний підхід і контекст, які ми можемо використовувати для того, щоб ви якнайкраще використовували функцію DAX COLUMNSTATISTICS у динамічний спосіб. Маючи можливість динамічно відслідковувати це в рамках складної моделі, я вважаю, що ця функція має величезну цінність.
Чим більше ми будемо експериментувати з функцією COLUMNSTATISTICS та її здатністю динамічно обробляти метадані в DAX, я думаю, що цікавіші застосування ми знайдемо. Отже, якщо ви вже знайшли кілька цікавих застосувань для цієї функції DAX, повідомте мені про це в коментарях нижче.