İsteğe bağlı şablon uygulamalarda bağlama ifadeleri

Bir şablon uygulamadaki veri bağlamaları, isteğe bağlı bir uygulamaya veri yüklenirken oluşturulan sorguları düzenlemek için karşılık gelen seçim uygulamasından hangi verilerin kullanılacağını belirtir.

Bağlama ifadelerinin temel biçimi ($(od_FIELDNAME)), seçimleri daraltmak veya şablon uygulamanın verileri doğru bir şekilde yüklemesini sağlamak için değiştirilebilir.

Warning: İlk olarak On-demand App Generation için Qlik Sense uzantısıyla oluşturulmuş şablon uygulamaların, bir alandan çok sayıda seçim bağlamak amacıyla aşağıda gösterilen yaklaşımı kullanması için değiştirilmesi gerekir.

Bir alandan çok sayıda seçim bağlama

Qlik associative engine, tek bir LET deyiminde birleştirilebilecek değer sayısını sınırlar. Bu sınırlamadan kaçınmak için, bir INLINE LOAD deyimi kullanılarak verimli bir şekilde, virgülle ayrılmış bir değer listesi oluşturulabilir.

Öncelikle INLINE tablosu işleyecek bir kod alt yordamı oluşturmanız gerekir.

SUB BuildValueList(VarName, TableName, ColName, QuoteChrNum) IF $(QuoteChrNum) = 0 THEN LET LOADEXPR = 'Concat($(ColName),' & chr(39) & ',' & chr(39) & ') AS CombinedData'; ELSE LET CHREXPR = ' chr(' & '$(QuoteChrNum)' & ') '; LET LOADEXPR = 'Concat( $(CHREXPR) & $(ColName) & $(CHREXPR)' & ',' & chr(39) & ',' & chr(39) & ') AS CombinedData'; ENDIF _TempTable:   LOAD $(LOADEXPR) Resident $(TableName); Let vNoOfRows = NoOfRows('_TempTable'); IF $(vNoOfRows)> 0 THEN LET $(VarName) = Peek('CombinedData',0,'_TempTable'); ENDIF drop table _TempTable; drop table '$(TableName)'; END SUB;
Note: BuildValueList alt yordamına yapılan çağrılar, QuoteChrNum parametresi için belirli değerler kullanmalıdır. Alt yordam tarafından işlenen alan sayısal ise parametre, 0 olarak ayarlanmalıdır. Karakter verileri için parametre 39 olarak ayarlanmalıdır.

Ardından bağlama, bir INLINE tablo kullanılıp alan değerleri için değer sayısından bağımsız olarak yüklenen bir yapı oluşturacak şekilde yazılmalıdır.

SET ORIGIN=''; OdagBinding: LOAD * INLINE [ VAL $(odso_ORIGIN){"quote": "", "delimiter": ""} ]; SET ORIGIN_COLNAME='ORIGIN'; CALL BuildValueList('ORIGIN', 'OdagBinding', 'VAL', 39);

$(od_ORIGIN) {"quote": "", "delimiter": "") ifadesi, seçim uygulamasından alınan, satır sonlarıyla ayrılmış bir ORIGIN alanı değer listesiyle değiştirilir. ORIGIN alanı BOS, JFK, ORD değerlerini içeriyorsa genişletilen INLINE tablo şu şekilde görünür:

SET ORIGIN=''; OdagBinding: LOAD * INLINE [ VAL BOS JFK ORD ]; SET ORIGIN_COLNAME='ORIGIN'; CALL BuildValueList('ORIGIN', 'OdagBinding', 'VAL', 39);

BuildValueList çağrısının ardından ORIGIN değişkenin değeri aşağıdaki gibidir:

'BOS','JFK’,'JFK'

İsteğe bağlı ve hariç tutulan değerleri bağlama

Bazen isteğe bağlı şablon uygulamanın kodu için, seçim uygulamasında doğrudan seçilemeyen alanları kullanarak sorguda bir filtre koşulu oluşturulması gerekir. Örneğin satış kayıtları REGION_CODE gibi bir bölge kodu kullanırken seçim uygulaması, bölge seçimleri yapmak için daha tanınabilir bir REGION_NAME alanını kullanır. Seçim uygulaması, kullanıcıların seçim durumunu denetlemek üzere REGION_NAME öğesinden değerler seçebilmesi için, REGION_CODE öğesini REGION_NAME öğesiyle ilişkilendirmeye yönelik ayrı bir tablo kullanan bir modele sahip olabilir.

REGION_NAME öğesinin değerlerini seçmek bu değerlerin seçili duruma getirilmesine neden olurken, REGION_CODE öğesinin değerleri yalnızca isteğe bağlı durumda olduğundan yeşil yerine beyaz renkle gösterilir. Ayrıca seçim uygulamasının sayfalarının tasarımı REGION_CODE öğesini filtre bölmeleri kümesinden hariç tutuyorsa, REGION_CODE değerleri gerçek anlamda seçilemediği (yeşil hale getirilemediği) için isteğe bağlı uygulamanın kodundaki $(od_REGION_CODE) bağlama ifadesinin seçili bölgelere genişletilmesinin bir yolu yoktur.

Bu sorunu düzeltmek için, her bir veri bağlama işleminde hangi seçim durumu değerlerinin kullanıldığını daha hassas şekilde denetlemeye yönelik ek söz dizimi bulunmaktadır. Her isteğe bağlı bağlama ifadesinde bulunan alan adı parçasındaki od_ ön eki, bağlama işlemlerinde kullanılan değerlerin seçili durum ve isteğe bağlı durumdan alınan değerlerle aynı olup olmadığını göstermek için bir harf birleşimi içerebilir. REGION_CODE örneğini kullanan geçerli birleşimler şunlardır:

REGION_CODE kullanılan geçerli birleşimler
Model Genişletme
$(ods_REGION_CODE) REGION_CODE öğesinin seçili (yeşil) değerleri
$(odo_REGION_CODE) REGION_CODE öğesinin isteğe bağlı (beyaz) değerleri
$(odso_REGION_CODE) REGION_CODE öğesinin seçili veya isteğe bağlı değerleri
$(od_REGION_CODE) $(ods_REGION_CODE) ile aynı, REGION_CODE öğesinin yalnızca seçili (yeşil) değerleri

Satış verileri örneğine yönelik isteğe bağlı uygulama söz konusu olduğunda, aşağıdaki veri bağlama ifadesi, REGION_CODE öğesinin seçili veya isteğe bağlı değerlerinden birinin REGION_CODE bağlamasına dahil edilmesini sağlar:

$(odso_REGION_CODE)

Sayısal değerleri bağlama

İsteğe bağlı uygulamaya bağlanan veriler, dizeler yerine sayılardan oluştuğunda sayısal alanlardaki alıntı sarmalama davranışını devre dışı bırakmak faydalı olabilir. Örneğin, satış kayıtları sayısal bir DAY_OF_WEEK sütunu içeriyorsa ve seçim uygulaması kullanıcısının DAY_OF_WEEK öğesinin rastgele birleşimlerini seçmesini istiyorsanız, seçim uygulamasını yüklemek için kullanılan toplama sorgusunu, SELECT ve GROUP BY listelerinde DAY_OF_WEEK öğesini içerecek şekilde artırabilirsiniz. DAY_OF_WEEK değerleri seçildiğinde bu değerlerin tırnak işaretleriyle sarmalanırsa, veritabanının dizeden sayısal değerlere otomatik tür dönüştürme işlemini desteklememesi durumunda çalışma zamanı sorgusu hatası oluşabilir.

Bu sorunu düzeltmek için, bağlama ifadesinin FIELDNAME parçasının sonuna bir söz dizimi son eki eklenerek alan bağlama işlemi, seçim uygulamasındaki dize değerleri yerine sayısal değerleri kullanmaya zorlanır. Son ek, şu WHERE cümlesindeki gibi _n'dir:

WHERE DAY_OF_WEEK IN ( $(od_DAY_OF_WEEK_n) );

Bu işlem şu şekilde genişletilir:

WHERE DAY_OF_WEEK IN ( 1,2 );

Belirli sayıda seçimi gerekli kılma

Bazı durumlarda, isteğe bağlı uygulamanın belirli bir alan için belirli sayıda veya belirli bir aralık içindeki değerleri içermesini gerekli kılmak gerekebilir. Örneğin, isteğe bağlı uygulamanın sorgusu bir başlangıç ve bitiş tarihi arasındaki tüm satışları almaya yönelik BETWEEN cümlesini içeriyorsa, YEARQUARTER alanının bağlama ifadesi, şurada belirtildiği gibi YEARQUARTER için tam olarak iki değerin seçilmesini gerekli kılan bir son ek söz dizimi [2] içerebilir.

$(od_YEARQUARTER)[2]

Seçim uygulamasındaki isteğe bağlı uygulama navigasyon noktası, tam olarak iki YEARQUARTER değeri seçilmediği sürece devre dışı kalır. Tam olarak iki YEARQUARTER değerinin seçilmesi gerektiğini belirten bir mesaj görüntülenir.

Seçim miktarı kısıtlamaları, seçim uygulaması ile isteğe bağlı uygulama arasında önkoşul bağlantısı oluşturur. Bu, miktar kısıtlamaları kullanmayan bağlama ifadelerinden farklıdır. Örneğin, şablon uygulamanın kodunda şu durumdaki gibi, miktar kısıtlaması olmayan bir bağlama ifadesi varsa:

$(od_MYFIELD)

seçim uygulamasının MYFIELD adlı bir alan içermesi veya bu alan yoksa alanın seçili değerlerinin bulunması gibi bir gereklilik yoktur. Seçim uygulaması MYFIELD adlı bir alan içermiyorsa veya kullanıcı bu alandan seçim yapmayı ihmal ederse, isteğe bağlı uygulama navigasyon noktası, kayıt sınırı değeri koşulunu yerine getirmek üzere diğer seçimler yapıldığında da etkinleştirilebilir.

Bununla birlikte bağlama ifadesi şu ise:

$(od_MYFIELD)[1+]

seçim uygulaması için artık iki gereklilik vardır:

  • Seçim uygulaması MYFIELD adlı bir alan içermelidir.
  • Kullanıcı MYFIELD için en az bir değer seçmelidir.

Bu tür bağlama ifadeleri, şablon uygulama ile kullanılabilecek seçim uygulamalarını sınırladığından dikkatli bir şekilde kullanılmalıdır. Bir şablon uygulamaya bağlanan tüm seçim uygulamalarında bu seçim miktarı gereksinimini uygulamak istediğinizden emin değilseniz, şablon uygulamanın bağlamalarında bu miktar kısıtlamasını kullanmamalısınız.

İsteğe bağlı uygulama hizmeti, veri bağlama işlemini gerçekleştirmek için komut dosyasındaki açıklamalara duyarsız olan bir dize değiştirme yaklaşımı kullanır. Bu, uygulama oluşturulduktan sonra bağlı değerlerin listesini içermesini istemediğiniz açıklamalarda bağlama ifadeleri kullanmamanız gerektiği anlamına gelir.

Diğer miktar kısıtlamaları da olasıdır. Aşağıdaki tabloda seçim miktarı kısıtlamalarının farklı birleşimleri özetlenmektedir.

Seçim miktarı kısıtlamalarının farklı birleşimleri
Kısıtlama düzeni Seçim gerekliliği
$(od_YEARQUARTER)[2] YEARQUARTER öğesinin tam olarak 2 değeri seçilmelidir.
$(od_YEARQUARTER)[2-4] YEARQUARTER öğesinin 2 - 4 değeri seçilmelidir.
$(od_YEARQUARTER)[2+] YEARQUARTER öğesinin en az 2 değeri seçilmelidir.
$(od_YEARQUARTER)[2-] YEARQUARTER öğesinin en fazla 2 değeri seçilebilir.
Note: Şablon uygulamadaki tüm miktar kısıtlamalarının karşılanıp karşılanmadığına ilişkin denetim, uygulama oluşturma işlemi sırasında gerçekleştirilir. Bir miktar kısıtlaması aşılırsa, uygulama oluşturma isteği reddedilir ve bir hata iletisi görüntülenir.

Değer alıntı ve sınırlayıcı karakterlerini değiştirme

On-demand seçim uygulamalarında seçilen bir alana ait bir değerler listesi şablon uygulamanın koduna eklendiğinde, değerler tek tırnak işareti içine alınır ve virgülle ayrılır. Alıntı ve sınırlayıcı için varsayılan karakterler bunlardır. Bu değerler, her alan için bağlama deyimine eklenen söz diziminde değiştirilebilir. Örneğin:

$(odso_ORIGIN){"quote": "|", "delimiter": ";"}

Ardından bu yeni değerler, seçim uygulamasından alınan bağlama değerleri listesi formüle edilirken kulanılır. Örneğin seçili değerler yılın ilk üç ayı ise liste şöyle oluşturulur:

|Ocak|;|Şubat|;|Mart|

Alıntı ve sınırlayıcı karakterlerinin varsayılan değerleri, standart SQL veritabanlarının çoğu için çalışır. Ancak bu karakterler, bazı SQL veritabanlarında çalışmayabileceği gibi NoSQL ve REST dahil olmak üzere birçok dinamik veri kaynağında da çalışmaz. Söz konusu kaynaklar için, bu bağlama ifadesini ekleyerek alıntı ve sınırlayıcı karakterlerini değiştirmeniz gerekir.

Tırnak işaretleri içeren verileri bağlayın

Bağlama değişkenleri için kullanılan alanların herhangi birindeki veriler tek veya çift tırnak işareti içeriyorsa tırnak işaretlerinin sınırlayıcı olarak yorumlanmaması için INLINE load deyiminin varsayılan davranışını değiştirmeniz gerekir. Tıpkı aşağıdaki örnekte '|' karakteriyle gösterildiği gibi, bağlanmakta olan alanın değerlerinde hiç olmayan karaktere özel biçim kullanarak sınırlayıcıyı değiştirin:

OdagBağlama:

LOAD * INLINE [

VAL

$(odso_ORIGIN){"quote": "", "delimiter": ""}

]

(ansi, txt, sınırlayıcı; '|', eklenmiş etiketler);