Перейти к основному содержимому Перейти к дополнительному содержимому

Window ― функция скрипта

Window() выполняет вычисления из нескольких строк, предоставляя значение для каждой строки отдельно.

Можно использовать функции Window для выполнения таких операций, как:

  • Сравнение отдельного числового значения в строке со средним, максимальным или минимальным значением в столбце.

  • Вычисление ранга отдельного значения в пределах столбца или в пределах всей таблицы.

Функция Window не изменяет количество записей в таблице, но все равно может выполнять такие задачи, как агрегирование, ранжирование и реляционные функции.

Функция Window должна иметь кэш в операторе LOAD таблицы, с которой вы работаете для добавления таблицы. Например:

[Transactions]: Load *, Window(avg(Expression1),[Num]); LOAD TransLineID, TransID, "Num", Dim1, Dim2, Dim3, Expression1, Expression2, Expression3 FROM [lib://DataFiles/transactions.qvd] (qvd);FROM [lib://AttachedFiles/transactions.qvd] (qvd);

Window поддерживает общие функции, такие как округление или базовые операции с числами. Например:

Load *, Round(Window(Sum(Salary),Department)) as SumSalary
Load *, Window(Sum(Salary),Department) + 5 as SumSalary

Можно определить скользящее окно для функции Window. При этом задается количество строк, используемых при применении функции Window к текущей строке. Например, можно настроить окно, которое будет включать 3 предыдущие и 3 последующие строки.

Синтаксис:  

Window (input_expr, [partition1, partition2, ...], [sort_type, [sort_expr]],[filter_expr], [start_expr,end_expr])

Тип возвращаемых данных: новое поле, добавленное в результирующую таблицу, созданную оператором 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 может иметь одно из двух значений:

  • ASC: сортировка по возрастанию.

  • DESC: сортировка по убыванию.

Если определен тип сортировки (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)
as WSalaryDepartment

Чтобы указать все предшествующие строки или все последующие строки, можно использовать функцию Unbounded(). Например, если требуется включить 3 предшествующие строки, текущую строку и следующую строку:

Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, UNBOUNDED(), 1)
as WSlidingSalaryDepartment

Например, чтобы включить третью строку от текущей и все последующие строки:

Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, 3, UNBOUNDED())
as WSlidingSalaryDepartment

Пример ― добавление поля, содержащего агрегирование

Пример ― добавление поля, содержащего агрегирование, отфильтрованное для конкретных значений

Пример ― добавление поля со скользящим окном

Ограничения

Window имеет следующие ограничения:

  • Функция Window потребляет много ресурсов, особенно памяти.

  • Выражения диаграммы не поддерживают Window.

  • Нельзя вкладывать функции Window в другие функции Window.

  • Window нельзя использовать внутри функции агрегирования.

  • Чтобы обеспечить возможность сканирования всей таблицы, требуется Window.

  • WRank(), RecNo() и RowNo() нельзя использовать вместе с Window при использовании функции скользящего окна.

Помогла ли вам эта страница?

Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!

Присоединяйтесь к программе модернизации аналитики

Remove banner from view

Модернизируйте ваши важные приложения QlikView без ущерба с помощью программы модернизации аналитики. Щелкните здесь для получения дополнительной информации или свяжитесь с нами: ampquestions@qlik.com