# Direct Query için özel SQL örnekleri

Aşağıdaki örneklerde, Direct Query için özel SQL kullanılırken sunulan bazı seçenekler gösterilmektedir.

## Örnek: Direct Query modeline özel SQL tanımları ekleme

Bu örnekte, C, R, N tablolarına yönelik özel SQL tanımları, iki tablo arası ilişkiyle birlikte Direct Query uygulamasındaki veri modeline eklenir. N\_NATIONKEY alan değerinin C\_NATIONKEY değerine eşit olup olmadığını veya her ikisinin de null değerine eşit olup olmadığını kontrol etmek için Coalesce işlevi kullanılır.

İpucu notu

Coalesce, bir alan değerinin null değerine eşit olup olmadığını görmek üzere bir kontrol eklemek için önerilen yöntemdir. Daha fazla bilgi için bkz. [coalesceKomut dosyası ve grafik fonksiyonu](https://help.qlik.com/tr-TR/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));
```

## Örnek: Veri modeli yöneticisi ile oluşturulmuş bir veri modeline özel SQL içeren tablolar ekleme

Bu örnekte, Direct Query veri modeli ilk olarak Veri modeli yöneticisi ile oluşturulan DirectQueryModel.main nesnesindeki içeriklerle yapılandırılır. Ardından, C\_CUSTKEY ve C\_ACCTBAL alanlarını içeren ek bir C tablosu veri modeline eklenir. ORDERS tablosundaki O\_CUSTKEY alanı ile C tablosundaki C\_CUSTKEY alanı arasında bir ilişki kurulur.

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

## Örnek: Özel SQL tablosu içeren bir Direct Query veri modeli yapılandırma

Bu örnekte, Direct Query veri modeli; yeniden adlandırılmış C\_KEY ve C\_BAL alanlarını içeren özel bir SQL tablosu olan C ile yapılandırılır. Ardından, IMPORT LIVE, Veri modeli yöneticisi içinde oluşturulan veri modelini DirectQueryModel.main üzerinden ekler. Bu veri modeli Orders tablosunu içerir ve söz konusu modelde Orders ile Customer arasında mevcut bir ilişki bulunur. Daha sonra, Customers ile Orders arasındaki mevcut ilişki kaldırılır ve Orders ile C arasında yeni bir ilişki tanımlanır.

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

## Örnek: Değişkenler içeren bir veri modeli yapılandırma

Bu örnekte, ilk olarak MULT değişkeni 100 değeriyle tanımlanır. Ardından, S alanını hesaplamak için PS\_Supplycost toplamına çarpan olarak uygulanır.

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;

## Örnek: Qlik ifadeleriyle bir veri modeli yapılandırma

Bu örnekte, veri modelini oluşturmak için hem değişkenler hem de ifadeler kullanılır. ORDERS\_AGGREGATIONS tablosunda, ORDERS\_GROUP\_TOTAL\_PRICE içindeki değerleri tanımlamak için ifadeler kullanılır. Bir sayfada ORDERS\_GROUP\_TOTAL\_PRICE içindeki değerleri etkileyecek seçimler yapıldığında, ifade veritabanına gönderilen sorgu tarafından döndürülen veriler üzerinde yeniden değerlendirilir.

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

## Örnek: Özel SQL ifadelerinde işlevleri kullanma

Aşağıdaki özel SQL deyimi, özel SQL içinde yürütüldüğünde genişletilen bir $(=…) Engine ifadesinin basit bir kullanımını gösterir. Bu ifade, uygulama oturumunun kullanıcı bilgilerine bağlı olarak uzak veritabanı satırlarını alır. E-posta adresi 'user1@qlik.com' olan bir Direct Query uygulama oturumu kullanıcısı tarafından bir grafik, sorgu veya seçim gerçekleştirildiğinde, uzak SQL veritabanından veri satırlarının dinamik olarak alınması, yalnızca C\_NAME alanının 'Customer#000000007' değerini içerdiği satırlarla eşleşecek şekilde filtrelenir. Aksi takdirde, Direct Query uygulamasının oturum kullanıcısının e-postası 'user1@qlik.com' değilse, yalnızca C\_NAME alanının 'Customer#000000009' değerini içerdiği satırlar alınır ve gösterilir.

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