この記事は Microsoft Power BI Advent Calendar 2023 の 6 日目 (12/6) の記事です
はじめに
製品によらず、BI (Business Intelligence) の基本のひとつに、
「すべての数値は集計されて表示される」
というものがある。
ここで言う「集計」とは aggregation: アグリゲーション のことである。
(英語にした方が明確なのです)
既に BI に慣れ親しんでいる人には「当たり前じゃん」と思われるかもしれない。が、日々、業務担当者の方を中心に BI のレクチャー等を行っていると、これが最初のハードルのようだと、ここ数年で気が付いたので共有しておこうと思います。
集計と聞いて SUM を思い浮かべた?
集計 と聞いて、もし SUM を思い浮かべたのであれば、あなたはこの記事のドンピシャの読者です。
集計 は英語にすると aggregation
SUM は 動詞だと**「合計する」**、名詞で使えば 「合計」 を意味します。
つまり、ここで明確にしておきたいのは、
- 集計 とは 合計 のことではない
- 集計 とは 合計 に限らない
- 合計 は 集計 のひとつの種類である
ということです。
ってことは、集計 には他にも種類があるのだ。
では Excel で集計の種類を見てみよう。
上記画像の左の表を見てください。日付、商品、個数という列があり、毎日の商品ごとの売上個数が記録されています。さて、この個数を集計したいと思う。最も簡単なのはリボンの [テーブルデザイン] - [集計行] に✅を入れる方法です(①)。
すると、右の画像のように、表の最下部に [集計行] が追加されました(②)。集計行の個数列には 200 という数値が表示されています。これは [個数] 列 の合計値である。200 と書かれたセルの右下の ▼ をクリックすると、ドロップダウンリストにここで選択可能な集計の種類が表示される(③)。デフォルトでは 合計 になっていることが確認できます。
集計 と聞いて 合計 だと思う人が多いのは、多くのソフトウェアやサービスにおいて、デフォルトの動作が 合計 になっているためなのかな?とは勝手な推測です。
(Power BI でも、暗黙のメジャーでは 合計 がデフォルトになっている)
ドロップダウンリストに表示されているように、合計は集計のひとつに過ぎず、他にも種類があります。
- なし
- 平均
- 個数
- 数値の個数
- 最大
- 最小
- 合計
- 標本標準偏差
- 票本分散
- その他...
そう、これらすべて、集計 (aggregation) なのだ。
集計とは文字通り、複数の値を集めてひとつの値にすること と言えます。値をひとつにする際のロジックが、上記の各種ということになる。デフォルトでは、これが合計になっており、すべての値は加算(足し算)されるのだ。
ここまでで、
「合計は集計の処理のひとつに過ぎない」
「集計とは合計に限らない」
ということがお分かりいただけたかと思います。
なぜ 集計 は BI の基本なのか?
冒頭に BI では
「すべての数値は集計されて表示される」
と書きました。
複数の値が存在し、それをそのまま表示しようとすると、テーブル形式(表形式)になる。
ただこのままではデータを眺めることしかできません。ここでは 9 行のデータなので、目で追っかけることが可能ですが、通常業務で扱うビジネスデータは数千行~数百万行、時には数億行にもなります。そうなると、目で追うことはできないし、そもそも1件ずつ確認することに意味がなくなってきます。
なので、各種集計値をグラフに表示することになる。BI では様々な軸 (ディメンション) でスライスして、動的に集計処理を実行します。これこそが BI だと言えるでしょう。
とりあえず、各種集計値を出してみる
Excel でやってみましょう。
代表的な集計処理 6 つを表示するとこうなります。合計と平均はよく使う集計処理だと思います。ただ、値の傾向を確認するには、その他に最大値、最小値、中央値、個数、数値の個数などが必要となります。
(最頻値があってもよし)
比較のために、同じ平均値を持つデータを記してみる。
先ほどの緑のデータとは別に、同じ合計値と同じ平均値を持つオレンジのデータを並べてみました。グラフ1 と グラフ2 は素の値をプロットしたもの。グラフを見れば、まるで傾向が異なることがわかりますね。もしこれが、異なる店舗の売上個数だとしたら、緑の店舗は曜日による影響があるのかな?あるいは 11/7 - 11/9 で何かイベントをしたのかな?と推測したくなります。一方でオレンジの店舗はコンスタントに売上個数があり、曜日に影響は受けないのかな?と思ったりします。
両方の店舗とも平均値は同じ 40 なのだが、これだけでもまるで傾向が異なることになりますね。このデータは日単位で売上個数がまとまっているので、現実的に考えるなら、会計ごとのより詳細なデータがあるはずです。一日の中で、売れる商品も異なるので、売れた商品の価格の平均値、最大値、最小値、中央値など、またはいち会計ごとの平均値、最大値、最小値、中央値などの各種集計値を算出することが可能となるでしょう。もちろん顧客データ(会員データ)と紐づけることが可能なら、誰が、いつ、どこで、何を、どのくらい購入したのかがわかることになります。
ただしその際に、1件ずつ顧客ごとにデータを見ようとすると、それは BI ではなく Excel の方が向いてますよーとなるかもしれない。BI であれば、顧客に対してもカテゴリーを追加して、軸(ディメンション)でデータをスライスしたいところですね。
複数の値をひとつの値にするのが集計処理
ここまで書いてきた通り、データを取り扱う時は、様々な集計処理を試すということになります。素の値を並べて、眺めているだけでは、わかることは少ないです。カテゴリーや件数を数える対象の 質的データ と 計算可能な 量的データ のどちらなのかを判断して、最適な集計処理を選択する。また、仮に計算可能な値だったとしても、それが適切な集計処理なのか、その集計に意味があるのか?も考えなければなりません。
集計も場合によって、集計の種類を変更することで意味が変わることがあります。
例えば、身長や体重。学生時代は身体測定、大人になると健康診断がありますが、とあるグループの身長と体重のデータがあった場合、単純に合計しても何も意味がありません。通常は平均身長や平均体重と言ったように、合計ではなく、平均を使用します。では体重は常に合計することに意味がないのでしょうか?
いえ、これがエレベーターやエスカレーターとなると、体重の合計は必要なものになります。また吊り橋でも必要なものですよね。つまり耐荷重が設定されている構造物や乗り物では生命線になってきます。
データの種類は千差万別です。従事されている業種・業態によって、まるで異なるデータを取り扱いますし、同じデータでも取り扱い方が変わることもあるでしょう。つまりはそれがビジネスなのであり、やはりまさにビジネスインテリジェンスなんだなぁと思うところです。
しかし、そんな千差万別なデータだとしても、常に集計値を算出して、ビジュアライズするということは共通しています。
- 素の値ではなく、ビジネスロジックに合わせた適切な集計処理による集計値を使うこと
- データを 1 件ずつ、行指向で捉えるのではなく、列指向で考えること
- 集計対象の値を明確にして、モデリングすること
- ディメンションとファクトを明確に定義してあること
Power BI でそれを実現するにはどうすればいいの?
まずは完全な スタースキーマ にしましょうということに、やっぱり帰結します。そうでなければ、お話にならないのです。いま一度、"Power BI スタースキーマ" で検索してみてください。公式のドキュメントは以下に記しておきます。
一読して、理解できるほど容易なものではありません。私も Power BI を始めて 7 - 8 年ですが、それでも定期的に読み返して、考える時間を取っています。ゆっくりやっていきましょう。
まとめ
今回は以上です。
基本的に頭で考えたことをずらーっと、テキストで書いてみました(ChatGPT は一切使ってません🫡
皆様の考えるきっかけになれば、幸いです。