Power BIで在庫管理レポートを作成する際、最も頻繁に直面する課題の一つが「特定時点の在庫数をどう算出するか」という問題です。ERPや基幹システムから出力されるデータは、「何月何日に何個入庫した」「何個出庫した」という入出庫履歴であることがほとんどだからです。
現在の在庫数を知るためには、過去のすべての入出庫を足し合わせる累計計算が必要になります。Excelであればセル参照で実現できますが、毎日入庫、出庫があると伝票の数が多くなるため、件数が多いとExcelには向いていません。
その点、Power BIでは大量データを処理できます。DAX関数を使用することで、入庫数と出庫数を計算して、日ごとの在庫数を計算することが出来ます。
本記事では、入出庫伝票から、日々の在庫推移を可視化するための累計計算の手順を解説します。
サンプルデータ
実際の計算に入る前に、元となるデータの形を確認します。多くの現場では、以下のように「入庫数」と「出庫数」が別の列になっているか、あるいはプラスマイナスの符号で管理されています。
今回は、以下のようなシンプルな「入出庫テーブル」を使用します。これをPower BIに取り込んでいる前提で進めます。

サンプルデータはこちらからダウンロードしてください。
実際の手順
それでは、在庫推移を可視化するためのステップを解説します。
手順1:nullを0に置き換え
空白セルがnullとなっております。nullだと数値計算ができないため、これを0に置き換えます。
「入庫数」列のnullになってるセルを右クリックー「値の置換」をクリックします。

「置換後」に「0」を入力し、OKをクリックします。

「出庫数」列でも同じ操作をします。nullになってるセルを右クリックー「値の置換」をクリックします。

「置換後」に「0」を入力し、OKをクリックします。

nullが0に置き換わりました。

手順2:正味数量(Net Quantity)の作成
「入庫数」と「出庫数」が分かれている場合、まずはそれらを統合して、その日に増減した正味の数量を計算しておくと扱いやすくなります。
DAXの計算列で作成しても良いですが、Power Queryで正味数量を計算した列を追加します。
「列の追加」タブー「カスタム列」をクリックします。

「新しい列名」に「正味数量」を入力、「カスタム列の式」に [入庫数] – [出庫数] を入力し、OKをクリックします。

正味数量列が追加されました。

Power Queryエディターの作業は以上となります。あとはPower BIの機能(モデルビュー、DAXなど)を使って入出庫計算を行います。
「ホーム」タブー「閉じて適用」をクリックします。

手順3:日付テーブルの作成
時系列で累計を計算する場合、日付テーブルが必須です。
トランザクションデータ(T_入出庫)にある日付だけを使っていると、入出庫がなかった日の在庫が表示されず、グラフが途切れてしまう原因になります。
「テーブルビュー」をクリックし、「新しいテーブル」をクリックします。

次の数式を入力します。
日付テーブル = CALENDAR(DATE(2025,1,1), DATE(2026,12,31))

「Date」列に2025年1月1日~2026年12月31日までの日付を持つ日付テーブルが作成されました。「Date」列のデータ型が「日付と時刻」になってるため、列をクリックしてデータ型を日付型に変更します。

手順4:入出庫テーブルと日付テーブルを結合する
日付テーブルを作成した目的は、日ごとの在庫推移を計算するためです。日付テーブルと入出庫テーブルをテーブル結合することで、日付テーブルから在庫推移を計算することが出来ます。
「モデルビュー」をクリックします。

「T_入出庫」の「日付」列を「日付テーブル」の「Date」列までドラッグ&ドロップします。

T_入出庫は「日付」列をクリック、日付テーブルは「Date」列をクリックします。
「カーディナリティ」は「多対1」を選択します。日付テーブルは同じ日付が存在しませんが、T_入出庫は同じ日付に複数の入出庫がありえるからです。
設定が完了したら、「保存」をクリックします。

テーブル結合が完了しました。

手順5:在庫累計メジャーの作成
ここが本記事の核となる部分です。
在庫数とは、「開始日からその日までの数量の合計」です。これをDAXで表現するには、CALCULATE関数、FILTER関数、ALLSELECTED関数、ISONORAFTER関数を組み合わせます。
DAXは次の数式になります。
在庫数量 =
CALCULATE(
SUM('T_入出庫'[正味数量]),
FILTER(
ALLSELECTED('日付テーブル'[Date]),
ISONORAFTER('日付テーブル'[Date], MAX('日付テーブル'[Date]), DESC)
)
)
ちょっとぱっと見では理解が難しそうですね。CALCULATE関数だけでも1記事書ける内容なので、今回は数式の中身理解は省きます。
数式も1から自分で記述する必要はなく、クイックメジャーを使用すれば簡単に数式を生成できます。
「レポートビュー」ボタンをクリックします。

「T_入出庫」を右クリックー「新しいクイックメジャー」をクリックします。

「計算を選択してください」をクリックします。

「累計」を選択します。「基準値」にT_入出庫の「正味数量」を選択、「フィールド」に日付テーブルの「Date」を選択し、「追加」をクリックします。

メジャーが作成されました。

名称が分かりにくいため「在庫数量」に修正します。

T_入出庫に在庫数量が追加されました。

手順6:ビジュアルでの確認
作成したメジャーを使ってグラフを作成しましょう。
- 折れ線グラフを選択します。
- X軸:
日付テーブルの「Date」 - Y軸:作成したメジャー「在庫数量」
- 凡例:
T_入出庫テーブルの「商品名」
これで、商品ごとの在庫推移が積み上がりグラフとして表示されます。
入出庫がない日も線が途切れず、直前の在庫数が維持されて表示されていれば成功です。

まとめ
Power BIでは、入出庫履歴から在庫残高を算出する際に「累積計算」が有効です。Excelでは大量データ処理が重くなりがちですが、Power BIならDAXを活用して効率的に在庫推移を可視化できます。
手順は、まず入庫・出庫データを整形し正味数量を作成、次に日付テーブルを生成して入出庫がない日も含めます。その後、テーブルを結合し、CALCULATE と FILTER を組み合わせた累積在庫メジャーを作成。これにより日ごとの在庫残高を折れ線グラフなどで表示可能になります。
この方法は在庫管理だけでなく、銀行残高や会員数推移など時系列累積を扱う場面にも応用でき、日常業務の効率化に大きく役立ちます。
まずは手元の小規模なデータでこのメジャーを作成し、Excelの計算結果と一致するか確かめてみてください。

