Использование инструкции OVER для ссылки на срезы данных

Пользовательские выражения оцениваются в срезах данных, представленных маркерами в визуализации. Инструкции OVER используются в пользовательских выражениях, когда требуется включить в оценку выражения также данные из внешнего среза текущего фрагмента.

Объяснение включения данных за пределами текущего среза см. на изображении ниже. Подобное изображение используется для демонстрации концепций среза и маркера, которые необходимо понимать при работе с пользовательскими выражениями, в частности с пользовательскими выражениями, содержащими инструкцию OVER.

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



Предположим, что необходимо сравнить значения «Продажи апельсинов, Север, 2018» с «Продажи лимонов, Запад, 2018» или «Продажи апельсинов, Запад, 2015–2017». То есть в таком выражении нужно ссылаться на срезы данных вне области «Продажи апельсинов, Север, 2018», что делается с помощью инструкции OVER. Инструкция OVER позволяет открывать новые способы группировки данных, на которые можно ссылаться в выражениях.

Самый простой способ объяснить, как записывать инструкции OVER в выражениях и как они работают, — это показать на примере.

Примеры выражений с инструкцией OVER

Прим.: Прежде всего при использовании инструкции OVER в выражении для ссылки на другие срезы вы ссылаетесь не на фактический столбец, используемый для среза данных на оси. Вместо этого вы ссылаетесь на саму ось, например [Axis.X] или[Axis.Color].

Точечная диаграмма показывает сумму продаж по всем фруктам: яблокам, апельсинам и грушам. Общая сумма продаж — 300.



Когда выражение

Sum([Sales]) OVER (All([Axis.X]))

указано на оси Y, каждый маркер переоценивается, а точечная диаграмма изменяется на:



Чтобы понять результат, возьмите маркер, представляющий «Сумму продаж, яблоки», как пример. Пользовательское выражение подразумевает, что маркер должен повторно выполнить оценку, чтобы показать сумму продаж для всех срезов оси X, то есть сумму продаж яблок, апельсинов и груш (150+80+70). То же относится к другим маркерам, поэтому все маркеры имеют одинаковые значения. Фактически оператор OVER (All([Axis.X])) является частью выражения, означая, что срез данных по оси X игнорируется!

В следующем примере производится дальнейший срез данных, так как год указан на оси цвета.



Измените ось Y на следующее выражение:

Sum([Sales]) OVER (All([Axis.Color]))



В этом пользовательском выражении подразумевается, что каждый маркер должен повторно выполнить оценку, чтобы показать сумму продаж всех цветовых срезов, по сути, игнорируя нарезку, сделанную по цвету.

Прим.: Выражения, используемые в приведенных выше примерах, работают только при использовании данных в памяти. Если используются данные, находящиеся в базе данных, тогда требуется выражение THEN.

Возьмем как пример «Груши, 2015» (синяя звезда «Груши»). Новое значение маркера показывает сумму продаж груш за все три года (40+20+10). Все маркеры в типе фруктов получают одинаковое значение оси Y, независимо от цвета (год).

Практическое использование приведенных выше примеров нецелесообразно, однако они служат средством для понимания того, как инструкция OVER работает в сочетании с так называемыми методами навигации по узлам.

Использование инструкции OVER в вычисляемых столбцах

Использование инструкции OVER в вычисляемых столбцах отличается от его использования в пользовательских выражениях. В вычисленных столбцах это может привести к меньшему количеству записей.