実現したいこと
パワークエリの一部をパラメータ(変数にしたい)です。
発生している問題・分からないこと
以下のようにSQLをODBCでクエリにしているのですが、例えば日付やEntity Numberの部分をパラメータ化したいのですが、どうすれば良いでしょうか?できればその都度ユーザに尋ねるようにしたいです。
該当のソースコード
let ソース = Odbc.Query("dsn=db", "SELECT COALESCE(株式残高.[Base Market Value],0)+ COALESCE(未収配当,0) AS 時価総額, *#(lf)FROM ((SELECT [Security ID] from t1 where [Accounting Date]='2025/02/28' and [Entity Number]='9999' and [Investment Type Code]='EQ'Union select [Security ID] from t2 where [Accounting Date]='2025/02/28' and [Entity Number]='9999') AS master LEFT JOIN (SELECT * FROM t1 WHERE [Accounting Date]='2025/02/28' and [Entity Number]='9999' and [Investment Type Code]='EQ') AS 株式残高 ON 株式残高.[Security ID] = master.[Security ID]) LEFT JOIN (SELECT [Accounting Date], [Entity Number], [Security ID], Sum([Base Market Value Receivable]) AS 未収配当 FROM t2 WHERE [Accounting Date]='2025/02/28' and [Entity Number]='9999' GROUP BY [Accounting Date], [Entity Number], [Security ID]) AS 未収 ON 未収.[Security ID] = master.[Security ID];#(lf)") in ソース
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
色々調べましたが、パワークエリに不慣れでよく分かりません。
補足
特になし
> 例えば日付やEntity Numberの部分をパラメータ化したい
> WHERE [Accounting Date]='2025/02/28' and [Entity Number]='9999'
WHERE 句においてそれぞれのフィールドと比較しているリテラルを
2つのパラメータで指定できるようにしたい、という意味であるとして、
- それぞれのパラメータを入力必須とするのか、それとも省略可能とするのか。
- 省略可能とした場合、WHERE 句での扱いはどのようになるのか。
( 列の値が null であるレコードが抽出されるようにする、
あるいは比較条件そのものを書き加えないようにする等)
といった問題を検討しなければならないでしょう。
> できればその都度ユーザに尋ねるようにしたいです。
また、上記の機能をどのような形で実装なさりたいのでしょうか。
例えば「 VBA の InputBox のようなダイアログボックスを
『その都度』表示させたい」場合、具体的にどのタイミングで
(ユーザーがどのような操作が行なった時に)そのダイアログを表示させ、
入力された値を各パラメータに渡してクエリの再読込を実行するのか、
という問題が生じます。
「ユーザー自身が Power Query エディターを開いて各パラメータの値を直接変更する」
あるいは「同じブックのワークシート上に作成されたテーブルのセルをパラメータ代わりとし、
それぞれのセルの値をユーザーが任意に変更する」という(いちいち入力を促さない)
オペレーションを想定されているならば、その部分についてはある程度無視できるのですが。
ありがとうございます。
イメージはクエリを更新した際、ダイアログボックスが表示されるような仕様でしたが、以下なような仕様でも大丈夫です。極力簡単に書ける方法を探しています。
「同じブックのワークシート上に作成されたテーブルのセルをパラメータ代わりとし、 それぞれのセルの値をユーザーが任意に変更する」という(いちいち入力を促さない) オペレーション
よろしくお願いいたします。
