# Window Función de script

Window() realiza cálculos a partir de varias filas de una sección (o "ventana") de una tabla completa y genera un único valor para cada fila.

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 una ventana de la tabla.

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

La función Window no modifica el número de registros de la tabla, pero puede realizar tareas similares a las funciones de agregación, relacionales y de rango.

La función Window debe incluirse dentro de la sentencia LOAD de la tabla con la que está trabajando, o hacer referencia a la tabla, como por ejemplo con un LOAD Resident. Por ejemplo, consulte [Ejemplo: agregar un campo que contiene una agregación](https://help.qlik.com/es-ES/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm#Example2).

El nombre se puede omitir, pero esto hace que el nombre del campo se establezca en la totalidad de la expresión de la función Window. Por ejemplo, AvgDepSalary en el siguiente ejemplo:

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

Nota informativa

Se recomienda asignar un nombre de campo a la función Window.

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

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

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

Nota informativa

La función Window examina toda la tabla. En términos de consumo de memoria, el coste de este escaneo es proporcional al número de campos de la tabla. Una tabla con pocos campos, además de aquellos sobre los que opera la función Window, siempre es preferible a una tabla con muchos campos.

Por lo general, una función Window consume de 2 a 4 veces más memoria y tarda de 2 a 4 veces más en tiempo de recarga en comparación con una operación de script similar que contenga la misma agregación, una cláusula Where (filtro), una cláusula Group by (partición) y una cláusula Order by (ordenación).

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

Tipo de datos devuelto: Un valor por fila, que se puede combinar con otra expresión o utilizar en ella, o agregarse directamente a la tabla resultante creada por la instrucción LOAD.

Argumentos

| Argumento | Descripción |
| --- | --- |
| main\_expr | La expresión de entrada principal que calcula y devuelve la función. Debe ser cualquier expresión basada en una agregación, por ej. Median(Salary). Por ejemplo:<br><br>Window(Median(Salary)) as MedianSalary<br><br>La expresión también puede ser un nombre de campo sin que se aplique ninguna agregación. En este caso, Window lo trata como si la función Only() se aplicara a ese campo. Por ejemplo:<br><br>Window(Salary) as WSalary<br><br>Las expresiones que incluyan agregaciones anidadas o funciones de ventana anidadas, como Window(Sum(Avg(Salary))) o Window(Sum(Window(Salary))), no están permitidas. |
| partition1, partition2 | Después de main\_expr, puede definir cualquier número de particiones. Las particiones son campos que definen con qué combinaciones aplicar las agregaciones. Por ejemplo:<br><br>Window(Avg(Salary), Department) as AvgDepSalary<br><br>Esto calcula el salario medio para cada departamento.<br><br>Cuando se proporcionan varios parámetros de partición, la agregación se aplicará a cada fila con una combinación única de campos de partición. Por ejemplo:<br><br>Window(Avg(Salary), Department, Country) as AvgDepSalaryPerCountry<br><br>Esto calcula el salario medio para cada departamento en cada país. Los departamentos duplicados en diferentes países, como Marketing en Suecia y Marketing en Canadá, se tratarán como particiones diferentes.<br><br>El particionamiento es similar a la agrupación que se obtiene mediante la cláusula group by. Sin embargo, la partición no reduce la cantidad de registros en comparación con la tabla de entrada. |
| sort\_type, [sort\_expr] | Si lo desea, especifique el tipo de ordenación y la expresión de ordenación. Esto define el orden en el que se realiza la agregación. sort\_type es una cadena constante y puede tener uno de tres valores:<br><br><ul> <li> <p> <span>ASC</span>: Orden ascendente.</p> </li> <li> <p> <span>DESC</span>&nbsp;Orden descendente.</p> </li> <li> <p>NONE</p> </li> </ul><br><br>Si define sort\_type ASC o DESC, deberá definir una expresión de ordenación. Con sort\_type NONE, no se debe proporcionar ninguna expresión de ordenación. La expresión de ordenación 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, la agregación dentro de la partición se realiza de forma ascendente por el campo Año.<br><br>Los parámetros de ordenación también afectan al orden en el que una ventana deslizante procesa una tabla. Para ver un ejemplo, consulte: [Ejemplo - Adición de un campo con una ventana deslizante ordenada](https://help.qlik.com/es-ES/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm#Example3). |
| filter\_expr | Si lo desea, agregue una expresión de filtro. Esta es una expresión booleana que decide si el registro deberá incluirse en el cálculo o no.<br><br>Si se proporciona filter\_expr, se debe incluir un tipo de ordenación. Si no se define ningún tipo de ordenación, el argumento puede interpretarse como un parámetro de partición en lugar de como una expresión de filtro. El parámetro filter\_expr se puede omitir por completo o se puede incluir un valor truthy. Ambos dan como resultado que no se utilice ningún filtro, por lo que no se excluye ninguna fila.<br><br>Por ejemplo:<br><br>Window(avg(Salary), Department, 'ASC', Age, Country='US' Or Country='Canada') as AvgDepSalaryInUsOrCanada<br><br>La instrucción Window anterior filtrará cualquier fila en la que el campo Country no sea US o Canada, excluyendo esas filas de la agregación. Seguirá habiendo valores de salida para las filas que se filtraron, pero, al igual que todas las demás filas de salida, solo contendrán resultados agregados de las filas que no estén excluidas por el filtro. |
| start\_expr,end\_expr | Opcionalmente, establezca los argumentos para la funcionalidad de ventana deslizante. Esto limita aún más el número de filas que se agregarán conjuntamente. Cada fila de salida solo incluirá resultados (agregados) de un número de filas anteriores y posteriores a la fila actual. Una ventana deslizante requiere dos argumentos (start\_expr,end\_expr). Si se proporcionan estos argumentos, no se debe omitir el tipo de ordenación. De lo contrario, los argumentos podrían interpretarse como un parámetro de partición en lugar de una ventana deslizante. El parámetro start\_expr,end\_expr comprende:<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, 'NONE', 1, -3, 1) as WSlidingSalaryDepartment<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, 'NONE', 1, UNBOUNDED(), 1) 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, 'NONE', 1, 3, UNBOUNDED()) as WSlidingSalaryDepartment<br><br>En los ejemplos anteriores, se proporciona el tipo de ordenación NONE para que el script pueda distinguir entre los argumentos de partición y los parámetros que van después del tipo de ordenación. |

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

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

#### Ejemplo: adición de 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.

```
[Employees]:
Load 
	*,
	Window(avg(Salary), Department) as AvgDepSalary
Inline [
	Name, Department, Salary, Age, Year, Country
	David, Sales, 11, 32, 2019, Canada
	Sara, Sales, 22, 25, 2022, Sweden
	Nils, Marketing, 33, 18, 2022, Sweden
	Patrick, Marketing, 44, 43, 2022, Canada
	Anna, Sales, 55, 33, 2023, Canada
	Johan, Sales, 66, 26, 2025, Sweden
	Olle, Marketing, 77, 19, 2023, Sweden
	Bonnie, Marketing, 88, 44, 2023, US
]; 
```

Resultados

Resultados al agregar un campo que contiene una agregación

| Name | Department | Salary | Age | Year | Country | AvgDepSalary |
| --- | --- | --- | --- | --- | --- | --- |
| David | Sales | 11 | 32 | 2019 | Canada | 39 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 39 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 61 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 61 |
| Anna | Sales | 55 | 33 | 2023 | Canada | 39 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 39 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 61 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 61 |

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

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

#### Ejemplo: Adición de un campo que contiene una agregación filtrada por valores específicos

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.

```
[Employees]:
Load 
*,
Window(avg(Salary), Department, 'NONE', Country = 'Sweden') as AvgDepSalarySweden
Inline [
	Name, Department, Salary, Age, Year, Country
	David, Sales, 11, 32, 2019, Canada
	Sara, Sales, 22, 25, 2022, Sweden
	Nils, Marketing, 33, 18, 2022, Sweden
	Patrick, Marketing, 44, 43, 2022, Canada
	Anna, Sales, 55, 33, 2023, Canada
	Johan, Sales, 66, 26, 2025, Sweden
	Olle, Marketing, 77, 19, 2023, Sweden
	Bonnie, Marketing, 88, 44, 2023, US
];
```

Resultados

Resultados para añadir un campo que contenga una agregación filtrada para valores específicos

| Name | Department | Salary | Age | Year | Country | AvgDepSalarySweden |
| --- | --- | --- | --- | --- | --- | --- |
| David | Sales | 11 | 32 | 2019 | Canada | 44 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 44 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 55 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 55 |
| Anna | Sales | 55 | 33 | 2023 | Canada | 44 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 44 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 55 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 55 |

## Ejemplo: agregar un campo con una ventana deslizante

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

#### Ejemplo: Adición de 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.

```
[Employees]:
Load 
	*,
	Window(concat(Text(Salary),'-'), Department, 'NONE', -1, 1) as SlidingWindow
Inline [
	Name, Department, Salary, Age, Year, Country
	David, Sales, 11, 32, 2019, Canada
	Sara, Sales, 22, 25, 2022, Sweden
	Nils, Marketing, 33, 18, 2022, Sweden
	Patrick, Marketing, 44, 43, 2022, Canada
	Anna, Sales, 55, 33, 2023, Canada
	Johan, Sales, 66, 26, 2025, Sweden
	Olle, Marketing, 77, 19, 2023, Sweden
	Bonnie, Marketing, 88, 44, 2023, US
];
```

Resultados

Resultados para añadir un campo que contenga una agregación filtrada para valores específicos

| Name | Department | Salary | Age | Year | Country | SlidingWindow |
| --- | --- | --- | --- | --- | --- | --- |
| David | Sales | 11 | 32 | 2019 | Canada | 11-22 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 11-22-55 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 33-44 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 33-44-77 |
| Anna | Sales | 55 | 33 | 2023 | Canada | 22-55-66 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 55-66 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 44-77-88 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 77-88 |

## Ejemplo - Adición de un campo con una ventana deslizante ordenada

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

#### Ejemplo: Adición de 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.

```
[Employees]:
Load 
	*,
	Window(concat(Text(Salary),'-'), Department, 'ASC', Age, -1, 1) as SortedSlidingWindow
Inline [
	Name, Department, Salary, Age, Year, Country
	David, Sales, 11, 32, 2019, Canada
	Sara, Sales, 22, 25, 2022, Sweden
	Nils, Marketing, 33, 18, 2022, Sweden
	Patrick, Marketing, 44, 43, 2022, Canada
	Anna, Sales, 55, 33, 2023, Canada
	Johan, Sales, 66, 26, 2025, Sweden
	Olle, Marketing, 77, 19, 2023, Sweden
	Bonnie, Marketing, 88, 44, 2023, US
];
```

Resultados

Resultados para añadir un campo que contenga una agregación filtrada para valores específicos

| Name | Department | Salary | Age | Year | Country | SortedSlidingWindow |
| --- | --- | --- | --- | --- | --- | --- |
| David | Sales | 11 | 32 | 2019 | Canada | 11-55-66 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 22-66 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 33-77-88 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 44-77 |
| Anna | Sales | 55 | 33 | 2023 | Canada | 11-55 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 11-22-66 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 33-44-77 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 33-88 |

Para comprender mejor cómo afectan las particiones y el orden de clasificación a las agregaciones en una ventana deslizante, ordene la tabla de forma ascendente por nombre.

Resultados al agregar un campo que contiene una agregación filtrada para valores específicos

| Name | Department | Salary | Age | Year | Country | SortedSlidingWindow |
| --- | --- | --- | --- | --- | --- | --- |
| Anna | Sales | 55 | 33 | 2023 | Canada | 11-55 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 33-88 |
| David | Sales | 11 | 32 | 2019 | Canada | 11-55-66 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 11-22-66 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 33-77-88 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 33-44-77 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 44-77 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 22-66 |

En la fila de Johan, la agregación ha incluido los valores de salario de David, así como los de Sara. Estas son las filas anteriores y posteriores dentro de la partición del departamento Sales cuando se ordenan por nombre.

Para ver otro ejemplo que muestre qué filas se incluyen, cambie la expresión Windows de Window(concat(Text(Salary),'-'), Department, 'ASC', Age, -1, 1) a Window(concat(Text(Name),'-'), Department, 'ASC', Age, -1, 1) y vuelva a cargar. Los valores de SortedSlidingWindow de la tabla siguiente proporcionan el nombre de las filas anterior y posterior dentro de la partición Sales.

Resultados para añadir un campo que contenga una agregación filtrada para valores específicos

| Name | Department | Salary | Age | Year | Country | SortedSlidingWindow |
| --- | --- | --- | --- | --- | --- | --- |
| Anna | Sales | 55 | 33 | 2023 | Canada | Anna-David |
| Bonnie | Marketing | 88 | 44 | 2023 | US | Bonnie-Nils |
| David | Sales | 11 | 32 | 2019 | Canada | Anna-David-Johan |
| Johan | Sales | 66 | 26 | 2025 | Sweden | David-Johan-Sara |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | Bonnie-Nils-Olle |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | Nils-Olle-Patrick |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | Olle-Patrick |
| Sara | Sales | 22 | 25 | 2022 | Sweden | Johan-Sara |

## Limitaciones

Window tiene las siguientes limitaciones:

* Window es una función que consume 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 no se puede utilizar en una instrucción load con una cláusula group by.

* Window no se puede utilizar en una instrucción LOAD con una cláusula WHERE

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

* Cuando se utiliza la funcionalidad de ventana deslizante, el tiempo de cálculo aumenta con el tamaño de la ventana. Por lo general, se deben evitar las tablas grandes combinadas con tamaños de ventana grandes.