Window ― функция скрипта
Window() выполняет вычисления из нескольких строк, предоставляя значение для каждой строки отдельно.
Можно использовать функции Window для выполнения таких операций, как:
-
Сравнение отдельного числового значения в строке со средним, максимальным или минимальным значением в столбце.
-
Вычисление ранга отдельного значения в пределах столбца или в пределах всей таблицы.
Функция Window не изменяет количество записей в таблице, но все равно может выполнять такие задачи, как агрегирование, ранжирование и реляционные функции.
Функция Window должна иметь кэш в операторе LOAD таблицы, с которой вы работаете для добавления таблицы. Например:
Window поддерживает общие функции, такие как округление или базовые операции с числами. Например:
Можно определить скользящее окно для функции Window. При этом задается количество строк, используемых при применении функции Window к текущей строке. Например, можно настроить окно, которое будет включать 3 предыдущие и 3 последующие строки.
Синтаксис:
Тип возвращаемых данных: новое поле, добавленное в результирующую таблицу, созданную оператором LOAD.
Аргументы:
Аргумент | Описание |
---|---|
input_expr |
Входное выражение, вычисленное и возвращенное функцией. Это должно быть любое выражение на основе агрегирования, такое как Median(Salary). Например: Window(Median(Salary)) as MedianSalary
В качестве входных данных может также использоваться имя поля без применения агрегирования. В данном случае Window обрабатывает его, как если бы функция Only() была применена к этому полю. Например: Window(Salary,Department) as WSalary
При необходимости можно определить разбивку на разделы без входного выражения. Разбивка на разделы совпадает с группировкой, которая достигается с помощью предложения group by с той разницей, что результат добавляется как новый столбец во входную таблицу. Разбивка на разделы не сокращает количество записей во входной таблице. Можно определять поля с несколькими разделами. Пример:
LOAD
Window(Max(Sales), City, 'ASC', OrderDate, Sales > 300)
+ AddMonths(OrderDate,-6) as MAX_Sales_City_Last_6_Mos, Window(Avg(Sales), City, 'ASC', OrderDate, City = 'Portland') + AddMonths(OrderDate,-6) as Avg_Sales_Portland_Last_6_Mos, Window(Max(Sales), City, 'ASC', OrderDate, Sales > 300) + AddMonths(OrderDate,-12) as MAX_Sales_City_Last_12_Mos; LOAD City, Sales, OrderDate FROM [lib://:DataFiles/Sales Data.xlsx]FROM [lib://AttachedFiles/Sales Data.xlsx] (ooxml, embedded labels, table is [Sales Data]);
|
partition1, partition2 |
После input_expr можно определить любое количество разделов. Разделы ― это поля, которые определяют, к каким комбинациям должно применяться агрегирование. Агрегирование применяется отдельно к каждому разделу. Например: Window(Avg(Salary), Unit, Department, Country) as AvgSalary
В приведенном выше имеются разделы: Unit, Department и Country. Разделы не являются обязательными, но необходимы для правильного формирования окон для полей. |
sort_type, [sort_expr]] |
При необходимости укажите тип сортировки и выражение сортировки. sort_type может иметь одно из двух значений:
Если определен тип сортировки (sort_type), необходимо определить выражение сортировки. Это выражение, которое определяет порядок строк в разделе. Например: Window(RecNo(), Department, 'ASC', Year)
В примере выше результаты в разделе сортируются по полю Year в порядке возрастания. Примечание к информацииТип и выражение сортировки требуются, в основном, при использовании функций RecNo и WRank.
|
filter_expr |
При необходимости добавьте выражение фильтра. Это логическое выражение, которое определяет, следует включать запись в вычисление или нет. Этот параметр можно полностью опустить, тогда фильтрации не будет. Например: Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)
as wAvgSalary) as wAvgSalaryIfEmpIs3or7 |
[start_expr,end_expr] |
При необходимости задайте аргумент для обеспечения функции скользящего окна. Скользящее окно требует два аргумента:
Например, если требуется включить 3 предшествующие строки, текущую строку и следующую строку: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, -3, 1) Чтобы указать все предшествующие строки или все последующие строки, можно использовать функцию Unbounded(). Например, если требуется включить 3 предшествующие строки, текущую строку и следующую строку: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, UNBOUNDED(), 1) Например, чтобы включить третью строку от текущей и все последующие строки: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, 3, UNBOUNDED()) |
Пример ― добавление поля, содержащего агрегирование
Пример ― добавление поля, содержащего агрегирование, отфильтрованное для конкретных значений
Пример ― добавление поля со скользящим окном
Ограничения
Window имеет следующие ограничения:
-
Функция Window потребляет много ресурсов, особенно памяти.
-
Выражения диаграммы не поддерживают Window.
-
Нельзя вкладывать функции Window в другие функции Window.
-
Window нельзя использовать внутри функции агрегирования.
-
Чтобы обеспечить возможность сканирования всей таблицы, требуется Window.
-
WRank(), RecNo() и RowNo() нельзя использовать вместе с Window при использовании функции скользящего окна.