Saltar al contenido principal Saltar al contenido complementario

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://DataFiles/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 (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:

Window(Median(Salary)) as MedianSalary

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:

Window(Salary,Department) as WSalary

 

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.

Ejemplo:

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

Window(Avg(Salary), Unit, Department, Country) as AvgSalary

En el anterior, las particiones son Unit, Department y Country.

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:

  • ASC Orden ascendente.

  • DESC Orden descendente.

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.

Por ejemplo:

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

En el ejemplo anterior, los resultados dentro de la partición están ordenados de forma ascendente por el campo Year.

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.

Este parámetro se puede omitir por completo y el resultado debería ser que no hay filtro.

Por ejemplo:

Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)
as wAvgSalary) as wAvgSalaryIfEmpIs3or7
[start_expr,end_expr]

Opcionalmente, establezca el argumento para la funcionalidad de ventana deslizante. Una ventana deslizante requiere dos argumentos:

  • Expresión de inicio: el número de filas anteriores a la fila actual que se incluirán en la ventana.

  • Expresión final: el número de filas después de la fila actual que se incluirán en la ventana.

Por ejemplo, si desea incluir las 3 filas anteriores, la fila actual y la siguiente fila:

Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, -3, 1)
as WSalaryDepartment

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:

Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, UNBOUNDED(), 1)
as WSlidingSalaryDepartment

Por ejemplo, para incluir la tercera fila de la fila actual y todas las filas posteriores:

Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, 3, UNBOUNDED())
as WSlidingSalaryDepartment

Ejemplo: agregar un campo que contiene una agregación

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

Ejemplo: agregar un campo con una ventana deslizante

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.

¿Esta página le ha sido útil?

No dude en indicarnos en qué podemos mejorar si encuentra algún problema en esta página o su contenido, como, por ejemplo, errores tipográficos, pasos que falta o errores técnicos.