Aangepaste SQL-voorbeelden voor Direct Query | Qlik Cloud Help
Ga naar hoofdinhoud Ga naar aanvullende inhoud

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.

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({<GROUP_CODE={0,1}>}[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({<GROUP_CODE={0,2}>}[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'))';

Was deze pagina nuttig?

Als u problemen ervaart op deze pagina of de inhoud onjuist is – een tikfout, een ontbrekende stap of een technische fout – laat het ons weten!