# 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 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 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://DataFiles/transactions.qvd] (qvd);FROM [lib://AttachedFiles/transactions.qvd] (qvd);
```

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 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:

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

Sintaxe:

Window (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:<br><br>Window(Median(Salary)) as MedianSalary<br><br>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:<br><br>Window(Salary,Department) as WSalary<br><br>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.<br><br>Exemplo:<br><br><br>LOAD<br>Window(Max(Sales), City, 'ASC', OrderDate, Sales &gt; 300)<br>+ AddMonths(OrderDate,-6) as MAX\_Sales\_City\_Last\_6\_Mos,<br>Window(Avg(Sales), City, 'ASC', OrderDate, City = 'Portland')<br>+ AddMonths(OrderDate,-6) as Avg\_Sales\_Portland\_Last\_6\_Mos,<br>Window(Max(Sales), City, 'ASC', OrderDate, Sales &gt; 300)<br>+ AddMonths(OrderDate,-12) as MAX\_Sales\_City\_Last\_12\_Mos;<br>LOAD<br>City,<br>Sales,<br>OrderDate<br>FROM [lib://:DataFiles/Sales Data.xlsx]FROM [lib://AttachedFiles/Sales Data.xlsx]<br>(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:<br><br>Window(Avg(Salary), Unit, Department, Country) as AvgSalary<br><br>Acima, as partições são Unit, Department e Country.<br><br>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:<br><br><ul><li><p><span>ASC</span>:&nbsp;Classificação ascendente.</p></li><li><p><span>DESC</span>:&nbsp;Classificação descendente.</p></li></ul><br><br>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.<br><br>Por exemplo:<br><br>Window(RecNo(), Department, 'ASC', Year)<br><br>No exemplo acima, os resultados dentro da partição são classificados de forma crescente pelo campo Year.<br><br>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.<br><br>Este parâmetro pode ser omitido completamente e o resultado deverá ser que não há filtro.<br><br>Por exemplo:<br><br>Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)<br>as wAvgSalary) as wAvgSalaryIfEmpIs3or7 |
| [start\_expr,end\_expr] | Opcionalmente, defina o argumento para a funcionalidade da janela deslizante. Uma janela deslizante requer dois argumentos:<br><br><ul><li><p>Expressão inicial:&nbsp;o número de linhas anteriores à linha atual a serem incluídas na janela.</p></li><li><p>Expressão final:&nbsp;o número de linhas após a linha atual a serem incluídas na janela.</p></li></ul><br><br>Por exemplo, se você quiser incluir as 3 linhas anteriores, a linha atual e a próxima linha seguinte:<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, -3, 1)<br>as WSalaryDepartment<br><br>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:<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, UNBOUNDED(), 1)<br>as WSlidingSalaryDepartment<br><br>Por exemplo, para incluir a terceira linha da linha atual e todas as linhas subsequentes:<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, 3, UNBOUNDED())<br>as WSlidingSalaryDepartment |

## Exemplo – Adicionando um campo contendo uma agregação

[](https://help.qlik.com/en-US/qlikview/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm)

#### Exemplo: adicionando um campo contendo uma agregação

Script de carregamento

Crie uma nova guia no editor de carregamento de dados e carregue os dados a seguir como um carregamento inline. Crie a tabela abaixo no Qlik Sense para ver os resultados.

```
Transactions:
Load
*,
Window(Avg(transaction_amount),customer_id) as AvgCustTransaction;

Load * Inline [
transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, M, Orange
3752, 20180916, 5.75, 1, 5646471, S, Blue
3753, 20180922, 125.00, 7, 3036491, L, Black
3754, 20180922, 484.21, 13, 049681, XS, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black
3758, 20180924, 153.42, 14, 2038593, L, Red
3759, 20180925, 7.42, 5, 203521, M, Orange
3760, 20180925, 80.12, 18, 5646471, M, Blue
3761, 20180926, 3.42, 7, 3036491, XS, Black
3763, 20180926, 63.55, 12, 049681, S, Red
3763, 20180927, 177.56, 10, 2038593, L, Blue
3764, 20180927, 325.95, 8, 203521, XL, Black
];
 
```

Resultados

Resultados da adição de um campo contendo uma agregação

| cabeçalho | transaction\_date | transaction\_amount | transaction\_quantity | ID do cliente | tamanho | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | Vermelho | 103.43 |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | Orange | 266.775 |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | Azul | 42.935 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | Preto | 64.21 |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | Vermelho | 273.88 |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | Azul | 103.43 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | Preto | 266.775 |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | Vermelho | 103.43 |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | Orange | 266.775 |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | Azul | 42.935 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | Preto | 64.21 |
| 3763 | 20180926 | 63.55 | 12 | 049681 | S | Vermelho | 273.88 |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | Azul | 103.43 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | Preto | 266.775 |

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

[](https://help.qlik.com/en-US/qlikview/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm)

#### Exemplo: adicionando um campo contendo uma agregação filtrada para valores específicos

Script de carregamento

Crie uma nova guia no editor de carregamento de dados e carregue os dados a seguir como um carregamento inline. Crie a tabela abaixo no Qlik Sense para ver os resultados.

```
Transactions:
Load
*,
Window(Avg(transaction_amount),customer_id, color_code = 'Blue') as AvgCustTransaction;

Load * Inline [
transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, M, Orange
3752, 20180916, 5.75, 1, 5646471, S, Blue
3753, 20180922, 125.00, 7, 3036491, L, Black
3754, 20180922, 484.21, 13, 049681, XS, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black
3758, 20180924, 153.42, 14, 2038593, L, Red
3759, 20180925, 7.42, 5, 203521, M, Orange
3760, 20180925, 80.12, 18, 5646471, M, Blue
3761, 20180926, 3.42, 7, 3036491, XS, Black
3763, 20180926, 63.55, 12, 049681, S, Red
3763, 20180927, 177.56, 10, 2038593, L, Blue
3764, 20180927, 325.95, 8, 203521, XL, Black
];
 
```

Resultados

Resultados da adição de um campo contendo uma agregação filtrada para valores específicos

| cabeçalho | transaction\_date | transaction\_amount | transaction\_quantity | ID do cliente | tamanho | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | Vermelho | - |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | Orange | - |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | Azul | 42.94 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | Preto | - |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | Vermelho | - |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | Azul | 118.4 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | Preto | - |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | Vermelho | - |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | Orange | - |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | Azul | 42.94 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | Preto | - |
| 3763 | 20180926 | 63.55 | 12 | 049681 | S | Vermelho | - |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | Azul | 118.4 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | Preto | - |

## Exemplo – Adicionando um campo com janela deslizante

[](https://help.qlik.com/en-US/qlikview/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm)

#### Exemplo: adicionando um campo com janela deslizante

Script de carregamento

Crie uma nova guia no editor de carregamento de dados e carregue os dados a seguir como um carregamento inline. Crie a tabela abaixo no Qlik Sense para ver os resultados.

```
Transactions:
Load
*,
Window(Avg(transaction_amount),customer_id, 'ASC', -1, 1, 0, 1) as AvgCustTransaction;

Load * Inline [
transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, M, Orange
3752, 20180916, 5.75, 1, 5646471, S, Blue
3753, 20180922, 125.00, 7, 3036491, L, Black
3754, 20180922, 484.21, 13, 049681, XS, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black
3758, 20180924, 153.42, 14, 2038593, L, Red
3759, 20180925, 7.42, 5, 203521, M, Orange
3760, 20180925, 80.12, 18, 5646471, M, Blue
3761, 20180926, 3.42, 7, 3036491, XS, Black
3763, 20180926, 63.55, 12, 049681, S, Red
3763, 20180927, 177.56, 10, 2038593, L, Blue
3764, 20180927, 325.95, 8, 203521, XL, Black
];
 
```

Resultados

Resultados da adição de um campo contendo uma agregação filtrada para valores específicos

| cabeçalho | transaction\_date | transaction\_amount | transaction\_quantity | ID do cliente | tamanho | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | Vermelho | 41.37 |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | Orange | 366.865 |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | Azul | 42.935 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | Preto | 64.21 |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | Vermelho | 273.88 |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | Azul | 106.3 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | Preto | 92.42 |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | Vermelho | 165.49 |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | Orange | 166.685 |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | Azul | 80.12 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | Preto | 3.42 |
| 3763 | 20180926 | 63.55 | 12 | 049681 | S | Vermelho | 177.56 |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | Azul | 63.55 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | Preto | 325.95 |

## Limitações

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