Direct Query용 사용자 지정 SQL 예 | Qlik Cloud 도움말
기본 콘텐츠로 건너뛰기 보완적인 콘텐츠로 건너뛰기

Direct Query용 사용자 지정 SQL 예

다음 예는 Direct Query에 사용자 지정 SQL을 사용할 때의 몇 가지 옵션을 보여줍니다.

예: Direct Query 모델에 사용자 지정 SQL 정의 추가

이 예에서는 테이블 C, R, N에 대한 사용자 지정 SQL 정의가 두 개의 테이블 간 관계와 함께 Direct Query 응용 프로그램의 데이터 모델에 추가됩니다. Coalesce 함수를 사용하여 N_NATIONKEY의 필드 값이 C_NATIONKEY 값과 같은지 또는 둘 다 null과 같은지 확인합니다.

팁 메모

Coalesce는 필드 값이 null과 같은지 확인하는 검사를 포함하는 데 권장되는 방법입니다. 자세한 내용은 coalesce스크립트 및 차트 함수를 참조하십시오.

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

예: 데이터 모델 관리자로 만든 데이터 모델에 사용자 지정 SQL이 포함된 테이블 추가

이 예에서 Direct Query 데이터 모델은 먼저 데이터 모델 관리자로 생성된 DirectQueryModel.main 개체의 콘텐츠로 구성됩니다. 그런 다음 필드가 C_CUSTKEYC_ACCTBAL인 추가 테이블 C가 데이터 모델에 추가됩니다. ORDERSO_CUSTKEY 필드와 CC_CUSTKEY 필드 사이에 관계가 설정됩니다.

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

예: 사용자 지정 SQL 테이블을 사용하여 Direct Query 데이터 모델 구성

이 예에서 Direct Query 데이터 모델은 이름이 바뀐 필드 C_KEYC_BAL을 포함하는 사용자 지정 SQL 테이블 C로 구성됩니다. 다음으로, IMPORT LIVEDirectQueryModel.main에서 데이터 모델 관리자로 생성된 데이터 모델을 추가합니다. 이 데이터 모델에는 Orders 테이블이 포함되어 있으며 해당 모델의 OrdersCustomer 사이에 기존 관계가 있습니다. 그런 다음 CustomersOrders 사이의 기존 관계가 삭제되고 OrdersC 사이에 새로운 관계가 정의됩니다.

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

예: 변수를 포함하는 데이터 모델 구성

이 예에서는 변수 MULT가 먼저 100 값으로 정의됩니다. 그런 다음 PS_Supplycost 합계에 승수로 적용되어 필드 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;

예: Qlik 표현식으로 데이터 모델 구성

이 예에서는 변수와 표현식을 모두 사용하여 데이터 모델을 빌드합니다. ORDERS_AGGREGATIONS 테이블에서 표현식은 ORDERS_GROUP_TOTAL_PRICE의 값을 정의하는 데 사용됩니다. 시트에서 ORDERS_GROUP_TOTAL_PRICE의 값에 영향을 미치는 선택을 할 때마다 데이터베이스에 대한 쿼리에서 반환된 데이터에 대해 표현식이 재평가됩니다.

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

예: 사용자 지정 SQL 표현식에서 함수 사용

다음 사용자 지정 SQL 문은 사용자 지정 SQL에서 실행될 때 확장되는 $(=…) 엔진 표현식의 간단한 사용을 보여줍니다. 이 표현식은 응용 프로그램 세션의 사용자 정보에 따라 원격 데이터베이스 행을 검색합니다. 이메일 주소가 'user1@qlik.com'Direct Query 응용 프로그램 세션 사용자가 차트, 쿼리 또는 선택을 수행하면 원격 SQL 데이터베이스의 데이터 행에 대한 동적 검색이 C_NAME 필드에 'Customer#000000007' 값이 포함된 행만 일치하도록 필터링됩니다. 그렇지 않고 Direct Query 응용 프로그램 세션 사용자의 이메일이 'user1@qlik.com'이 아닌 경우, C_NAME 필드에 'Customer#000000009' 값이 포함된 행만 검색되어 표시됩니다.

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

이 페이지가 도움이 되었습니까?

이 페이지 또는 해당 콘텐츠에서 오타, 누락된 단계 또는 기술적 오류와 같은 문제를 발견하면 알려 주십시오!