Ir para conteúdo principal Pular para conteúdo complementar

Window - função de script

Window() executa cálculos de múltiplas linhas, produzindo um valor para cada linha separadamente.

Você pode usar as funções de Window para realizar operações como:

  • Comparar um valor numérico individual em uma linha com a média, o máximo ou o mínimo na coluna.

  • Calcular a classificação de um valor individual, na coluna ou na tabela inteira.

A função Window não altera o número de registros na tabela, mas ainda pode executar tarefas semelhantes como funções de agregação, relacionais e de intervalo.

A função Window deve ter um cache dentro do comando LOAD da tabela com a qual você está trabalhando para adicionar à tabela. Por exemplo:

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

A janela oferece suporte a funções gerais, como arredondamento ou operações numéricas básicas. Por exemplo:

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

Você pode definir uma janela deslizante para a função Window. Isso define o número de linhas usadas ao aplicar a função Window na linha atual. Por exemplo, você pode definir a janela como as 3 linhas anteriores e as 3 linhas subsequentes.

Sintaxe:  

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

Tipo de dados de retorno: Um novo campo adicionado à tabela resultante criada pelo comando LOAD.

Argumentos:  

Argumentos
Argumento Descrição
input_expr

A expressão de entrada calculada e retornada pela função. Deve ser qualquer expressão baseada em uma agregação, como Median(Salary). Por exemplo:

Window(Median(Salary)) as MedianSalary

A entrada também pode ser um nome de campo sem agregação aplicada. Neste caso, Window trata-o como se a função Only() fosse aplicada a esse campo. Por exemplo:

Window(Salary,Department) as WSalary

 

Opcionalmente, você pode definir o particionamento com a expressão de entrada. O particionamento é igual ao agrupamento obtido pela cláusula group by, com a diferença de que o resultado é adicionado como uma nova coluna à tabela de entrada. O particionamento não reduz o número de registros da tabela de entrada. Vários campos de partição podem ser definidos.

Exemplo: 

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://AttachedFiles/Sales Data.xlsx] (ooxml, embedded labels, table is [Sales Data]);

partition1, partition2

Após input_expr, você pode definir qualquer número de partições. Partições são campos que definem com quais combinações aplicar as agregações. A agregação é aplicada separadamente com cada partição. Por exemplo:

Window(Avg(Salary), Unit, Department, Country) as AvgSalary

Acima, as partições são Unit, Department e Country.

As partições não são obrigatórias, mas são necessárias para o janelamento adequado dos campos.

sort_type, [sort_expr]]

Opcionalmente, especifique o tipo de classificação e a expressão de classificação. sort_type pode ter um de dois valores:

  • ASC: Classificação ascendente.

  • DESC: Classificação descendente.

Se você definir sort_type, precisará definir uma expressão de classificação. Esta é uma expressão que decide a ordem das linhas dentro de uma partição.

Por exemplo:

Window(RecNo(), Department, 'ASC', Year)

No exemplo acima, os resultados dentro da partição são classificados de forma crescente por campo Year.

Nota informativaO tipo de classificação e a expressão de classificação são necessários principalmente apenas com as funções RecNo e WRank.
filter_expr

Opcionalmente, adicione uma expressão de filtro. Esta é uma expressão booleana que decide se o registro deve ou não ser incluído no cálculo.

Este parâmetro pode ser omitido completamente e o resultado deverá ser que não há filtro.

Por exemplo:

Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)
as wAvgSalary) as wAvgSalaryIfEmpIs3or7
[start_expr,end_expr]

Opcionalmente, defina o argumento para a funcionalidade da janela deslizante. Uma janela deslizante requer dois argumentos:

  • Expressão inicial: O número de linhas anteriores à linha atual a serem incluídas na janela.

  • Expressão final O número de linhas após a linha atual a serem incluídas na janela.

Por exemplo, se você quiser incluir as 3 linhas anteriores, a linha atual e a próxima linha seguinte:

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

Para indicar todas as linhas anteriores ou todas as linhas subsequentes, você pode usar a função Unbounded(). Por exemplo, para incluir todas as linhas anteriores, a linha atual e a linha seguinte:

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

Por exemplo, para incluir a terceira linha da linha atual e todas as linhas subsequentes:

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

Exemplo – Adicionando um campo contendo uma agregação

Exemplo – Adicionando um campo contendo uma agregação filtrada para valores específicos

Exemplo – Adicionando um campo com janela deslizante

Limitações

O Window tem as seguintes limitações:

  • Window é uma função que consome muitos recursos, principalmente em termos de consumo de memória.

  • Não há suporte para Window no Qlik Sense Mobile.

  • As expressões de gráfico não são compatíveis com Window.

  • Você não pode aninhar funções Window dentro de outras funções Window.

  • Window não pode ser usado dentro de uma função de agregação.

  • Window precisa ser capaz de digitalizar a tabela inteira.

  • WRank(), RecNo() e RowNo() não pode ser usado com o Window ao usar a funcionalidade de janela deslizante.

Esta página ajudou?

Se você encontrar algum problema com esta página ou seu conteúdo - um erro de digitação, uma etapa ausente ou um erro técnico - informe-nos como podemos melhorar!