LoginSignup
3
8

More than 3 years have passed since last update.

パラメータテーブルと、その値を取るカスタム関数|Power Query

Last updated at Posted at 2019-08-02

パラメータが必要なときは、よく使っています。
僕の方式だと戻り値のデータ型がanyなので、実際に使う場合は適宜データ型の変換が必要になります。
この辺りをコントロールする方法が見つかったら、書き足すかも知れません。

準備

下図のようなテーブルを作り、名前を「ParameterTable」としておきます。
※テーブル名はコードの方もいじれば変えられますが、列名は必ず、NameとValueにしてください。(Record.FromTable関数が作動しなくなるため)

image.png

関数のコード

名前は何でもいいです。
※レコード化せず、テーブルのままフィルタをかけ、ドリルダウンをする方法でも書ける。パフォーマンスに違いがあるほどデータを詰め込んだことないので、どっちがいいかは不明。

GetParameterValue
(ParameterName as text)=>
let
    Source = Excel.CurrentWorkbook(){[Name="ParameterTable"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Name", type text}, {"Value", type any}}),
    Custom1 = Record.FromTable(#"Changed Type"),
    Custom2 = Record.Field(Custom1,ParameterName)
in
    Custom2

実行した様子

普通は、こういうコードを書いて、コード内で固定値に差し替えて使います。

= GetParameterValue("日付")

もちろん、パラメータの名前を打って、呼び出しをしても動きます。
image.png

コピーの仕方

都度、テーブルを作って、関数をコピペ――でもいいんですが、下図のようにテーブルの隣に適当にロードした値をくっつけておいて、ブックとして保存しておくと便利です。
この状態でシートをコピーしてやれば、クエリも一緒にコピーされます。

元のファイルの様子
image.png
コピー先での様子
image.png

参考

一般的な関数の書き方としては、下記サイトからダウンロードできるPDFの9章が詳しいです。
Power Query M language specification - PowerQuery M | Microsoft Docs

3
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
8