Window - função de script
O Window() executa cálculos de múltiplas linhas, produzindo um valor para cada linha separadamente.
Você pode usar as funções de Window para executar 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 da instrução de LOAD da tabela com a qual você está trabalhando para adicionar à tabela. Por exemplo:
A janela oferece suporte a funções gerais, como arredondamento ou operações numéricas básicas. Por exemplo:
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:
Tipo de dados de retorno: um novo campo adicionado à tabela resultante criada pela instrução de LOAD.
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://:DataFiles/Sales Data.xlsx]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:
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 pelo 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:
Por exemplo, se você quiser incluir as três linhas anteriores, a linha atual e a próxima linha seguinte: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, -3, 1) 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) 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()) |
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 uma janela deslizante
Limitações
Window tem as seguintes limitações:
-
O Window é uma função que consome muitos recursos, principalmente em termos de consumo de memória.
-
As expressões de gráfico não são compatíveis com Window.
-
Você não pode aninhar funções de Window dentro de outras funções de Window.
-
O Window não pode ser usado dentro de uma função de agregação.
-
O Window precisa ser capaz de digitalizar a tabela inteira.
-
WRank(), RecNo() e RowNo() não pode ser usado com Window ao usar a funcionalidade de janela deslizante.