On-demand 템플릿 앱의 바인딩 표현식

템플릿 앱의 데이터 바인딩은 On-demand 앱에 데이터가 로드될 때 실행되는 쿼리를 공식화하는 데 사용되는 해당 선택 앱의 데이터를 지정합니다.

선택 내용을 세분화하고 탬플릿 앱이 데이터를 정확하게 로드할 수 있도록 바인딩 표현식의 기본 형식($(od_FIELDNAME))을 수정할 수 있습니다.

경고: 원래 On-demand App GenerationQlik Sense 확장을 사용하여 만든 템플릿 앱은 필드의 다양한 선택 내용을 바인딩하기 위해 아래 설명된 방법을 사용하여 변경해야 합니다.

필드에서 다양한 선택 내용 바인딩

Qlik associative engine은 단일 LET 문에서 함께 연결될 수 있는 값의 수를 제한합니다. 제한을 피하기 위해 INLINE LOAD 문을 사용하여 쉼표로 구분된 값 목록을 효과적으로 구성할 수 있습니다.

먼저 INLINE 테이블을 처리할 스크립트 서브루틴을 작성해야 합니다.

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;
참고: BuildValueList 서브루틴에 대한 호출은 QuoteChrNum 매개 변수에 특정 값을 사용해야 합니다. 서브루틴에 의해 처리되는 필드가 숫자인 경우 매개 변수를 0으로 설정해야 합니다. 문자 데이터인 경우 매개 변수를 39로 설정해야 합니다.

바인딩은 값의 수에 관계없이 로드되는 필드 값의 구조를 만들도록 INLINE 테이블을 사용하여 작성해야 합니다.

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

$(od_ORIGIN) {"quote": "", "delimiter": "") 표현식은 선택 앱에서 ORIGIN 필드 값 목록으로 대체되고 줄 바꿈으로 구분됩니다. ORIGIN 필드에 3개의 값, BOS, JFK, ORD가 포함된 경우에는 확장된 INLINE 테이블이 다음과 같습니다.

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

BuildValueList 호출 다음에 오는 ORIGIN 변수 값은 다음과 같습니다.

'BOS','JFK’,'JFK'

선택적 및 제외 값 바인딩

선택 앱에서 직접 선택할 수 없는 필드를 사용하여 On-demand 템플릿 앱의 스크립트에 대한 쿼리에 필터 조건을 만드는 것이 필요한 경우가 있습니다. 예를 들어 판매 레코드는 REGION_CODE 같은 지역 코드를 사용하는 반면 선택 앱은 지역을 선택하기 위해 더 잘 인식할 수 있는 REGION_NAME 필드를 사용합니다. 선택 앱에 별도의 테이블을 사용하여 REGION_CODEREGION_NAME에 연결하는 모델이 있을 수 있으므로 사용자는 REGION_NAME에서 값을 선택하여 선택 상태를 제어할 수 있습니다.

REGION_NAME 값을 선택하면 해당 값이 선택 상태에 있게 되는 반면 REGION_CODE 값은 선택적 상태, 즉 녹색이 아닌 흰색으로만 있습니다. 또한 선택 앱 시트의 디자인이 REGION_CODE를 필터 창 세트에서 제외하면 On-demand 앱의 스크립트에 있는 바인드 표현식 $(od_REGION_CODE)를 선택한 지역의 목록으로 확장할 수 있는 방법이 없습니다. 그 이유는 REGION_CODE 값이 실제로 선택되지 않아 녹색이 되기 때문입니다.

이 상황을 처리할 수 있도록 각 데이터 바인딩에서 사용되는 선택 상태 값을 보다 정확하게 제어하는​추가 구문이 있습니다. 모든 On-demand 바인드 표현식의 필드 이름 부분에 있는 od_ 접두사는 바인딩에서 사용되는 값이 선택 상태 및 선택적 상태에서 가져온 값인지 여부를 나타내는 문자 조합을 포함할 수 있습니다. 올바른 조합(REGION_CODE 사용 예)은 다음과 같습니다.

올바른 조합, REGION_CODE 사용
패턴 확장
$(ods_REGION_CODE) REGION_CODE의 선택된(녹색) 값
$(odo_REGION_CODE) REGION_CODE의 선택적(흰색) 값
$(odso_REGION_CODE) REGION_CODE의 선택된 값 또는 선택적 값
$(od_REGION_CODE) $(ods_REGION_CODE)와 동일, REGION_CODE의 유일하게 선택된(녹색) 값

판매 데이터 예에 대한 On-demand 앱의 경우 다음 데이터 바인딩 표현식은 REGION_CODE의 선택된 값 또는 선택적 값이 REGION_CODE 바인딩에 포함되도록 합니다.

$(odso_REGION_CODE)

바인딩 숫자 값

On-demand 앱에 바인딩할 데이터가 문자열 대신 숫자로 구성되어 있으면 숫자 필드에서 따옴표로 묶는 동작을 비활성화하는 것이 유용합니다. 예를 들어 판매 레코드에 숫자 DAY_OF_WEEK 열이 포함되어 있고 선택 앱의 사용자가 DAY_OF_WEEK의 임의 조합을 선택하게 하려는 경우 선택 앱을 로드하는 데 사용되는 집계 쿼리를 확대하면 DAY_OF_WEEKSELECT 목록과 GROUP BY 목록에 모두 포함됩니다. DAY_OF_WEEK 값을 선택할 때 이 값이 따옴표로 묶여 있으면 데이터베이스가 문자열에서 숫자로의 자동 유형 변환을 지원하지 않는 경우 런타임 쿼리 오류가 발생할 수 있습니다.

이 상황을 처리하기 위해 바인드 표현식의 FIELDNAME 부분 끝에 추가할 수 있는 구문 접미사가 있습니다. 이 접미사는 필드 바인딩이 문자열 값이 아닌 선택 앱의 숫자 값을 사용하도록 강제합니다. 이 접미사는 다음 WHERE 절에서와 같이 _n입니다.

WHERE DAY_OF_WEEK IN ( $(od_DAY_OF_WEEK_n) );

그러면 다음과 같이 확장됩니다.

WHERE DAY_OF_WEEK IN ( 1,2 );

특정 수를 선택하도록 요구

경우에 따라 On-demand 앱 쿼리에 특정 필드의 특정 숫자 또는 값 범위가 포함되도록 요구할 필요가 있을 수 있습니다. 예를 들어 시작일과 종료일 사이의 모든 판매를 가져오기 위해 On-demand 앱 쿼리에 BETWEEN 절을 포함하는 경우 YEARQUARTER 필드의 바인드 표현식에 [2]의 접미사 구문을 사용할 수 있습니다. 그러면 YEARQUARTER에 대해 다음과 같이 정확히 2개의 값을 선택해야 합니다.

$(od_YEARQUARTER)[2]

선택 앱의 On-demand 앱 탐색 포인트는 정확히 두 개의 YEARQUARTER 값이 선택되어 있지 않으면 비활성화된 상태로 유지됩니다. 정확히 두 개의 YEARQUARTER 값을 선택해야 한다는 메시지가 표시됩니다.

선택 수량 제약 조건은 선택 앱과 On-demand 앱 간에 필수 연결을 만듭니다. 이는 수량 제약 조건을 사용하지 않는 바인드 표현식과는 다릅니다. 예를 들어 다음과 같이 템플릿 앱의 스크립트에 수량 제약 조건이 없는 바인드 표현식이 포함된 경우입니다.

$(od_MYFIELD)

선택 앱에 MYFIELD라는 필드가 포함되어야 한다거나 필드가 있어도 해당 필드의 선택된 값이 존재해야 한다는 요구 사항이 없습니다. 선택 앱에 MYFIELD라는 필드가 포함되어 있지 않거나 사용자가 단순히 해당 필드에서 아무런 선택을 하지 않는 경우, 레코드 제한 값 조건을 충족하기 위해 다른 선택을 하면 On-demand 앱 탐색 포인트를 계속 사용할 수 있습니다.

반면에 바인드 표현식은 다음과 같습니다.

$(od_MYFIELD)[1+]

이제 선택 앱은 두 가지 요구 사항이 있습니다.

  • 선택 앱에 MYFIELD라는 필드가 포함되어 있어야 합니다.
  • 사용자가 MYFIELD에 대해 하나 이상의 값을 선택해야 합니다.

이 유형의 바인드 표현식은 템플릿 앱과 함께 사용할 수 있는 선택 앱을 제한하기 때문에 신중하게 사용해야 합니다. 선택 수량 요구 사항을 해당 템플릿 앱에 연결하는 모든 선택 앱에 부과하려는 확신이 없는 한 이 수량 제약 조건을 템플릿 앱의 바인딩에 사용해서는 안 됩니다.

데이터 바인딩 프로세스를 수행하기 위해 On-demand 앱 서비스는 스크립트의 주석에 영향을 받지 않는 문자열 대체 방법을 사용합니다. 즉, 이러한 주석에 앱 생성 후 바인딩된 값 목록이 포함되기를 원하지 않는다면 주석에 바인드 표현식을 사용하지 않아야 합니다.

다른 수량 제약 조건은 가능합니다. 다음 표에는 선택 수량 제약 조건의 다양한 조합이 요약되어 있습니다.

선택 수량 제약 조건의 다양한 조합
제약 조건 패턴 선택 요구 사항
$(od_YEARQUARTER)[2] 정확히 2개의 YEARQUARTER 값을 선택해야 합니다.
$(od_YEARQUARTER)[2-4] 2개에서 4개 사이의 YEARQUARTER 값을 선택해야 합니다.
$(od_YEARQUARTER)[2+] 2개 이상의 YEARQUARTER 값을 선택해야 합니다.
$(od_YEARQUARTER)[2-] 최대 2개까지 YEARQUARTER 값을 선택할 수 있습니다.
참고: 템플릿 앱의 모든 수량 제약 조건이 충족되었는지 결정하는 검사는 앱 생성 프로세스 중에 수행됩니다. 수량 제약 조건을 위반하면 앱 생성 요청이 거부되고 오류 메시지가 표시됩니다.

값 따옴표 및 구분 기호 변경

On-demand 선택 앱에서 선택된 필드의 값 목록이 템플릿 앱의 스크립트에 삽입된 경우 값은 작은따옴표로 묶이고 쉼표로 구분됩니다. 이러한 문자가 인용 부호와 구분 기호에 대한 기본 문자입니다. 이러한 값은 각 필드의 바인딩 문에 추가된 구문에서 변경할 수 있습니다. 예:

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

이러한 새 값은 선택 앱에서 가져온 바인드 값 목록을 작성할 때 사용됩니다. 예를 들어 선택된 값이 해당 연도의 처음 3개월인 경우 목록은 다음과 같이 구성됩니다.

|January|;|February|;|March|

인용 부호 및 구분 기호 문자의 기본값은 대부분의 표준 SQL 데이터베이스에서 작동합니다. 그러나 일부 SQL 데이터베이스에는 작동하지 않을 수 있으며 NoSQL 및 REST 등 여러 동적 데이터 소스에서는 작동하지 않습니다. 이러한 소스의 경우 인용 부호 및 구분 기호 문자를 변경하려면 이 바인딩 표현식을 추가해야 합니다.

Bind data containing commas and/or quotation marks

If the data in any of the fields used for bind variables contains commas, you need to change the default behavior of the INLINE load statement to not interpret commas as field separators. 서식 사양을 사용하여 구분 기호를 바인딩될 필드 값에 포함되지 않는 문자로 변경합니다(다음 예제에서는 '|' 문자로 표시됨).

Also, if any of the bound fields contain single quotation marks, you need to add a Replace command to the LOAD statement that will add an extra single quotation mark after each single quotation mark in the value. This prevents the quote characters from being interpreted as the end of the string that is used in the WHERE clause. Note that database products may use different techniques for escaping single quotation marks.

예:

OdagBinding: LOAD Replace(VAL,'''','''''') AS VAL INLINE [ VAL $(odso_ORIGIN){"quote": "", "delimiter": ""} ] (ansi, txt, delimiter is '|', embedded labels);