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:
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 Window en la fila 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 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:
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:
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 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.