# Window - función de script

Window() realiza cálculos a partir de varias filas, generando un valor para cada fila por separado.

Puede utilizar las funciones Window para realizar operaciones como:

* Comparar un valor numérico individual en una fila con el promedio, máximo o mínimo dentro de la columna.

* Calcular la clasificación de un valor individual, ya sea dentro de la columna o dentro de toda la tabla.

La función Window no cambia la cantidad de registros en la tabla, pero aún puede realizar tareas similares como funciones de agregación, relacionales y de rango.

La función Window debe tener una caché dentro de la sentencia LOAD de la tabla con la que está trabajando para agregarlo a la tabla. Por ejemplo:

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

Window admite funciones generales, como redondeo u operaciones numéricas básicas. Por ejemplo:

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

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

Puede definir una ventana deslizante para la función Window. Esto establece el número de filas utilizadas al aplicar la función en el Window actual. Por ejemplo, puede configurar la ventana para que contenga las 3 filas anteriores y las 3 filas posteriores.

Sintaxis:

Window (Window (input\_expr, [partition1, partition2, ...], [sort\_type, [sort\_expr]],[filter\_expr], [start\_expr,end\_expr]))

Tipo de datos que devuelve: un nuevo campo agregado a la tabla resultante creada por la sentencia LOAD.

Argumentos:

Argumentos

| Argumento | Descripción |
| --- | --- |
| input\_expr | La expresión de entrada calculada y devuelta por la función. Debe ser cualquier expresión basada en una agregación, como Median(Salary). Por ejemplo:<br><br>Window(Median(Salary)) as MedianSalary<br><br>El dato de entrada también puede ser un nombre de campo sin que se aplique ninguna agregación. En este caso, Window lo trata como la función Only() se aplica a ese campo. Por ejemplo:<br><br>Window(Salary,Department) as WSalary<br><br>Si lo desea también puede definir la partición con la expresión de entrada. La partición es la misma que la agrupación obtenida por la cláusula group by, con la diferencia de que el resultado se agrega como una nueva columna a la tabla de entrada. La partición no reduce la cantidad de registros de la tabla de entrada. Se pueden definir múltiples campos de partición.<br><br>Ejemplo:<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://AttachedFiles/Sales Data.xlsx]<br>(ooxml, embedded labels, table is [Sales Data]); |
| partition1, partition2 | Después de input\_expr, puede definir cualquier número de particiones. Las particiones son campos que definen con qué combinaciones aplicar las agregaciones. La agregación se aplica por separado con cada partición. Por ejemplo:<br><br>Window(Avg(Salary), Unit, Department, Country) as AvgSalary<br><br>En el anterior, las particiones son Unit, Department y Country.<br><br>Las particiones no son obligatorias, pero sí recomendables para que los campos tengan ventanas adecuadas. |
| sort\_type, [sort\_expr]] | Opcionalmente, especifique el tipo de ordenación y la expresión de orden. sort\_type puede tener uno de estos dos valores:<br><br><ul> <li> <p> <span>ASC</span>&nbsp;Orden ascendente.</p> </li> <li> <p> <span>DESC</span>&nbsp;Orden descendente.</p> </li> </ul><br><br>Si define sort\_type, necesita definir una expresión de orden. Esta es una expresión que decide el orden de las filas dentro de una partición.<br><br>Por ejemplo:<br><br>Window(RecNo(), Department, 'ASC', Year)<br><br>En el ejemplo anterior, los resultados dentro de la partición están ordenados de forma ascendente por el campo Year.<br><br>Nota informativaEl tipo de clasificación y la expresión de orden solo se requieren principalmente con las funciones RecNo y WRank. |
| filter\_expr | Opcionalmente, agregue una expresión de filtro. Esta es una expresión booleana que decide si el registro debe incluirse en el cálculo o no.<br><br>Este parámetro se puede omitir por completo y el resultado debería ser que no hay filtro.<br><br>Por ejemplo:<br><br>Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)<br>as wAvgSalary) as wAvgSalaryIfEmpIs3or7 |
| [start\_expr,end\_expr] | Opcionalmente, establezca el argumento para la funcionalidad de ventana deslizante. Una ventana deslizante requiere dos argumentos:<br><br><ul> <li> <p>Expresión de inicio:&nbsp;el número de filas anteriores a la fila actual que se incluirán en la ventana.</p> </li> <li> <p>Expresión final:&nbsp;el número de filas después de la fila actual que se incluirán en la ventana.</p> </li> </ul><br><br>Por ejemplo, si desea incluir las 3 filas anteriores, la fila actual y la siguiente fila:<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, -3, 1)<br>as WSalaryDepartment<br><br>Para indicar todas las filas anteriores o todas las filas posteriores, puede utilizar la función Unbounded(). Por ejemplo, para incluir todas las filas anteriores, la fila actual y la fila siguiente:<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, UNBOUNDED(), 1)<br>as WSlidingSalaryDepartment<br><br>Por ejemplo, para incluir la tercera fila de la fila actual y todas las filas posteriores:<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, 3, UNBOUNDED())<br>as WSlidingSalaryDepartment |

## Ejemplo: agregar un campo que contiene una agregación

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm)

#### Ejemplo: agregar un campo que contiene una agregación

Script de carga

Cree una nueva pestaña en el editor de carga de datos y luego cargue los siguientes datos como una carga inline. Cree la tabla siguiente en Qlik Sense para ver los 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 al agregar un campo que contiene una agregación

| id\_transacción | transaction\_date | transaction\_amount | transaction\_quantity | customer\_id | size | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | Red | 103.43 |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | Orange | 266.775 |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | Blue | 42.935 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | Black | 64.21 |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | Red | 273.88 |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | Blue | 103.43 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | Black | 266.775 |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | Red | 103.43 |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | Orange | 266.775 |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | Blue | 42.935 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | Black | 64.21 |
| 3763 | 20180926 | 63.55 | 12 | 049681 | S | Red | 273.88 |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | Blue | 103.43 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | Black | 266.775 |

## Ejemplo: agregar un campo que contiene una agregación con determinados valores filtrados

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm)

#### Ejemplo: agregar un campo que contiene una agregación con determinados valores filtrados

Script de carga

Cree una nueva pestaña en el editor de carga de datos y luego cargue los siguientes datos como una carga inline. Cree la tabla siguiente en Qlik Sense para ver los 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 al agregar un campo que contiene una agregación filtrada para valores específicos

| id\_transacción | transaction\_date | transaction\_amount | transaction\_quantity | customer\_id | size | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | Red | - |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | Orange | - |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | Blue | 42.94 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | Black | - |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | Red | - |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | Blue | 118.4 |
| 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 | 42.94 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | Black | - |
| 3763 | 20180926 | 63.55 | 12 | 049681 | S | Red | - |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | Blue | 118.4 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | Black | - |

## Ejemplo: agregar un campo con una ventana deslizante

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm)

#### Ejemplo: agregar un campo con una ventana deslizante

Script de carga

Cree una nueva pestaña en el editor de carga de datos y luego cargue los siguientes datos como una carga inline. Cree la tabla siguiente en Qlik Sense para ver los 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 al agregar un campo que contiene una agregación filtrada para valores específicos

| id\_transacción | transaction\_date | transaction\_amount | transaction\_quantity | customer\_id | size | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | Red | 41.37 |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | Orange | 366.865 |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | Blue | 42.935 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | Black | 64.21 |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | Red | 273.88 |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | Blue | 106.3 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | Black | 92.42 |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | Red | 165.49 |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | Orange | 166.685 |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | Blue | 80.12 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | Black | 3.42 |
| 3763 | 20180926 | 63.55 | 12 | 049681 | S | Red | 177.56 |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | Blue | 63.55 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | Black | 325.95 |

## Limitaciones

Window tiene las siguientes limitaciones:

* Window es una función que gasta muchos recursos, especialmente en términos de consumo de memoria.

* Window no es compatible con Qlik Sense Mobile.

* Las expresiones de gráfico no son compatibles con Window.

* No puede anidar funciones Window dentro de otras funciones Window.

* Window no se puede utilizar dentro de una función de agregación.

* Window necesita poder escanear toda la tabla.

* WRank(), RecNo() y RowNo() no se pueden usar con Window cuando se utiliza la función de ventana deslizante.