# When

Prefiks i sufiks when jest używany do tworzenia klauzuli warunkowej określającej, czy dana instrukcja lub klauzula wyjściowa ma być wykonywana czy też nie. Mogą być one traktowane jako wygodna alternatywa pełnej instrukcji if..end if.

Składnia:

(when condition statement | exitstatement when condition )

Typ zwracanych danych: Logiczna

W Qlik Sense wartość logiczna Prawda jest reprezentowana przez -1, a wartość Fałsz jest reprezentowana przez 0.

Instrukcja statement lub exitstatement zostanie wykonana tylko wtedy, gdy warunek przyjmie wartość TRUE.

Prefiks `When` może być używany do instrukcji, które już składają się z jednej lub wielu innych instrukcji, włącznie z dodatkowymi prefiksami `When` lub `Unless`.

Kiedy używać

Instrukcja `When` zwraca wynik logiczny. Normalnie tego typu funkcje są używane jako warunek, gdy użytkownik chce załadować lub wykluczyć wybrane części skryptu.

Argumenty

| Argument | Opis |
| --- | --- |
| condition | Wyrażenie logiczne zwracające wartość TRUE lub FALSE |
| statement | Dowolna instrukcja skryptu aplikacji Qlik Sense poza instrukcjami sterowania. |
| exitstatement | Klauzula exit for, exit do lub exit sub albo instrukcja exit script. |

## Ustawienia regionalne

Jeżeli nie podano inaczej, w przykładach w tym temacie stosowany jest następujący format daty: MM/DD/YYYY. Format daty jest określony w instrukcji `SET DateFormat` w skrypcie ładowania danych. Domyślny format daty w Twoim systemie może być inny ze względu na ustawienia regionalne i inne czynniki. Formaty zastosowane w przykładach można zmienić, aby dostosować je do własnych wymagań. Zamiast tego można też zmienić formaty w skrypcie ładowania, aby pasowały do tych przykładów.

Domyślne ustawienia regionalne w aplikacjach są oparte na regionalnych ustawieniach systemu komputera lub serwera, na którym zainstalowano Qlik Sense. Jeśli serwer Qlik Sense, do którego uzyskujesz dostęp, jest ustawiony na Szwecję, Edytor ładowania danych użyje szwedzkich ustawień regionalnych dla dat, godziny i waluty. Te ustawienia regionalne nie są związane z językiem wyświetlanym w interfejsie użytkownika Qlik Sense. Qlik Sense będzie wyświetlane w tym samym języku co używana przez Ciebie przeglądarka.

Przykłady funkcji

| Przykład | Wynik |
| --- | --- |
| ` exit script when A=1;  ` | Kiedy instrukcja `A=1` zwraca wartość TRUE, następuje zakończenie wykonywania skryptu. |
| `when A=1 LOAD * from myfile.csv;` | Kiedy instrukcja `A=1` zwraca wartość TRUE, następuje załadowanie pliku `myfile.csv`. |
| `when A=1 unless B=2 drop table Tab1;` | Kiedy instrukcja `A=1` zwraca wartość TRUE, a `B=2` zwraca FALSE, następuje usunięcie tabeli `Tab1`. |

## Przykład 1 – Prefiks When

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

#### Skrypt ładowania i wyniki

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Zestaw danych zawierający daty i kwoty, który został wysłany do tabeli o nazwie `Transactions`.

* Instrukcja `Let`, która oświadcza, że zmienna `A` jest utworzona i ma wartość `1`.

* Warunek `When` według którego, jeśli `A` równa się `1`, to skrypt ma kontynuować ładowanie.

Skrypt ładowania

```
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 
]; 
```

Wyniki

Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:

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

Tabela wynikowa

| id | date | kwota |
| --- | --- | --- |
| 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 |

Ponieważ na początku skryptu zmiennej `A` została przypisana wartość `1`, następuje sprawdzenie warunku znajdującego się za prefiksem `When`, czego wynikiem jest wartość logiczna TRUE. Ponieważ zostaje zwrócona wartość TRUE, skrypt kontynuuje wykonywanie instrukcji ładowania. Widać wszystkie rekordy z tabeli wyników.

Jeśli wartość tej zmiennej zostanie ustawiona na wartość różną od `1`, do modelu danych nie zostaną załadowane żadne dane.

## Przykład 2 – sufiks When

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

#### Skrypt ładowania i wyniki

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Trzy zestawy danych zawierające daty i kwoty, które zostały wysłany do tabeli o nazwie `Transactions`.

  * Pierwszy zestaw zawiera transakcje 1-7.

  * Pierwszy zestaw zawiera transakcje 8-14.

  * Pierwszy zestaw zawiera transakcje 15-21.

* Warunek `When`, który określa, czy tabela `Transactions` zawiera więcej niż dziesięć wierszy. Jeśli którakolwiek z instrukcji `When` zwraca wartość TRUE, następuje zakończenie wykonywania skryptu ładowania. Ten warunek został umieszczony na końcu każdego z trzech zestawów danych.

Skrypt ładowania

```
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 ; 
```

Wyniki

Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:

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

Tabela wynikowa

| id | date | kwota |
| --- | --- | --- |
| 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 |

W każdym z trzech zestawów danych znajduje się siedem transakcji. Pierwszy zestaw danych zawiera transakcje 1-7 i zostaje załadowany do aplikacji. Warunek `When` znajdujący się za tą instrukcją ładowania zwraca wartość FALSE, ponieważ w tabeli `Transactions` znajduje się mniej niż dziesięć wierszy. Skrypt ładowania przechodzi do następnego zestawu danych.

Drugi zestaw danych zawiera transakcje 8-14 i zostaje załadowany do aplikacji. Drugi warunek `When` zwraca wartość TRUE, ponieważ w tabeli `Transactions` znajduje się więcej niż dziesięć wierszy. W efekcie skrypt kończy działanie.

## Przykład 3 – Kilka prefiksów When

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

#### Skrypt ładowania i wyniki

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Został utworzony zestaw danych zawierający jedną transakcję w postaci tabeli o nazwie `Transactions`.

* Pętla `For` zawiera dwa zagnieżdżone warunki `When`, które sprawdzają, czy:

  1. W tabeli `Transactions` jest mniej niż `100` rekordów.

  2. Liczba rekordów w tabeli `Transactions` jest wielokrotnością liczby `6`.

Skrypt ładowania

```
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 
```

Wyniki

Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj to pole jako wymiar:

* `id`

Tabela wyników pokazuje tylko pięć pierwszych identyfikatorów transakcji, ale skrypt ładowania tworzy 36 wierszy, po czym kończy działanie, gdy zostaje spełniony warunek `When`.

Tabela wynikowa

| id |
| --- |
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| Jeszcze 30 wierszy |

Zagnieżdżone warunki `When` w pętli `For` dają odpowiedzi na następujące pytania:

* Czy w tabeli `Transactions` znajduje się mniej niż 100 wierszy?

* Czy suma rekordów w tabeli `Transactions` nie jest wielokrotnością liczby 6?

Jeśli oba warunki `When` zwracają wartość TRUE, następuje wygenerowanie siedmiu kolejnych rekordów, które zostają dołączone do istniejącej tabeli `Transactions`.

Warunki `When` zwracają wartość TRUE pięć razy. W tym momencie w tabeli `Transactions` znajduje się 36 wierszy danych.

Kiedy w tabeli `Transactions` jest 36 wierszy danych, druga instrukcja `When` zwraca wartość FALSE, przez co znajdująca się za nią instrukcja ładowania nie zostaje wykonana.