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

Window - Função de script

Window() realiza cálculos de várias linhas de uma seção (ou "janela") de uma tabela completa e produz um único valor para cada linha.

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 dentro de uma janela da tabela.

  • Calcular a classificação de um valor individual, seja dentro da janela ou de toda a tabela.

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 ser incluída no comando LOAD da tabela com a qual você está trabalhando, ou fazer referência à tabela, como em uma LOAD residente. Por exemplo, consulte Exemplo – Adicionando um campo contendo uma agregação.

O nome pode ser omitido, mas isso faz com que o nome do campo seja definido como a totalidade da expressão da função Window. Por exemplo, AvgDepSalary no exemplo abaixo:

[AvgSalary]: Load *, Window(avg(Salary), Department) as AvgDepSalary Resident Employees;
Nota informativa

É recomendável dar à função Window um nome de campo.

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

Load *, Round(Window(Sum(Salary),Department)) as SumDepSalary
Load *, Window(Sum(Salary),Department) + 5 as SumDepSalary
Nota informativa

A função Window faz uma varredura em toda a tabela. Em termos de consumo de memória, o custo dessa varredura é proporcional ao número de campos na tabela. Uma tabela com poucos campos, além daqueles sobre os quais a função Window está operando, é sempre preferível a uma tabela com muitos campos.

Normalmente, uma função Window consome de 2 a 4 vezes mais memória e leva de 2 a 4 vezes mais tempo para recarregar quando comparada a uma operação de script semelhante que contém a mesma agregação, uma cláusula Where (filtro), uma cláusula Group by (partição) e uma cláusula Order by (classificação).

Sintaxe:  

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

Tipo de dados de retorno: um valor por linha, que pode ser combinado com ou usado em outra expressão ou adicionado diretamente à tabela resultante criada pela instrução de LOAD.

Argumentos:  

Argumentos
ArgumentoDescrição
main_expr

A principal 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 expressão 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) as WSalary

Expressões que incluem agregações aninhadas ou funções de janela aninhadas, como Window(Sum(Avg(Salary))) ou Window(Sum(Window(Salary))), não são permitidas.

partition1, partition2

Após main_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. Por exemplo:

Window(Avg(Salary), Department) as AvgDepSalary

Isso calcula o salário médio de cada departamento.

Quando vários parâmetros de partição forem fornecidos, a agregação será aplicada a cada linha com uma combinação exclusiva de campos de partição. Por exemplo:

Window(Avg(Salary), Department, Country) as AvgDepSalaryPerCountry

Isso calcula o salário médio para cada departamento em cada país. Departamentos duplicados em diferentes países, como Marketing na Suécia e Marketing no Canadá, serão tratados como partições diferentes.

O particionamento é semelhante ao agrupamento obtido pela cláusula group by. No entanto, o particionamento não reduz o número de registros em comparação com a tabela de entrada.

sort_type, [sort_expr]

Opcionalmente, especifique o tipo de classificação e a expressão de classificação. Isso define a ordem em que a agregação é realizada. sort_type é uma string constante e pode ter um de três valores:

  • ASC: classificação ascendente.

  • DESC: classificação descendente.

  • NONE

Se você definir sort_type ASC ou DESC, precisará definir uma expressão de classificação. Com sort_type NONE, nenhuma expressão de classificação deve ser fornecida. A expressão de classificação decide a ordem das linhas dentro de uma partição.

Por exemplo:

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

No exemplo acima, a agregação dentro da partição é realizada em ordem crescente pelo campo Ano.

Os parâmetros de classificação também afetam a ordem em que uma janela deslizante processa uma tabela. Para ver um exemplo, consulte Exemplo – Adicionando um campo com janela deslizante classificada.

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.

Se for fornecido filter_expr, um tipo de classificação deverá ser incluído. Se nenhum tipo de classificação for definido, o argumento poderá ser interpretado como um parâmetro de partição em vez de uma expressão de filtro. O parâmetro filter_expr pode ser totalmente omitido ou um valor verdadeiro pode ser incluído. Ambos resultam em nenhum filtro sendo usado, portanto, nenhuma linha é excluída.

Por exemplo:

Window(avg(Salary), Department, 'ASC', Age, Country='US' Or Country='Canada') as AvgDepSalaryInUsOrCanada

O comando Window acima filtrará qualquer linha em que o campo País não seja EUA ou Canadá, excluindo essas linhas da agregação. Ainda haverá valores de saída para as linhas que foram filtradas, mas, como todas as outras linhas de saída, elas conterão apenas resultados agregados de linhas que não foram excluídas pelo filtro.

start_expr,end_expr

Opcionalmente, defina os argumentos para a funcionalidade de janela deslizante. Isso limita ainda mais o número de linhas a serem agregadas. Cada linha de saída incluirá apenas os resultados (agregados) de um número de linhas anteriores e posteriores à linha atual. Uma janela deslizante requer dois argumentos (start_expr,end_expr). Se esses argumentos forem fornecidos, então o tipo de classificação não deverá ser ignorado. Caso contrário, os argumentos poderão ser interpretados como um parâmetro de partição em vez de janela deslizante. O parâmetro start_expr,end_expr inclui:

  • 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 linha seguinte:

Window(concat(Text(Salary),'-'), Department, 'NONE', 1, -3, 1) as WSlidingSalaryDepartment

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, 'NONE', 1, UNBOUNDED(), 1) as WSlidingSalaryDepartment

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

Window(concat(Text(Salary),'-'), Department, 'NONE', 1, 3, UNBOUNDED()) as WSlidingSalaryDepartment

Nos exemplos acima, o tipo de classificação NONE é fornecido para que o script possa distinguir entre os argumentos da partição e os parâmetros que vêm depois do tipo de classificação.

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

Exemplo – Adicionando um campo com janela deslizante classificada

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 não pode ser usado em uma instrução de LOAD com uma cláusula group by.

  • 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.

  • Quando a funcionalidade de janela deslizante é usada, o tempo de cálculo aumenta com o tamanho da janela. Em geral, tabelas grandes combinadas com janelas grandes devem ser evitadas.

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 – avise-nos!