# Unless

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

Składnia:

(Unless condition statement | exitstatement Unless condition )

Instrukcja statement lub exitstatement zostanie wykonana tylko wtedy, gdy condition przyjmie wartość False.

Prefiks unless 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.

Argumenty

| Argument | Opis |
| --- | --- |
| condition | Wyrażenie logiczne, którego ocena zwraca 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. |

## Kiedy używać

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

Trzy poniższe wiersze pokazują różne możliwości użycia funkcji `Unless`:

`exit script 
 unless A=1;` `unless A=1 
 LOAD  * from myfile.csv;` `unless A=1 
 when B=2 drop table Tab1;`

## 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ład 1 – Prefiks Unless

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

#### Skrypt ładowania i wyniki

Przegląd

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

Skrypt ładowania zawiera:

* Utworzenie zmiennej A, której zostaje nadana wartość 1.

* Zestaw danych, który jest ładowany do tabeli o nazwie Transactions, chyba że zmienna A = 2.

Skrypt ładowania

```
LET A = 1;

UNLESS A = 2

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 `Unless`, czego wynikiem jest wartość logiczna `FALSE`. W efekcie skrypt kontynuuje wykonywanie instrukcji `Load`. W tabeli wyników widać wszystkie rekordy z tabeli `Transactions`.

Jeśli wartość tej zmiennej zostanie ustawiona na 2, do modelu danych nie zostaną załadowane żadne dane.

## Przykład 2 – Sufiks Unless

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

#### Skrypt ładowania i wyniki

Przegląd

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

Skrypt ładowania zaczyna od załadowania początkowego zestawu danych do tabeli o nazwie `Transactions`. Następnie skrypt zostaje zamknięty, chyba że w tabeli `Transactions` jest mniej niż dziesięć rekordów.

Jeśli ten warunek nie spowoduje zamknięcia skryptu, do tabeli `Transactions` zostaje dołączony dalszy zestaw transakcji i proces zostaje powtórzony.

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 unless 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 unless 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 unless 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 skryptu ładowania znajduje się siedem rekordów.

Pierwszy zestaw danych (z `id` transakcji od 1 do 7) zostaje załadowany do aplikacji. Warunek `Unless` sprawdza, czy w tabeli `Transactions` znajduje się mniej niż 10 wierszy. Zostaje zwrócona wartość `TRUE`, więc do aplikacji zostaje załadowany drugi zestaw danych (z transakcjami o `id` od 8 do 14). Drugi warunek `Unless` sprawdza, czy w tabeli `Transactions` znajduje się mniej niż 10 rekordów. Zostaje zwrócona wartość `FALSE`, więc skrypt kończy działanie.

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

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

#### Skrypt ładowania i wyniki

Przegląd

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

W tym przykładzie jest tworzony zestaw danych w formie tabeli o nazwie `Transactions` zawierającej jedną transakcję. Następnie zostaje wykonana pętla „for” zawierająca dwie zagnieżdżone instrukcje Unless, które sprawdzają następujące warunki:

1. Czy w tabeli `Transactions` znajduje się więcej niż 100 rekordów

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

Jeśli te warunki nie są spełnione (`FALSE`), następuje wygenerowanie siedmiu kolejnych rekordów, które zostają dołączone do istniejącej tabeli `Transactions`. Ten proces jest powtarzany aż jedna z dwóch transakcji zwróci wartość `TRUE`.

Skrypt ładowania

```
Transactions:
Load
        0 as id
Autogenerate 1;

For i = 1 to 100
        unless NoOfRows('Transactions') > 100 unless mod(NoOfRows('Transactions'),6) = 0
                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 wynikowa

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

Instrukcje Unless zagnieżdżone w pętli „for” sprawdzają następujące warunki:

1. Czy w tabeli `Transactions` znajduje się więcej niż 100 wierszy?

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

Jeśli obie instrukcje Unless zwracają wartość `FALSE`, następuje wygenerowanie siedmiu kolejnych rekordów, które zostają dołączone do istniejącej tabeli `Transactions`.

Instrukcje te zwracają wartość `FALSE` pięć razy, po czym liczba wierszy w tabeli `Transactions` wynosi 36.

W tym momencie druga instrukcja `Unless` zwraca wartość `TRUE`, przez co znajdująca się za nią instrukcja ładowania nie zostaje wykonana.