数値を定義するとは何か
Power Query(M言語)で「数値を定義する」とは、計算に使う数字や、業務ルール上の固定値に“名前付きの箱”を用意することです。 例えば「消費税率」「閾値(しきい値)」「割引率」「上限値」などを、その場その場でベタ書きするのではなく、変数として定義しておくことで、再利用しやすく・安全に・変更に強いクエリになります。
M言語では、数値はそのまま 10 や 0.1 のように書き、let の中で変数に代入して使います。
M言語での数値の基本構文
「名前 = 数値」で数値変数を定義する
最も基本的な数値の定義は次のようになります。
let
TaxRate = 0.1,
Price = 1000,
TaxAmount = Price * TaxRate
in
TaxAmount
Power Queryここでは、
TaxRateという変数に0.1(10%)を入れているPriceに1000を入れているTaxAmountにPrice * TaxRate(100)を入れているin TaxAmountなので、最終的な結果は 100
という構造になっています。
M言語では、数値リテラル(10, 0.1 など)をそのまま変数に代入することで数値を定義します。
実務でよく使う「数値変数」の例
消費税率や割引率を数値として定義する
let
TaxRate = 0.1, // 消費税率10%
DiscountRate = 0.05, // 割引率5%
Price = 2000,
DiscountAmount = Price * DiscountRate,
TaxAmount = (Price - DiscountAmount) * TaxRate,
FinalAmount = Price - DiscountAmount + TaxAmount
in
FinalAmount
Power Queryここでは、
TaxRateとDiscountRateを数値変数として定義し- それを使って割引額・税額・最終金額を計算しています
こうしておくと、税率や割引率が変わったときに、変数の値だけ変更すればよいので、保守性が高くなります。
数値をステップバイステップで定義・利用する
ステップ1:業務ルール上の「固定値」を洗い出す
実務では、次のような数値がよく登場します。
- 消費税率(例:0.1)
- 割引率(例:0.05)
- 閾値(例:金額が 1000 以上なら高額扱い)
- 上限値・下限値(例:数量は 0〜100 の範囲)
これらをその場で 0.1 や 1000 と書くのではなく、意味のある名前を付けた数値変数として定義することが重要です。
ステップ2:意味のある名前で数値変数を定義する
悪い例:
FilteredHighAmount =
Table.SelectRows(SalesTable, each [金額] > 1000)
Power Query良い例:
HighAmountThreshold = 1000,
FilteredHighAmount =
Table.SelectRows(SalesTable, each [金額] > HighAmountThreshold)
Power Query1000 を直接書くのではなく、 HighAmountThreshold という名前を付けておくことで、
- 「何の数字なのか」が一目で分かる
- 閾値を変更したいときに一か所だけ直せばよい
というメリットが生まれます。
ステップ3:数値変数をテーブル計算に組み込む
let
TaxRate = 0.1,
SalesTable =
Excel.CurrentWorkbook(){[Name="売上"]}[Content],
AddedTaxAmount =
Table.AddColumn(
SalesTable,
"消費税額",
each [金額] * TaxRate,
type number
),
AddedTotalAmount =
Table.AddColumn(
AddedTaxAmount,
"税込金額",
each [金額] + [消費税額],
type number
)
in
AddedTotalAmount
Power Queryここでは、
TaxRateを数値変数として定義しTable.AddColumnの中でeach [金額] * TaxRateとして利用しています
このように、テーブルの列計算に数値変数を組み込むのが実務での典型的な使い方です。
数値定義で注意すべき重要ポイント
1. 整数と小数の扱いに注意する
M言語では、数値には「整数」と「小数」があり、型によって扱いが変わります。
Int64.Type:整数type number:一般的な数値(小数を含む)
例:
Price = 1000, // 整数
TaxRate = 0.1, // 小数
TaxAmount = Price * TaxRate
Power Query列の型を変換するときは、小数を扱う列には type number を指定するのが基本です。
ChangedType =
Table.TransformColumnTypes(
SalesTable,
{{"金額", type number}, {"消費税額", type number}}
)
Power Query整数型の列に小数を入れようとすると、 意図しない丸めやエラーの原因になるため注意が必要です。
2. 数値と文字列を混同しない
次の2つは見た目が似ていますが、型が違います。
TextValue = "1000", // 文字列(Text)
NumberValue = 1000 // 数値(Number)
Power Query文字列を数値として扱いたい場合は、明示的な変換が必要です。
NumberFromText = Number.From(TextValue)
Power Query型を意識せずに比較や計算をすると、 「条件が効かない」「ソート順がおかしい」といった問題につながります。
3. 数値に業務ルールを埋め込むときはコメントもセットで書く
数値変数は「業務ルールの表現」であることが多いので、 なぜその値なのかをコメントで残しておくと安全です。
let
// 高額判定の閾値(社内ルール:1000円以上を高額とみなす)
HighAmountThreshold = 1000,
FilteredHighAmount =
Table.SelectRows(SalesTable, each [金額] > HighAmountThreshold)
in
FilteredHighAmount
Power Queryこうしておくと、
- 閾値の根拠が分かる
- ルール変更時に見直すべき箇所が明確になる
というメリットがあります。
4. セキュリティの観点からの注意
数値変数自体は機密情報になりにくいですが、 「料金計算ロジック」「内部評価スコア」など、 ビジネス上の重要なアルゴリズムをそのままコードに書く場合は、
- 誰が Power Query を開けるのか
- そのロジックを公開して問題ないのか
を意識しておくことが大切です。
必要に応じて、ロジックの一部を外部システム側に寄せるなど、 設計レベルでのセキュリティ配慮も検討すべきです。
実務で使える「数値定義テンプレート」
テンプレ1:税率・割引率・閾値をまとめて定義
let
// 業務ルールの固定値
TaxRate = 0.1, // 消費税率10%
DiscountRate = 0.05, // 割引率5%
HighAmountThreshold = 1000, // 高額判定の閾値
SalesTable =
Excel.CurrentWorkbook(){[Name="売上"]}[Content],
FilteredHighAmount =
Table.SelectRows(SalesTable, each [金額] > HighAmountThreshold),
AddedDiscountAmount =
Table.AddColumn(
FilteredHighAmount,
"割引額",
each [金額] * DiscountRate,
type number
),
AddedTaxAmount =
Table.AddColumn(
AddedDiscountAmount,
"消費税額",
each ([金額] - [割引額]) * TaxRate,
type number
)
in
AddedTaxAmount
Power Queryテンプレ2:上限・下限チェックに数値変数を使う
let
MinQuantity = 0,
MaxQuantity = 100,
SalesTable = ...,
FlaggedOutOfRange =
Table.AddColumn(
SalesTable,
"数量範囲NG",
each ([数量] < MinQuantity or [数量] > MaxQuantity),
type logical
)
in
FlaggedOutOfRange
Power Queryここでは、
MinQuantityとMaxQuantityを数値変数として定義し- それを使って「数量が範囲外かどうか」を判定しています
業務ルールの変更(例:上限を 200 に変更)にも、 変数の値を変えるだけで対応できます。
テンプレ3:集計用の数値変数
let
SalesTable = Excel.CurrentWorkbook(){[Name="売上"]}[Content],
TotalAmount =
List.Sum(SalesTable[金額]),
RowCount =
Table.RowCount(SalesTable),
AverageAmount =
if RowCount = 0 then
null
else
TotalAmount / RowCount
in
[合計金額 = TotalAmount, 平均金額 = AverageAmount]
Power Queryここでは、
TotalAmount:合計金額RowCount:行数AverageAmount:平均金額
を数値変数として定義し、 最後にレコードとしてまとめて返しています。
まとめ:数値を定義することは「業務ルールに名前を付けること」
M言語で数値を定義することは、単に 10 や 0.1 を書くだけではなく、 「業務ルール上の重要な数字に名前を付けて、意味のある単位として扱うこと」です。
これによって、
- クエリが読みやすくなる
- ルール変更に強くなる
- バグを防ぎやすくなる
- セキュリティ・品質の観点からも安心して運用できる
というメリットが得られます。
数値は地味ですが、実務の Power Query では頻繁に登場する要素ですので、 ぜひ「意味のある名前を付けて数値を定義する」習慣を身につけていただきたいです。
