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:
Window admite funciones generales, como redondeo u operaciones numéricas básicas. Por ejemplo:
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:
Tipo de datos que devuelve: un nuevo campo agregado a la tabla resultante creada por la sentencia LOAD.
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:
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:
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) 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) 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()) |
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.