Saltar al contenido principal Saltar al contenido complementario

Función de script: Window

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 sí 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 agregarla 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);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 Window en la fila 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 que calcula y devueve la función. Debe ser cualquier expresión basada en una agregación, por ej. Median(Salary). Por ejemplo:

Window(Median(Salary)) as MedianSalary

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

Window(Salary,Department) as WSalary

 

Opcionalmente, puede definir la partición con la expresión de entrada. La partición es la misma que la agrupación lograda 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]FROM [lib://AttachedFiles/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 ejemplo anterior, las particiones son Unit, Department y Country.

Las particiones no son obligatorias, pero sí para que los campos tengan ventanas adecuadas.

sort_type, [sort_expr]]

Si lo desea, especifique el tipo de ordenación y la expresión de ordenación. sort_type puede tener uno de dos valores:

  • ASC: orden ascendente.

  • DESC: orden descendente.

Si define sort_type, deberá definir una expresión de ordenación. 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 se ordenan de forma ascendente por el campo Year.

Nota informativaEl tipo y la expresión de ordenación solo se requieren principalmente con las funciones RecNo y WRank.
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.

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 inicial: 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 filtrada por valores específicos

Ejemplo: agregar un campo con una ventana deslizante

Limitaciones

Window tiene las siguientes limitaciones:

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

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

Únase al Programa de modernización de la analítica

Remove banner from view

Modernícese sin comprometer sus valiosas aplicaciones de QlikView con el Programa de modernización de la analítica. Haga clic aquí para obtener más información o contactar con nosotros: ampquestions@qlik.com