Мова: Українська
Вступ
Усі формули в ActivityInfo обчислюються в певному контексті.
При додаванні обчислюваного поля в ActivityInfo, формули обчислюються в контексті запису. Це означає, що формула обчислюється для кожного запису у формі.
Наприклад, якщо у вас є форма з двома полями кількості «Дівчата» та «Хлопці», ви можете додати обчислюване поле «Всього», яке матиме формулу Girls + Boys.
У цьому випадку формула обчислюється для кожного запису.
| Назва | Дівчата | Хлопці | Дівчата + Хлопці | Дівчата/Хлопці |
|---|---|---|---|---|
| Haji Sadig | 40 | 35 | 75 | 1.142857 |
| Kirby Elementary | 10 | 50 | 60 | 0.200000 |
Однак для обчислюваних показників ми починаємо без контексту. З цієї причини ми повинні чітко вказати ідентифікатор форми та ідентифікатор поля, на яке ми хочемо посилатися. Наприклад, якби ми хотіли отримати загальну кількість хлопців, ми могли б написати:
SUMX(c21geplcowbxdn2, Boys)
Це дає той самий результат, що й перетягування поля «Хлопці» на панель «Показники» в конструкторі зведених таблиць і вибір агрегації SUM.
Якщо ми хочемо знайти співвідношення кількості дівчат до хлопців, ми можемо написати:
SUMX(c21geplcowbxdn2, Girls) / SUMX(c21geplcowbxdn2, Boys)
Наведена вище формула спочатку підсумовує кількість дівчат, потім підсумовує кількість хлопців і, нарешті, ділить дві суми. Для наведеної вище таблиці це дає нам 50 / 85 = 0.59
Зауважте, що це відрізняється від обчислюваного поля в таблиці вище: там ми спочатку ділимо кількість дівчат на кількість хлопців. Якщо ви додасте це обчислюване поле до зведеної таблиці, буде обчислено суму або середнє значення співвідношень, а не співвідношення сум.
Контекст рядка
У наведених вище прикладах ми агрегували значення одного поля. В інших випадках вам може знадобитися підсумувати або усереднити обчислення для кожного рядка. Щоб агрегувати обчислення одного або кількох полів, а не одного поля, ви можете використати функцію AVERAGEX:
AVERAGEX(c21geplcowbxdn2, Boys + Girls)
У наведеній вище формулі використання функції AVERAGEX змінює контекст, і вираз Boys + Girls обчислюється для кожного запису, а потім усереднюється, так само як і обчислюване поле.
Насправді, формула з AVERAGEX еквівалентна наступній:
AVERAGEX(c21geplcowbxdn2, Total)
Де Total — це обчислюване поле, визначене у формі «Школи» з формулою Boys + Girls.
Контекст фільтра
Звісно, в більшості випадків нас цікавить не одне число. У нашому прикладі зі школами вище, ми можемо захотіти побачити гендерне співвідношення за областями або за типами шкіл. Якщо ваша таблиця шкіл включає поле для Області та Типу, то ви можете створити матрицю з гендерним співвідношенням за Областю та Типом:
| Загальнодоступний | Приватний | |
|---|---|---|
| Північ | 1.2 | 0.8 |
| Південь | 1.1 | 0.7 |
У цьому випадку обчислюваний показник обчислюється чотири рази, по одному разу для кожної клітинки. Для кожної клітинки ми переобчислюємо формулу з новим контекстом фільтра.
При використанні зведених таблиць ви можете використовувати інтерфейс користувача для перетягування полів як вимірів рядків і стовпців, що створює неявний контекст фільтра. Однак ви також можете змінити контекст фільтра за допомогою функції CALCULATE(). Значення у зведеній таблиці вище були б такими ж, як і в наступних чотирьох формулах:
CALCULATE( SUMX(schools, Girls) / SUMX(schools, Boys),
schools.Province == "Північ",
schools.Type == "Приватний")
CALCULATE( SUMX(schools, Girls) / SUMX(schools, Boys),
schools.Province == "Північ",
schools.Type == "Загальнодоступний")
CALCULATE( SUMX(schools, Girls) / SUM(schools, Boys),
schools.Province == "Південь",
schools.Type == "Приватний")
CALCULATE( SUMX(schools, Girls) / SUMX(schools, Boys),
schools.Province == "Південь",
schools.Type == "Загальнодоступний")
Ви також можете використовувати функцію CALCULATE(), щоб змінити контекст фільтра, який вже було застосовано, або через охоплюючий вираз CALCULATE, або через інтерфейс користувача.
Наприклад, якщо ми хочемо знайти відсоток від загальної кількості студенток у кожному типі та місці розташування школи, ми можемо використати функцію ALL, щоб очистити будь-які успадковані фільтри.
Ви можете написати такий обчислюваний показник:
SUMX(schools, Girls) / CALCULATE(SUMX(schools, Girls), ALL(schools))
Тепер будь-які фільтри, застосовані в нашій матриці, будуть застосовуватися до чисельника, але будуть очищені знаменником, що дасть таблицю на кшталт:
| Загальнодоступний | Приватний | |
|---|---|---|
| Північ | 40% | 20% |
| Південь | 25% | 15% |
Наведена вище таблиця показує, що 40% студенток навчаються в загальнодоступних школах на Півночі, тоді як лише 15% дівчат — у приватних школах на Півдні.
Обчислення таблиць
Усі наведені вище формули обчислюють одне число. Однак у деяких випадках необхідно працювати з цілими таблицями.
Наприклад, ви можете захотіти дізнатися, скільки регіонів мають більшість студенток.
У цьому випадку ми можемо обчислити нову таблицю з нашої форми «Школи», яка підсумовує хлопців і дівчат у кожному Регіоні.
SUMMARIZE(c21geplcowbxdn2, REGION, "GT", SUM(Girls), "BT", SUM(Boys))
Результатом функції SUMMARIZE() є не одне число, а ціла таблиця.
Однак нам все ще потрібно обчислити одне число з цієї таблиці. Ми можемо зробити це, поєднавши функцію SUMMARIZE з функцією SUMX:
SUMX(
SUMMARIZE(c21geplcowbxdn2, REGION, "GT", SUM(Girls), "BT", SUM(Boys)),
GT > BT)
Результатом цього виразу є 1.
Оскільки перетворення таблиць стають складнішими, вирази з високим рівнем вкладеності може бути важко читати. Щоб зробити ваші формули більш читабельними, ви можете використовувати оператор конвеєра (|>). Оператор конвеєра приймає результат виразу і передає його як перший аргумент до іншого виклику функції. Наприклад, ви можете переписати наведену вище формулу так:
SUMMARIZE(c21geplcowbxdn2, REGION, "GT", SUM(Girls), "BT", SUM(Boys)) |>
SUMX(GT > BT)
Ця формула дає нам кількість регіонів, де більшість студентів — жінки.
Форми та таблиці
У вступі вище ми згадували «таблиці» та «колонки». Однак, можливо, ви найбільше знайомі з «формами» ActivityInfo.
Хоча всі «форми» ActivityInfo є «таблицями» для цілей обчислюваних показників, не всі таблиці є формами.
Форми ActivityInfo мають багато властивостей, пов'язаних зі збором даних, таких як правила валідації та релевантності, на додаток до обчислюваних полів, значення яких походять від інших полів. Форми також мають «поля», такі як заголовки розділів та підформи, які допомагають організувати введення даних, але фактично не мають значення. Форми ActivityInfo заповнюються записами, які завжди мають внутрішній ідентифікатор (_id) та повну історію змін.
У контексті обчислюваних показників форма ActivityInfo розглядається як таблиця, її записи стають рядками, а її поля — колонками.