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 produce un único valor para cada fila.
Puede utilizar las funciones Window para realizar operaciones como:
-
Comparación de un valor numérico individual de una fila con la media, el máximo o el mínimo dentro de una ventana de la tabla.
-
Calcular el rango 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 una sentencia LOAD residente. Por ejemplo, consulte Ejemplo: agregar un campo que contiene una agregación.
El nombre puede omitirse, pero esto da lugar a que el nombre del campo se ajuste a la totalidad de la expresión de la función Window. Por ejemplo, AvgDepSalary en el ejemplo siguiente:
Se recomienda dar a la función Window un nombre de campo.
Window admite funciones generales, como el redondeo o las operaciones numéricas básicas. Por ejemplo:
La función Window explora la tabla completa. En términos de consumo de memoria, el coste de esta exploración 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, es siempre preferible a una tabla con muchos campos.
Normalmente, una función Window consume entre 2 y 4 veces más memoria y tarda entre 2 y 4 veces más en recargarse si se compara 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).
Sintaxis:
Tipo de datos de retorno: un valor por fila, que puede combinarse o utilizarse en otra expresión, o añadirse directamente a la tabla resultante creada por la sentencia LOAD.
Argumentos:
Argumento | Descripción |
---|---|
main_expr | La expresión de entrada principal 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 La expresión también puede ser un nombre de campo sin aplicar ninuna agregación. En este caso, Window lo trata como la función Only() se aplica a ese campo. Por ejemplo: Window(Salary) as WSalary No se permiten expresiones que incluyan agregaciones anidadas o funciones de ventana anidadas, como Window(Sum(Avg(Salary))) o Window(Sum(Window(Salary))). |
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: Window(Avg(Salary), Department) as AvgDepSalary Así se calcula el salario medio de cada departamento. 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: Window(Avg(Salary), Department, Country) as AvgDepSalaryPerCountry Así se calcula el salario medio de 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. La partición es similar a la agrupación que se consigue con la cláusula group by. Sin embargo, la partición no reduce el número de registros en comparación con la tabla de entrada. |
sort_type, [sort_expr] | Opcionalmente, especifique el tipo de ordenación y la expresión de orden. Define el orden en que se realiza la agregación. sort_type es una cadena constante y puede tener uno de estos tres valores:
Si define sort_type ASC o DESC, deberá definir una expresión de ordenación. Con sort_type NONE, no debe proporcionarse ninguna expresión de ordenación. La expresión de ordenación decide el orden de las filas dentro de una partición. Por ejemplo: Window(RecNo(), Department, 'ASC', Year) En el ejemplo anterior, la agregación dentro de la partición se realiza de forma ascendente por el campo Year. Los parámetros de ordenación también afectan al orden en que una ventana móvil (también denominada deslizante) procesa una tabla. Ejemplo: añadir un campo con una ventana móvil ordenada |
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. Si se proporciona filter_expr, deberá incluirse 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 puede omitirse por completo o puede incluirse un valor verdadero. En ambos casos no se utiliza ningún filtro, por lo que no se excluye ninguna fila. Por ejemplo: Window(avg(Salary), Department, 'ASC', Age, Country='US' Or Country='Canada') as AvgDepSalaryInUsOrCanada La sentencia Window anterior filtrará cualquier fila cuyo campo País no sea EE.UU. o Canadá, excluyendo esas filas de la agregación. Seguirá habiendo valores de salida para las filas que se filtraron, pero al igual que el resto de 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 la ventana móvil. Esto limita aún más el número de filas que se han de agregar. Cada fila de salida incluirá únicamente los resultados (agregados) de un número de filas precedentes y sucesivas a la fila actual. Una ventana móvil requiere dos argumentos (start_expr,end_expr). Si se proporcionan esos argumentos, no debe omitirse el tipo de ordenación. De lo contrario, los argumentos pueden interpretarse como un parámetro de partición en lugar de ventana móvil. El parámetro start_expr,end_expr comprende:
Por ejemplo, si quisiera incluir las 3 filas anteriores, la fila actual y la fila siguiente: Window(concat(Text(Salary),'-'), Department, 'NONE', 1, -3, 1) as WSlidingSalaryDepartment 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, 'NONE', 1, 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, 'NONE', 1, 3, UNBOUNDED()) as WSlidingSalaryDepartment 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 vienen después del tipo de ordenación. |
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 móvil (también denominada 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 no puede utilizarse en una sentencia LOAD con una cláusula group by.
Window necesita poder explorar toda la tabla.
WRank(), RecNo() y RowNo() no se pueden usar con Window cuando se utiliza la función de ventana móvil.
Cuando se utiliza la función de ventana móvil, el tiempo de cálculo aumenta con el tamaño de la ventana. Por lo general deben evitarse las tablas grandes combinadas con ventanas de gran tamaño.