# When

El prefijo y sufijo when se utiliza para crear una cláusula condicional que determina si una sentencia o cláusula de salida debería ejecutarse o no. Puede verse como una alternativa compacta a la sentencia if..end if completa.

Sintaxis:

(when condition statement | exitstatement when condition )

Tipo de datos que devuelve: Booleano

En Qlik Sense, el valor booleano verdadero viene representado por -1 y el valor falso está representado por 0.

Las instrucciones statement o exitstatement solo se ejecutarán si la condición se evalúa como verdadera, TRUE.

El prefijo `When` se puede usar en sentencias que ya tienen una o varias sentencias adicionales, incluyendo los prefijos `When` o `Unless`.

Cuándo se utiliza

La sentencia `When` devuelve un resultado booleano. Por lo general, este tipo de función se utilizará como condición cuando el usuario desee cargar o excluir partes de un script.

Argumentos

| Argumento | Descripción |
| --- | --- |
| condition | Una expresión lógica que devuelve TRUE o FALSE |
| statement | Cualquier sentencia de script de Qlik Sense, excepto las sentencias de control. |
| exitstatement | Una cláusula exit for, exit do o exit sub o una sentencia exit script. |

## Configuraciones regionales

A menos que se especifique algo distinto, los ejemplos de este tema utilizan el siguiente formato de fecha: MM/DD/YYYY. El formato de fecha se especifica en la sentencia `SET DateFormat` de su script de carga de datos. El formato de fecha predeterminado puede ser diferente en su sistema, debido a su configuración regional y otros factores. Puede cambiar el formato en los ejemplos a continuación para ajustarlo a sus necesidades. O puede cambiar los formatos en su script de carga para que coincidan con estos ejemplos.

La configuración regional predeterminada en las aps se basa en la configuración del sistema regional de la computadora o servidor donde esté instalado Qlik Sense. Si el servidor de Qlik Sense al que está accediendo está configurado en Suecia, el editor de carga de datos utilizará la configuración regional sueca para las fechas, la hora y la moneda. Estos ajustes de formato regional no están relacionados con el idioma mostrado en la interfaz de usuario de Qlik Sense. Qlik Sense se mostrará en el mismo idioma que esté utilizando en su navegador.

Ejemplos de funciones

| Ejemplo | Resultado |
| --- | --- |
| ` exit script when A=1;  ` | Cuando la sentencia `A=1` devuelve TRUE, el script se detendrá. |
| `when A=1 LOAD * from myfile.csv;` | Cuando la sentencia `A=1` devuelve TRUE, el archivo `myfile.csv` se cargará. |
| `when A=1 unless B=2 drop table Tab1;` | Cuando la sentencia `A=1` devuelve TRUE, y si `B=2` devuelve FALSE, entonces se descartará la tabla `Tab1`. |

## Ejemplo 1: el prefijo When

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/When.htm)

#### Script de carga y resultados

Vista general

Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.

El script de carga contiene:

* Un conjunto de datos con fechas y cantidades que se envía a una tabla denominada "`Transactions`".

* La sentencia `Let` que establece que la variable `A` se ha creado y tiene el valor de `1`.

* La condición `When` que porporciona la condición de que si `A` es igual a `1`, entonces el script continuará cargándose.

Script de carga

```
LET A = 1; 

WHEN A = 1 
 
Transactions: 
LOAD  
*  
Inline [ 
id, date, amount 
1, 08/30/2018, 23.56 
2, 09/07/2018, 556.31 
3, 09/16/2018, 5.75 
4, 09/22/2018, 125.00 
5, 09/22/2018, 484.21 
6, 09/22/2018, 59.18 
7, 09/23/2018, 177.42 
]; 
```

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue estos campos como dimensiones:

* `id`
* `date`
* `amount`

Tabla de resultados

| ID | fecha | cantidad |
| --- | --- | --- |
| 1 | 08/30/2018 | 23.56 |
| 2 | 09/07/2018 | 556.31 |
| 3 | 09/16/2018 | 5.75 |
| 4 | 09/22/2018 | 125.00 |
| 5 | 09/22/2018 | 484.21 |
| 6 | 09/22/2018 | 59.18 |
| 7 | 09/23/2018 | 177.42 |

Como a la variable `A` se le asigna el valor de `1` al comienzo del script, se evalúa la condición que sigue al prefijo `When`, devolviendo un resultado de TRUE. Debido a que devuelve un resultado TRUE, el script continúa ejecutando la instrucción de carga. Se pueden ver todos los registros de la tabla de resultados.

Si el valor de esta variable se estableciera en cualquier valor que no fuera igual a `1`, no se cargarían datos en el modelo de datos.

## Ejemplo 2: el sufijo When

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/When.htm)

#### Script de carga y resultados

Vista general

Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.

El script de carga contiene:

* Tres conjuntos de datos con fechas y cantidades que se envían a una tabla denominada "`Transactions`".

  * El primer conjunto de datos contiene las transacciones 1-7.

  * El segundo conjunto de datos contiene las transacciones 8-14.

  * El tercer conjunto de datos contiene las transacciones 15-21.

* Una condición `When` que determina si la tabla "`Transactions`" contiene más de diez filas. Si alguna de las sentencias `When` se evalúa como TRUE, el script de carga se detendrá. Esta condición se coloca al final de cada uno de los tres conjuntos de datos.

Script de carga

```
Transactions: 
LOAD  
*  
Inline [ 
id, date, amount 
1, 08/30/2018, 23.56 
2, 09/07/2018, 556.31 
3, 09/16/2018, 5.75 
4, 09/22/2018, 125.00 
5, 09/22/2018, 484.21 
6, 09/22/2018, 59.18 
7, 09/23/2018, 177.42 
]; 
 
exit script when NoOfRows('Transactions') > 10 ; 

Concatenate
LOAD 
*  
Inline [ 
id, date, amount 
8, 10/01/2018, 164.27 
9, 10/03/2018, 384.00 
10, 10/06/2018, 25.82 
11, 10/09/2018, 312.00 
12, 10/15/2018, 4.56 
13, 10/16/2018, 90.24 
14, 10/18/2018, 19.32 
]; 

exit script when NoOfRows('Transactions') > 10 ; 
 
Concatenate 
LOAD 
*  
Inline [ 
id, date, amount 
15, 10/01/2018, 164.27 
16, 10/03/2018, 384.00 
17, 10/06/2018, 25.82 
18, 10/09/2018, 312.00 
19, 10/15/2018, 4.56 
20, 10/16/2018, 90.24 
21, 10/18/2018, 19.32 
]; 
 
exit script when NoOfRows('Transactions') > 10 ; 
```

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue estos campos como dimensiones:

* `id`
* `date`
* `amount`

Tabla de resultados

| ID | fecha | cantidad |
| --- | --- | --- |
| 1 | 08/30/2018 | 23.56 |
| 2 | 09/07/2018 | 556.31 |
| 3 | 09/16/2018 | 5.75 |
| 4 | 09/22/2018 | 125.00 |
| 5 | 09/22/2018 | 484.21 |
| 6 | 09/22/2018 | 59.18 |
| 7 | 09/23/2018 | 177.42 |
| 8 | 10/01/2018 | 164.27 |
| 9 | 10/03/2018 | 384.00 |
| 10 | 10/06/2018 | 25.82 |
| 11 | 10/09/2018 | 312.00 |
| 12 | 10/15/2018 | 4.56 |
| 13 | 10/16/2018 | 90.24 |
| 14 | 10/18/2018 | 19.32 |

Hay siete transacciones en cada uno de los tres conjuntos de datos. El primer conjunto de datos contiene las transacciones 1-7 y se carga en la aplicación. La condición `When` que sigue a esta instrucción de carga se evalúa como FALSE porque hay menos de diez filas en la tabla "`Transactions`". El script de carga continúa con el siguiente conjunto de datos.

El segundo conjunto de datos contiene las transacciones 8-14 y se carga en la aplicación. La segunda condición `When` devuelve TRUE porque hay más de diez filas en la tabla "`Transactions`". Por lo tanto, el script termina.

## Ejemplo 3: múltiples prefijos When

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/When.htm)

#### Script de carga y resultados

Vista general

Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.

El script de carga contiene:

* Se crea un conjunto de datos que contiene una única transacción como una tabla llamada "`Transactions`".

* Un bucle `For` que se activa contiene dos condiciones `When` anidadas que evalúan si:

  1. Hay menos de `100` registros en la tabla "`Transactions`".

  2. El número de registros en la tabla "`Transactions`" no es un múltiplo de `6`.

Script de carga

```
RowsCheck = NoOfRows('Transactions') < 100 or mod(NoOfRows('Transactions'),6) <> 0;
Transactions: 
Load 
	0 as id 
Autogenerate 1; 
For i = 1 to 100 
	when(RowsCheck)
		Concatenate 
	Load 
		if(isnull(Peek(id)),1,peek(id)+1) as id 
	Autogenerate 7;     
next i 
```

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue este campo como dimensión:

* `id`

La tabla de resultados solo muestra los primeros cinco ID de transacción, pero el script de carga crea 36 filas y luego finaliza una vez que se cumple la condición `When`.

Tabla de resultados

| ID |
| --- |
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| +30 filas más |

Las condiciones anidadas `When` en el ciclo `For` evalúan las siguientes preguntas:

* ¿Hay menos de 100 filas en la tabla "`Transactions`"?

* ¿El número total de registros en la tabla "`Transactions`" no es un múltiplo de 6?

Cada vez que ambas condiciones `When` devuelven un valor de TRUE, se generan y concatenan otros siete registros en la tabla "`Transactions`" existente.

Las condiciones `When` devuelven un valor TRUE cinco veces. En ese punto, hay un total de 36 filas de datos en la tabla "`Transactions`".

Cuando se crean 36 filas de datos en la tabla "`Transactions`", la segunda instrucción `When` devuelve un valor de FALSE y, por lo tanto, la instrucción de carga que sigue a esta ya no se ejecutará.