Контекст у формулах DAX

Увага! : Цю статтю перекладено за допомогою служби машинного перекладу; див. застереження. Версію цієї статті англійською мовою див. тут для отримання довідки.

Контекст дає змогу проводити динамічний аналіз, за якого результати формули можуть змінюватися залежно від виділеного рядка або клітинки, а також будь-яких пов’язаних даних. Розуміння й ефективне використання контексту дуже важливі для побудови високопродуктивних формул, динамічного аналізу, пошуку та виправлення помилок у формулах.

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

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

Розуміння контексту

Формули в Power Pivot можуть впливати фільтри, застосовані до зведеної таблиці, за зв'язки між таблицями а фільтри, які використовуються у формулах. Контекст є те, що дає змогу виконувати динамічного аналізу. Розуміння контексту важливо для стандартного та виправлення неполадок із формулами.

Існують різні типи контексту: контекст рядка, контекст запиту та контекст фільтра.

Контекст рядка можна вважати «виділеним рядком». Якщо було створено обчислюваний стовпець, контекст рядка складається зі значень у кожному окремому рядку та значень у стовпцях, які пов’язані з виділеним рядком. Також існують деякі функції (Функція EARLIER та Функція EARLIEST), які отримують значення із виділеного рядка, а потім використовуються це значення при виконанні операції для всієї таблиці.

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

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

На початок сторінки

Контекст рядка

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

Наприклад, створено обчислюваний стовпець, = [Вартість доставки] + [Податок],

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

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

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

= [Вартість доставки] + RELATED('Region'[TaxRate])

Ця формула просто повертає податкову ставку для поточного регіону з таблиці «Регіон». Не потрібно знати або вказувати ключ, який поєднує таблиці.

Контекст декількох рядків

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

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

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

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

=Maxx(Filter(Sales,[ProdKey]=EARLIER([ProdKey])),Sales[OrderQty])

Детальне покрокове керівництво по цій формулі див. у розділі Функція EARLIER.

Якщо коротко, функція EARLIER зберігає контекст рядка з операції, яка передувала поточній. Функція завжди зберігає в пам’яті два набори контексту: один набір контексту представляє поточний рядок для внутрішнього циклу формули, а інший набір контексту представляє поточний рядок для внутрішнього циклу формули. DAX автоматично формує потік значень між двома циклами, щоб можна було створювати складні агрегати.

На початок сторінки

Контекст запиту

Контекст запиту являє собою підмножину даних, які неявно отримано формула. Під час перетягування міра або інші значення поля в клітинку у зведеній таблиці, ядро Power Pivot вивчає заголовків рядків і стовпців, роздільників і кількість фільтрів звіту для визначення контексту. Потім Power Pivot робить необхідні обчислень для заповнення кожної клітинки зведеної таблиці. Набір даних, які не буде отримано таке контекст запиту для кожної клітинки.

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

Наприклад, припустимо, що було створено просту формулу, яка виконує додавання значень у стовпці прибуток table:=SUM('Sales'[Profit]) продажів .

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

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

У зведеній таблиці можна легко змінити контексті, додаючи або видаляючи заголовки стовпців і рядків і додаючи або видаляючи роздільники. Можна створити формулу, як описано вище, у міру та потім перенесіть її у зведеній таблиці. Будь-коли додати заголовки стовпців або рядків у зведеній таблиці, щоб змінити контекст запиту, у якому обчислюється в міру. Нарізки та фільтрування операції також вплине на контексту. Таким чином, ту саму формулу, що використовуються у зведеній таблиці, обчислений в інший запит контекст для кожної клітинки.

На початок сторінки

Контекст фільтра

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

Наприклад, зведеної таблиці обчислює значення для кожної клітинки, залежно від заголовків рядків і стовпців, як описано в попередньому розділі на контекст запиту. Проте в межах показників або обчислюваних стовпців, які ви додаєте до зведеної таблиці, можна вказати вирази фільтра для керування значеннями, які використовуються у формулі. Можна також вибірково зняти фільтрів певних стовпців.

Докладні відомості щодо створення фільтрів у рамках формул див. у статті Функції фільтрування (DAX).

Приклад очищення фільтрів для створення загальних підсумків див. у розділі Функція ALL.

Приклади вибіркового очищення і застосування фільтрів у формулах див. у розділі Функція ALLEXCEPT.

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

На початок сторінки

Визначення контексту у формулах

Коли створюється формула, у Power Pivot для Excel спершу перевіряється загальний синтаксис, а потім – надані імена стовпців і таблиць у поточному контексті. Якщо надбудові Power Pivot не вдалося знайти стовпці та таблиці, визначені у формулі, повертається помилка.

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

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

Контекст – це потужна концепція, яка також може ускладнити пошук та виправлення помилок у формулах. Рекомендовано починати із простих формул і зв’язків, щоб побачити, як працює контекст, а потім перейти до експериментів із простими формулами у зведених таблицях. У розділі нижче також наведені деякі приклади використання формул у різних типах контекстів для динамічного повернення результатів.

Приклади контексту у формулах

  • Функція RELATED розширює контекст поточного рядка для включення значень у пов’язаному стовпці. Це дозволяє виконувати підстановку. Приклад у цій темі ілюструє взаємодію між контекстом рядка і фільтруванням.

  • Функція FILTER дозволяє визначити рядки, які потрібно включити до поточного контексту. Приклади у цій темі також ілюструють, як вбудовувати фільтри в інші функції, які виконують агрегатну обробку.

  • Функція ALL визначає контекст у формулі. Її можна використовувати для перевизначення фільтрів, які застосовуються для результатів контексту запиту.

  • Функція ALLEXCEPT дозволяє видаляти всі фільтри, крім одного вказаного фільтра. Обидва розділи містять приклади, що демонструють побудову формул та дають розуміння складних контекстів.

  • Функції EARLIER та EARLIEST дозволяють організувати цикл по таблицям з виконанням обчислень, посилаючись на значення внутрішнього циклу. Користувачі, знайомі з поняттям рекурсії, внутрішніми та зовнішніми циклами, належним чином оцінять можливості, які надаються функціями EARLIER та EARLIEST. Користувачі, незнайомі з цими поняттями, можуть ознайомитися з покроковим поясненням у прикладі, щоб побачити, як використовуються внутрішні та зовнішні контексти в обчисленнях.

На початок сторінки

Цілісність зв’язків

У цьому розділі описуються додаткові поняття, що стосуються відсутніх значень у зв’язаних таблицях Power Pivot. Цей розділ може бути корисний, якщо потрібно зрозуміти результати в книгах із кількома таблицями та складними формулами.

Для користувачів, які раніше не стикалися з концепцією реляційних даних, рекомендовано спершу ознайомитися із вступним розділом Огляд зв’язків.

Цілісність зв’язків і зв’язки Power Pivot

Для надбудови Power Pivot не потрібно забезпечувати цілісність зв’язків між двома таблицями, щоб визначити припустимий зв’язок. Натомість на боці "один" кожного зв’язку "один до багатьох" створюється пустий рядок, який використовується, щоб обробляти всі рядки пов’язаної таблиці, для яких не знайдено відповідників. Це працює як зовнішнє з’єднання SQL.

У зведених таблицях при створенні груп стороною зв’язку «один», будь-які невідповідні дані зі сторони зв’язку«багато» буде згруповано разом і включено до підсумкових даних із пустим рядком заголовка. Пустий заголовок приблизно відповідає «невідомому елементу».

Докладніше про Невідомий елемент

Поняття невідомого елемента знайоме користувачам, які працювали із багатовимірними системами баз даних, наприклад, SQL Server Analysis Services. Для користувачів, для яких цей термін є новим, у наступному прикладі пояснюється, що таке невідомий елемент, і як він впливає на обчислення.

Припустімо, ви створюєте обчислення, яке підсумовує середньомісячний обсяг продажу для кожної сховища, але стовпця в таблиці продажів відсутнє значення для торговельні партнери. Враховуючи, що торговельні партнери пов'язані таблиці для зберігання » і « продаж , те, що ви очікували відбудеться у формулі? Як слід зведену таблицю групи або відображати продажів, які не пов'язані з наявне сховище?

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

Порівняння обробки пустих значень та пустого рядка

Пусті значення відрізняються від пустих рядків, що додаються для вміщення невідомого елемента. Пусте значення – це особливе значення, яке представляє нулі, пусті рядки або інші відсутні значення. Докладні відомості про пусті значення, а також інші типи даних DAX див. у розділі Типи даних у моделях даних.

На початок сторінки

Примітка : Застереження про машинний переклад: Цю статтю перекладено комп’ютерною системою без втручання людини. Корпорація Майкрософт пропонує таку послугу, щоб іншомовні користувачі могли дізнаватися про продукти, служби й технології Microsoft. Оскільки статтю перекладено за допомогою служби машинного перекладу, вона може містити смислові, синтаксичні або граматичні помилки.

Отримуйте нові функції раніше за інших
Приєднайтеся до оцінювачів Office

Ця інформація корисна?

Дякуємо за ваш відгук!

Дякуємо за відгук! Схоже, вам може стати в нагоді допомога одного з наших спеціалістів служби підтримки Office, з яким ми вас можемо з’єднати.

×