Early Access: The content on this website is provided for informational purposes only in connection with pre-General Availability Qlik Products. All content is subject to change and is provided without warranty.
Примеры пользовательского кода SQL для Direct Query
Следующие примеры демонстрируют некоторые варианты использования пользовательского кода SQL для Direct Query.
Пример: добавление пользовательских определений SQL в модель Direct Query
В этом примере пользовательские определения SQL для таблиц C, R, N добавляются в модель данных в приложении Direct Query вместе с двумя отношениями между таблицами. Функция Coalesce используется для проверки того, равно ли значение поля N_NATIONKEY значению поля C_NATIONKEY, или они оба равны нулю.
Примечание к подсказке
Coalesce — это рекомендованный способ включения проверки нулевого значения поля. Для получения дополнительной информации см. раздел coalesce — функция скриптa и диаграммы.
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 с полями C_CUSTKEY и C_ACCTBAL. Формируется отношение между полем O_CUSTKEY в ORDERS и полем C_CUSTKEY в 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);
Пример: построение модели данных Direct Query с пользовательской таблицей SQL
В этом примере модель данных Direct Query строится с помощью пользовательской таблицы SQL C с переименованными полями C_KEY и C_BAL. Далее IMPORT LIVE добавляет модель данных, созданную в Диспетчер модели данных, из DirectQueryModel.main. Эта модель данных включает таблицу Orders (Заказы) и имеет существующее отношение между Orders и Customer в этой модели. Затем существующие отношения между Customers и Orders отбрасываются и определяется новое отношение между Orders и 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);
Пример: построение модели данных, включая переменные
В этом примере переменная 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;
;
Помогла ли вам эта страница?
Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!