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

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 к текущей строке. Например, можно включить в окно три предыдущие строки и три последующие строки.

Window(avg(Salary), Department, 'NONE' -3, 3) as AvgDepSalary

Синтаксис:  

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]

При необходимости задайте аргумент для обеспечения функции скользящего окна. Скользящее окно требует два аргумента:

  • Выражение начала: количество строк до текущей строки, которое необходимо включить в окно.

  • Выражение конца: количество строк после текущей строки, которое необходимо включить в окно.

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

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 не поддерживается в Qlik Sense Mobile.

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

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

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

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

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

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

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

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

Remove banner from view

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