Window — функция скрипта
Window() выполняет расчеты из нескольких строк, вычисляя для каждой строки отдельное значение.
Можно использовать функции Window для выполнения таких операций, как:
Сравнение отдельного числового значения в строке со средним, максимальным или минимальным значением в столбце.
Расчет ранга отдельного значения в столбце или во всей таблице.
Функция Window не изменяет количество записей в таблице, но все же может выполнять задачи, подобные функциям агрегирования, реляционных функций и функций над выборкой.
Чтобы добавить таблицу, функция Window должна иметь кэш в операторе LOAD такой таблицы. Пример:
Window поддерживает общие функции, такие как округление или базовые операции с числами. Пример:
Можно определить скользящее окно для функции Window. Таким образом задается количество строк, используемое при применении функции Window к текущей строке. Например, можно включить в окно три предыдущие строки и три последующие строки.
Синтаксис:
Тип возвращаемых данных: новое поле, добавленное в таблицу, созданную при помощи оператора 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] | При необходимости задайте аргумент для обеспечения функции скользящего окна. Скользящее окно требует два аргумента:
Например, если требуется включить три предшествующие строки, текущую строку и следующую за ней строку: 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 не поддерживается в Qlik Sense Mobile.
Выражения диаграммы не поддерживают Window.
Нельзя вкладывать функции Window в другие функции Window.
Window нельзя использовать внутри функции агрегирования.
Чтобы обеспечить возможность сканирования всей таблицы, требуется Window.
WRank(), RecNo() и RowNo() нельзя использовать вместе с Window при использовании функции скользящего окна.