Примеры пользовательского кода 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;
;
Помогла ли вам эта страница?
Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!