# Anpassade SQL-exempel för Direct Query

Följande exempel visar några av alternativen när du använder anpassad SQL för Direct Query.

## Exempel: Lägga till anpassade SQL-definitioner i Direct Query-modellen

I det här exemplet läggs anpassade SQL-definitioner för tabellerna C, R, N till i datamodellen i Direct Query-applikationen tillsammans med två relationer mellan tabeller. Funktionen Coalesce används för att kontrollera om ett fältvärde för N\_NATIONKEY är lika med värdet för C\_NATIONKEY, eller om båda är lika med null.

Anteckning om tips

Coalesce är det rekommenderade sättet att inkludera en kontroll för att se om ett fältvärde är lika med null. Mer information finns i [coalesceSkript- och diagramfunktion](https://help.qlik.com/sv-SE/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));
```

## Exempel: Lägga till tabeller med anpassad SQL till en datamodell som skapats med Hanterare för datamodell

I det här exemplet konstrueras först Direct Query-datamodellen med innehållet i objektet DirectQueryModel.main, som skapades med Hanterare för datamodell. Därefter läggs ytterligare en tabell, C med fälten C\_CUSTKEY och C\_ACCTBAL, till i datamodellen. En relation skapas mellan fältet O\_CUSTKEY i ORDERS och fältet C\_CUSTKEY i 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); 
```

## Exempel: Konstruera en Direct Query-datamodell med en anpassad SQL-tabell

I det här exemplet konstrueras Direct Query-datamodellen med en anpassad SQL-tabell, C, med de omdöpta fälten C\_KEY och C\_BAL. Därefter lägger IMPORT LIVE till datamodellen som skapats i Hanterare för datamodell från DirectQueryModel.main. Denna datamodell innehåller tabellen Orders och har en befintlig relation mellan Orders och Customer i den modellen. Sedan tas den befintliga relationen mellan Customers och Orders bort och en ny relation definieras mellan Orders och 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);
```

## Exempel: Konstruera en datamodell som innehåller variabler

I det här exemplet definieras variabeln MULT först med värdet 100. Sedan tillämpas den som en multiplikator på summan av PS\_Supplycost för att beräkna fältet 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;

## Exempel: Konstruera en datamodell med Qlik-uttryck

I det här exemplet används både variabler och uttryck för att bygga datamodellen. I tabellen ORDERS\_AGGREGATIONS används uttryck för att definiera värdena i ORDERS\_GROUP\_TOTAL\_PRICE. Närhelst val görs i ett ark som skulle påverka värdena i ORDERS\_GROUP\_TOTAL\_PRICE, kommer uttrycket att utvärderas på nytt på de data som returneras av frågan till databasen.

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

## Exempel: Använda funktioner i anpassade SQL-uttryck

Följande anpassade SQL-sats demonstrerar en enkel användning av ett $(=…)-motoruttryck som expanderas när det körs i den anpassade SQL-koden. Det här uttrycket hämtar rader från en fjärrdatabas beroende på användarinformationen för applikationssessionen. När ett diagram, en fråga eller ett val utförs av en användare av en Direct Query-applikationssession med e-postadressen 'user1@qlik.com' filtreras den dynamiska hämtningen av datarader från fjärr-SQL-databasen så att den endast matchar de rader där fältet C\_NAME innehåller värdet 'Customer#000000007'. Annars, om e-postadressen för Direct Query-applikationens sessionsanvändare inte är 'user1@qlik.com', kommer endast de rader där fältet C\_NAME innehåller värdet 'Customer#000000009' att hämtas och visas.

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