# Przykłady niestandardowego kodu SQL dla Direct Query

Poniższe przykłady przedstawiają niektóre opcje dostępne podczas korzystania z niestandardowego kodu SQL dla Direct Query.

## Przykład: Dodawanie niestandardowych definicji SQL do modelu Direct Query

W tym przykładzie niestandardowe definicje SQL dla tabel C, R, N są dodawane do modelu danych w aplikacji Direct Query wraz z dwiema relacjami między tabelami. Funkcja Coalesce służy do sprawdzania, czy wartość pola N\_NATIONKEY jest równa wartości C\_NATIONKEY lub czy obie są równe null.

Wskazówka

Coalesce to zalecany sposób na sprawdzenie, czy wartość pola jest równa null. Więcej informacji zawiera temat [coalescefunkcja skryptu i funkcja wykresu](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ConditionalFunctions/coalesce.htm).

```

LIB CONNECT TO 'CustomSQL:Snowflake_example.com';
Section DirectQuery;
			
C:
Select C_NATIONKEY, Sum(C_ACCTBAL) as C_SUM from tpch1.customer group by C_NATIONKEY;
			
R:
SELECT R_REGIONKEY, R_NAME from tpch1.region;
			
N:
SELECT N_REGIONKEY, N_NAME, N_NATIONKEY from tpch1.nation;
			
Create Relationship Between R, N Matching R_REGIONKEY With N_REGIONKEY;
Create Relationship
	Between Outer Joined N, Inner Joined C On
	(coalesce([N_NATIONKEY], -1) = coalesce([C_NATIONKEY], -1));
```

## Przykład: Dodawanie tabel z niestandardowym kodem SQL do modelu danych utworzonego za pomocą narzędzia Menedżer modelu danych

W tym przykładzie model danych Direct Query jest najpierw tworzony z zawartością obiektu DirectQueryModel.main, który został utworzony za pomocą narzędzia Menedżer modelu danych. Następnie do modelu danych dodawana jest dodatkowa tabela C z polami C\_CUSTKEY i C\_ACCTBAL. Tworzona jest relacja między polem O\_CUSTKEY w tabeli ORDERS a polem C\_CUSTKEY w tabeli C.

```
LIB CONNECT TO 'CustomSQL:Snowflake_example.com';
			
// DMM created model portion includes Orders table.

IMPORT LIVE 'ModelName@obj://DirectQueryModel.Main';

Section DirectQuery;

C: Select C_CUSTKEY, C_ACCTBAL from tpch1.customer;
Create Relationship Between ORDERS, C on (O_CUSTKEY = C_CUSTKEY); 
```

## Przykład: Tworzenie modelu danych Direct Query z tabelą niestandardowego kodu SQL

W tym przykładzie model danych Direct Query jest tworzony z tabelą niestandardowego kodu SQL C ze zmienionymi nazwami pól C\_KEY i C\_BAL. Następnie instrukcja IMPORT LIVE dodaje model danych utworzony w narzędziu Menedżer modelu danych z obiektu DirectQueryModel.main. Ten model danych zawiera tabelę Orders i ma istniejącą relację między tabelami Orders i Customer w tym modelu. Następnie istniejąca relacja między tabelami Customers i Orders zostaje usunięta i definiowana jest nowa relacja między tabelami Orders i C.

```
LIB CONNECT TO 'CustomSQL:Snowflake_example.com';
			
Section DirectQuery;
			
C: Select C_CUSTKEY as C_KEY, C_ACCTBAL as C_BAL from tpch1.customer;
			
// DMM created model portion includes Orders table.
			
IMPORT LIVE 'ModelName@obj://DirectQueryModel.Main';
			
// This relationship was defined using DMM between ORDERS and CUSTOMER, but I want to define my own.
			
Drop Relationship Between ORDERS, CUSTOMER;
Create Relationship Between ORDERS, C on (O_CUSTKEY = C_KEY);
```

## Przykład: Tworzenie modelu danych zawierającego zmienne

W tym przykładzie najpierw definiowana jest zmienna MULT o wartości 100. Następnie jest ona stosowana jako mnożnik do sumy PS\_Supplycost w celu obliczenia pola S.

LIB CONNECT TO 'CustomSQL:Snowflake\_example.com'; Section DirectQuery; LET MULT=100; T1: SELECT PS\_AVAILQTY AS C, SUM(PS\_SUPPLYCOST) \* $(MULT) AS S FROM "TPCH.01"."PARTSUPP" GROUP BY C;

## Przykład: Tworzenie modelu danych za pomocą wyrażeń Qlik

W tym przykładzie do zbudowania modelu danych użyto zarówno zmiennych, jak i wyrażeń. W tabeli ORDERS\_AGGREGATIONS wyrażenia służą do definiowania wartości w ORDERS\_GROUP\_TOTAL\_PRICE. Za każdym razem, gdy w arkuszu zostaną dokonane wybory, które miałyby wpływ na wartości w ORDERS\_GROUP\_TOTAL\_PRICE, wyrażenie zostanie ponownie ocenione na podstawie danych zwróconych przez zapytanie do bazy danych.

IMPORT LIVE 'ModelName@obj://DirectQueryModel.Main'; section DirectQuery; let Aggr1 = 1; let Aggr2 = 0; [GROUPS]: SELECT 0 as GROUP\_CODE, 'NONE' as "GROUP" UNION ALL SELECT 1 as GROUP\_CODE, 'ORDERSTATUS' as "GROUP" UNION ALL SELECT 2 as GROUP\_CODE, 'ORDERPRIORITY' as "GROUP" ; [ORDERS\_AGGREGATIONS]: SELECT 'BY ORDERSTATUS' as "GROUP\_NAME", "O\_ORDERSTATUS" as "ORDERS\_GROUP", sum("O\_TOTALPRICE") as "ORDERS\_GROUP\_TOTAL\_PRICE" FROM "TEST1"."TPCH.01"."ORDERS" WHERE '$(=min({&lt;GROUP\_CODE={0,1}&gt;}[GROUP\_CODE]))' = '1' GROUP BY 1,2 UNION ALL SELECT 'BY ORDERPRIORITY' as "GROUP\_NAME", "O\_ORDERPRIORITY" as "ORDERS\_GROUP", sum("O\_TOTALPRICE") as "ORDERS\_GROUP\_TOTAL\_PRICE" FROM "TEST1"."TPCH.01"."ORDERS" WHERE '$(=min({&lt;GROUP\_CODE={0,2}&gt;}[GROUP\_CODE]))' = '2' GROUP BY 1,2; ; [ORDERS\_AGGREGATIONS\_VARS]: SELECT 'BY ORDERSTATUS' as "GROUP\_NAME\_V", "O\_ORDERSTATUS" as "ORDERS\_GROUP\_V", sum("O\_TOTALPRICE") as "ORDERS\_GROUP\_TOTAL\_PRICE\_V" FROM "TEST1"."TPCH.01"."ORDERS" WHERE $(=Aggr1) = 1 GROUP BY 1,2 UNION ALL SELECT 'BY ORDERPRIORITY' as "GROUP\_NAME\_V", "O\_ORDERPRIORITY" as "ORDERS\_GROUP\_V", sum("O\_TOTALPRICE") as "ORDERS\_GROUP\_TOTAL\_PRICE\_V" FROM "TEST1"."TPCH.01"."ORDERS" WHERE $(=Aggr2) = 1 GROUP BY 1,2; ;

## Przykład: Używanie funkcji w niestandardowych wyrażeniach SQL

Poniższa niestandardowa instrukcja SQL demonstruje proste użycie wyrażenia silnika $(=…), które jest rozwijane podczas wykonywania w niestandardowym kodzie SQL. Wyrażenie to pobiera wiersze z odległej bazy danych w zależności od informacji o użytkowniku sesji aplikacji. Gdy wykres, zapytanie lub wybór są wykonywane przez użytkownika sesji aplikacji Direct Query o adresie e-mail 'user1@qlik.com', wówczas dynamiczne pobieranie wierszy danych z odległej bazy danych SQL jest filtrowane tak, aby pasowało tylko do wierszy, w których pole C\_NAME zawiera wartość 'Customer#000000007'. W przeciwnym razie, jeśli adres e-mail użytkownika sesji aplikacji Direct Query nie brzmi 'user1@qlik.com', pobrane i pokazane zostaną tylko te wiersze, w których pole C\_NAME zawiera wartość 'Customer#000000009'.

T8: SELECT \* FROM mydb.tpch01.customer WHERE mydb.tpch01.customer.C\_NAME = '$(=if(GetUserAttr('userEmail') = 'user1@qlik.com', 'Customer#000000007','Customer#000000009'))';