# Aangepaste SQL-voorbeelden voor Direct Query

De volgende voorbeelden tonen enkele opties bij het gebruik van aangepaste SQL voor Direct Query.

## Voorbeeld: Aangepaste SQL-definities toevoegen aan het Direct Query-model

In dit voorbeeld worden aangepaste SQL-definities voor de tabellen C, R en N toegevoegd aan het gegevensmodel in de Direct Query-applicatie, samen met twee relaties tussen de tabellen. De functie Coalesce wordt gebruikt om te controleren of een veldwaarde van N\_NATIONKEY gelijk is aan de waarde van C\_NATIONKEY, of dat beide gelijk zijn aan null.

Tip

Coalesce is de aanbevolen manier om een controle op te nemen om te zien of een veldwaarde gelijk is aan null. Zie voor meer informatie [coalesceScript- en diagramfunctie](https://help.qlik.com/nl-NL/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));
```

## Voorbeeld: Tabellen met aangepaste SQL toevoegen aan een gegevensmodel dat is gemaakt met Gegevensmodelbeheer

In dit voorbeeld wordt het Direct Query-gegevensmodel eerst opgebouwd met de inhoud van het DirectQueryModel.main-object, dat is gemaakt met Gegevensmodelbeheer. Vervolgens wordt een extra tabel, C met de velden C\_CUSTKEY en C\_ACCTBAL, toegevoegd aan het gegevensmodel. Er wordt een relatie gelegd tussen het veld O\_CUSTKEY in ORDERS en het veld C\_CUSTKEY in 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); 
```

## Voorbeeld: Een Direct Query-gegevensmodel opbouwen met een aangepaste SQL-tabel

In dit voorbeeld wordt het Direct Query-gegevensmodel opgebouwd met een aangepaste SQL-tabel, C, met de hernoemde velden C\_KEY en C\_BAL. Vervolgens voegt IMPORT LIVE het gegevensmodel toe dat is gemaakt in Gegevensmodelbeheer vanuit DirectQueryModel.main. Dit gegevensmodel bevat de tabel Orders en heeft een bestaande relatie tussen Orders and Customer in dat model. Daarna wordt de bestaande relatie tussen Customers en Orders verbroken en wordt er een nieuwe relatie gedefinieerd tussen Orders en 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);
```

## Voorbeeld: Een gegevensmodel opbouwen met variabelen

In dit voorbeeld wordt de variabele MULT eerst gedefinieerd met een waarde van 100. Vervolgens wordt deze toegepast als vermenigvuldigingsfactor op de som van PS\_Supplycost om het veld S te berekenen.

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;

## Voorbeeld: Een gegevensmodel opbouwen met Qlik-expressies

In dit voorbeeld worden zowel variabelen als expressies gebruikt om het gegevensmodel op te bouwen. In de tabel ORDERS\_AGGREGATIONS worden expressies gebruikt om de waarden in ORDERS\_GROUP\_TOTAL\_PRICE te definiëren. Telkens wanneer er selecties worden gemaakt in een werkblad die van invloed zijn op de waarden in ORDERS\_GROUP\_TOTAL\_PRICE, wordt de expressie opnieuw geëvalueerd op de gegevens die door de query naar de database worden geretourneerd.

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

## Voorbeeld: Functies gebruiken in aangepaste SQL-expressies

De volgende aangepaste SQL-instructie toont een eenvoudig gebruik van een $(=…) Engine-expressie die wordt uitgevouwen wanneer deze in de aangepaste SQL wordt uitgevoerd. Deze expressie haalt rijen uit de externe database op, afhankelijk van de gebruikersinformatie van de applicatiesessie. Wanneer een diagram, query of selectie wordt uitgevoerd door een gebruiker van een Direct Query-applicatiesessie met het e-mailadres 'user1@qlik.com', dan wordt het dynamisch ophalen van gegevensrijen uit de externe SQL-database gefilterd om alleen overeen te komen met de rijen waarin het veld C\_NAME de waarde 'Customer#000000007' bevat. Anders, als het e-mailadres van de sessiegebruiker van de Direct Query-applicatie niet 'user1@qlik.com' is, worden alleen de rijen opgehaald en getoond waarin het veld C\_NAME de waarde 'Customer#000000009' bevat.

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