Anpassade SQL-exempel för Direct Query | Qlik CloudHjälp
Gå till huvudinnehåll Gå till ytterligare innehåll

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.

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

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

Var den här sidan till hjälp för dig?

Om du stöter på några problem med den här sidan eller innehållet på den, t.ex. ett stavfel, ett saknat steg eller ett tekniskt fel – meddela oss!