Power Query | 動的SQLの実行結果を取り込む方法(Power BI)
SQLクエリの条件(例えばWHERE句)とPower Queryのパラメーターを連携させて、動的にSQLを実行する方法を説明します。
Power Queryでは、データベースに接続してSQLの実行結果をテーブルとして取り込むことがよくあります。では、そのSQLクエリの絞り込み条件(例えばWHERE句の中)を簡単に変更したい場合はどうすればよいでしょうか。
今回は、SQLクエリの条件(例えばWHERE句)とPower Queryのパラメーターを連携させて、動的にSQLを実行する方法について説明します。
動的SQLを実行するクエリ
動的SQLを実行するクエリの例は以下の通りです。
let
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
// SQL starts here
sql1 =
"
SELECT
*
FROM
test_table
WHERE
start_date >= '__start_date__' AND start_date <= '__end_date__'
",
// SQL ends here
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
// Replace SQL variables (e.g., __start_date__ and __end_date__)
sql2 = Text.Replace(sql1, "__start_date__", START_DATE),
sql3 = Text.Replace(sql2, "__end_date__", END_DATE),
sql = sql3, // Reassign it as 'sql' to prevent errors
Source = Oracle.Database(DB_NAME, [HierarchicalNavigation=true, Query=sql])
in
Source
この例では、処理の流れは以下の通りです。
① sql1
// SQL starts here
sql1 =
"
SELECT
*
FROM
test_table
WHERE
start_date >= '__start_date__' AND start_date <= '__end_date__'
",
// SQL ends here
この部分には、ベースとなるSQL(// ---の間)が記載されています。動的に変更したい箇所は、変数(例えば__start_date__や__end_date__)として記載しています。
② sql2
sql2 = Text.Replace(sql1, "__start_date__", START_DATE)
sql2は、sql1内の__start_date__をSTART_DATE(パラメーター)に置き換えます。この例では、START_DATEはYYYYMMDD形式の文字列を保持しています。
③ sql3
sql3 = Text.Replace(sql2, "__end_date__", END_DATE)
sql3は、sql2内の__end_date__をEND_DATE(パラメーター)に置き換えます。この例では、END_DATEはYYYYMMDD形式の文字列を保持しています。
④ sqlとSource
sql = sql3, // Reassign it as 'sql' to prevent errors
Source = Oracle.Database(DB_NAME, [HierarchicalNavigation=true, Query=sql])
sql3をsqlに格納し、それをOracle.Database関数の引数として適用します。この例では、DB_NAMEはデータベース名(スキーマ)を保持しています。
実際に試す際は、必要なパラメーターを準備した上で、空のクエリからAdvanced Editorに上記のコードを貼り付けてください。
パラメーターの設定を変更することで、動的にSQLの抽出結果を変更することができます。以上です。
関連コンテンツ
技術の記事をもっと見る →Power Query | パラメーター設定を利用した指定期間のカレンダー作成(Power BI)
Power BIで日付をもとにカレンダーを作成したい場面で、指定した期間のカレンダーを自動生成する方法を説明します。
#power-query#power-biVBA | DB操作 – 第4回:Excel から MERGE を実行
Excelマクロ 第4回:[Excel から MERGE を実行]
#excel-vba#oracle#sqlVBA | DB操作 – 第3回:Excel から INSERT, UPDATE, DELETE を実行
Excelマクロ 第3回:[Excel から INSERT, UPDATE, DELETE を実行]
#excel-vba#oracle#sql