Использование статистических функций итератора
Каждая функция формирования сводных данных по одному столбцу имеет эквивалентную функцию итератора. В следующих разделах будут рассмотрены два сценария агрегирования, в которых удобно использовать функции итератора: сложное формирование сводных данных и формирование сводных данных с более высокой степенью детализации.
Сложное формирование сводных данных
В этом разделе вы создадите свою первую меру, использующую функцию итератора. Сначала скачайте и откройте файл Adventure Works DW 2020 M05.pbix. Затем добавьте следующее определение меры:
Revenue =
SUMX(
Sales,
Sales[Order Quantity] * Sales[Unit Price] * (1 - Sales[Unit Price Discount Pct])
)
Отформатируйте меру Revenue как значение валюты с двумя десятичными знаками, а затем добавьте ее в визуальный элемент таблицы, который находится на странице 1 отчета.
Используя функцию итератора, формула меры Revenue агрегирует больше, чем значения одного столбца. Для каждой строки она использует значения контекста строки из трех столбцов для получения суммы дохода.
Теперь добавьте еще одну меру:
Discount =
SUMX(
Sales,
Sales[Order Quantity]
* (
RELATED('Product'[List Price]) - Sales[Unit Price]
)
)
Отформатируйте меру Discount в качестве валюты с двумя десятичными знаками, а затем добавьте ее в визуальный элемент таблицы.
Обратите внимание, что в формуле используется функция RELATED
. Помните, что контекст строки не выходит за пределы таблицы. Если ваша формула должна ссылаться на столбцы в других таблицах и между таблицами существуют связи, используйте функцию RELATED
для односторонней связи или функцию RELATEDTABLE
для многосторонней связи.
Формирование сводных данных с более высокой степенью детализации
В следующем примере рассматривается требование для получения отчета о среднем доходе. Добавьте следующую меру:
Revenue Avg =
AVERAGEX(
Sales,
Sales[Order Quantity] * Sales[Unit Price] * (1 - Sales[Unit Price Discount Pct])
)
Отформатируйте меру Revenue Avg в качестве валюты с двумя десятичными знаками, а затем добавьте ее в визуальный элемент таблицы.
Допустим, среднее значение означает сумму значений, разделенную на число значений. Однако эта теория предполагает вопрос: что представляет собой число значений? В этом случае число значений — это количество выражений, для которых не было получено пустое значение. Кроме того, так как функция итератора перечисляет строки таблицы Sales, среднее значение будет соответствовать доходу на строку. Если продолжить эту логику,то так как каждая строка в таблице Sales представляет собой строку заказа на продажу, ее можно более точно описать как доход на строку заказа.
Соответственно, вам следует переименовать меру Revenue Avg в Revenue Avg Order Line, чтобы пользователям было понятно, что используется в качестве среднего базового значения.
В следующем примере функция итератора используется для создания меры, которая повышает степень детализации до уровня заказа на продажу (заказ на продажу состоит из одной или нескольких строк заказа). Добавьте следующую меру:
Revenue Avg Order =
AVERAGEX(
VALUES('Sales Order'[Sales Order]),
[Revenue]
)
Отформатируйте меру Revenue Avg Order в качестве валюты с двумя десятичными знаками, а затем добавьте ее в визуальный элемент таблицы.
Как и ожидалось, средний доход для заказа всегда выше, чем средний доход для отдельной строки заказа.
Обратите внимание, что в формуле используется функция VALUES
(DAX). С помощью этой функции ваши формулы могут определять, какие значения находятся в контексте фильтра. В этом случае функция AVERAGEX
выполняет итерацию по каждому заказу на продажу в контексте фильтра. Другими словами, она выполняет итерацию по каждому заказу на продажу за месяц. Контекст фильтра и функция VALUES
представлены в модуле контекста фильтра.