論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
Power BI
Microsoft Power BI
BI / データ可視化

🔖 キーワード索引

このページで扱う主要キーワード(クリックで該当セクションへ):

DAX Power Query M 言語 メジャー 計算列 リレーションシップ RLS 行レベルセキュリティ データセット ダッシュボード 47都道府県マップ DirectQuery vs Import Power Platform

💡 30秒で分かる結論

📍 あなたが今見ているもの

Power BI」 (Microsoft Power BI) は、 SSDSE-B-2026 などの公的統計データを使った教材・分析で頻出するキーワードです。 本ページでは、 まず直感、 次に数式、 そして 47 都道府県の実値で確かめる、 という流れで体系的に整理します。 加えて、 ケーススタディ・FAQ・歴史的経緯・参考文献までを 1 ページに集約し、 用語の「地図」として使えるようにしました。

関連用語(前提・並列・発展)と関連グループ教材も末尾にまとめてあるので、 用語の地図として活用してください。

🎨 直感で掴む

Power BI は Microsoft の BI 製品群(Desktop/Service/Mobile/Report Server)の総称です。 Tableau とよく比較されますが、 Excel と地続きであることが最大の特徴で、 Power Query と DAX という 2 つの言語を持ちます。

SSDSE のような長い表データは、 Power Query で「年度」「地域」を整形 → モデルで「都道府県マスタ」と紐付け → DAX で「高齢化率」「人口増減率」をメジャー化 → ビジュアルで配置、 という典型ルートで扱います。

📐 数式・定義

Power BI の中心言語は DAX。 DAX は「フィルタコンテキスト」と「行コンテキスト」という 2 種のスコープを持ちます。

【DAX: シンプルなメジャー】
総人口 := SUM('SSDSE'[A1101])
【DAX: 高齢化率(メジャー)】
高齢化率 := DIVIDE(SUM('SSDSE'[A1303]), SUM('SSDSE'[A1101]))

DIVIDE は 0 除算で空白を返す安全な除算。

【DAX: 文脈変更(CALCULATE)】
全国平均 := CALCULATE(AVERAGE('SSDSE'[A1101]), ALL('SSDSE'[Prefecture]))

ALL でフィルタを除き、 全都道府県を母集団とする平均を取る。

これを数学的に書けば、 フィルタ集合 $F$ に対して

$$\text{メジャー}_{F}(\theta) = f\bigl(\{x_i : i \in F\};\theta\bigr)$$

であり、 CALCULATE はこの $F$ を 動的に書き換える演算子と解釈できます。

🔬 数式・概念を言葉で読み解く

用語意味SSDSE での例
クエリPower Query が生成する ETL ステップ列「CSV 読込→ヘッダ昇格→型変換→不要列削除」
テーブルモデル内のリレーショナル表『人口表』『都道府県マスタ』
リレーションシップキーで紐付ける線地域コードで人口表⇔マスタを結ぶ
計算列行コンテキストで評価される列「= [総人口]−[男性人口]」
メジャーフィルタコンテキストで評価される集計「= SUM([総人口])」
時間インテリジェンス年度・YTD・PY を扱う DAX 群TOTALYTD / SAMEPERIODLASTYEAR
RLS行レベルセキュリティ。 役割でフィルタ「東京担当者は東京の行のみ閲覧可」
DirectQueryクエリを毎回 DB に発行大規模 DWH 直結に向く
ImportVertiPaq に列圧縮で取込SSDSE 程度なら最速

🧮 実値で計算してみる(SSDSE-B-2026)

実値計算:SSDSE-B-2026 で作る Power BI ダッシュボード

典型的な構成は次の通り。

  1. 取り込み:Power Query で data/raw/SSDSE-B-2026.csv を読み込み、 ヘッダを昇格 → 数値列を整数型に変換 → 不要な英文ヘッダ行を削除。
  2. 計算列高齢化率 = [65歳以上人口] / [総人口] を行ごとに計算。
  3. メジャー全国合計 := SUM(SSDSE[総人口])東京シェア := DIVIDE(CALCULATE([全国合計], SSDSE[都道府県]="東京都"), [全国合計])
  4. ビジュアル:マップ(都道府県別 高齢化率)、 折れ線(年度推移)、 散布図(人口 × 県内総生産)。

計算結果の目安:

  • 全国合計(2023, 総人口):1 億 2436 万人
  • 東京シェア = 14,086,000 / 124,360,000 ≒ 11.33 %
  • 高齢化率の全国平均 ≒ 30.5 %、 最大 秋田 ≒ 39 %、 最小 沖縄 ≒ 23 %
  • YoY(前年比)の全国総人口 ≒ −0.39 %

🐍 Python 実装

例 1:pandas で前処理 → Power BI 取り込み用 Parquet 書き出し

import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='shift_jis')
df.columns = df.iloc[0]
df = df.iloc[1:].reset_index(drop=True)
for c in ['総人口', '15歳未満人口', '15〜64歳人口', '65歳以上人口']:
    df[c] = df[c].astype(int)
df['年度'] = df['年度'].astype(int)
df['高齢化率'] = df['65歳以上人口'] / df['総人口']
df.to_parquet('processed/ssdse-b-2026.parquet', index=False)
print('rows:', len(df))

例 2:Power BI で読みやすい「縦持ち」変換

long = df.melt(id_vars=['年度','地域コード','都道府県'],
               value_vars=['総人口','15歳未満人口','15〜64歳人口','65歳以上人口'],
               var_name='指標', value_name='人数')
long.to_csv('processed/ssdse-b-long.csv', index=False, encoding='utf-8-sig')
print(long.head(8))

例 3:Power BI から呼ぶ Python ビジュアル

# Power BI Desktop の「Python ビジュアル」セルに貼る
import pandas as pd
import matplotlib.pyplot as plt
# dataset は Power BI が自動注入する DataFrame
df = dataset.copy()
df = df.sort_values('総人口', ascending=False).head(10)
plt.figure(figsize=(8,4))
plt.bar(df['都道府県'], df['総人口'])
plt.xticks(rotation=30)
plt.title('人口上位 10 都道府県')
plt.tight_layout()
plt.show()

例 4:DAX で書く高齢化率ランキング(参考)

高齢化率ランク :=
RANKX(
    ALL('SSDSE'[都道府県]),
    [高齢化率],
    , DESC, Dense
)

📂 ケーススタディ・追加実装例

ケース 1:Power Query で SSDSE-B-2026 を整形

// Power Query M 言語
let
    Source = Csv.Document(File.Contents("C:\data\SSDSE-B-2026.csv"),
        [Delimiter=",", Encoding=932]),    // Shift_JIS
    PromotedHeaders = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
    RemovedTopRow = Table.Skip(PromotedHeaders, 1),
    TypedTable = Table.TransformColumnTypes(RemovedTopRow, {
        {"年度", Int64.Type},
        {"総人口", Int64.Type},
        {"65歳以上人口", Int64.Type},
        {"県内総生産", Int64.Type}
    })
in TypedTable

ケース 2:DAX で高齢化率と前年差を計算

高齢化率 := DIVIDE(SUM('SSDSE'[65歳以上人口]), SUM('SSDSE'[総人口]))

前年高齢化率 :=
CALCULATE([高齢化率], DATEADD('SSDSE'[年度], -1, YEAR))

高齢化率の前年差 := [高齢化率] - [前年高齢化率]

ケース 3:マップビジュアルで都道府県分布

  1. 「マップ」ビジュアルを追加
  2. 「場所」に 都道府県
  3. 「サイズ」に SUM(総人口)
  4. 「色」に [高齢化率] メジャー
  5. 地理データの認識精度を上げるため、 列のデータカテゴリを「都道府県」に設定

ケース 4:Python ビジュアルで matplotlib 図を埋め込み

import matplotlib.pyplot as plt
df = dataset
top = df.sort_values('総人口', ascending=False).head(10)
plt.figure(figsize=(8, 4))
plt.barh(top['都道府県'][::-1], top['総人口'][::-1])
plt.title('総人口 上位10県(2023年)')
plt.tight_layout()
plt.show()

ケース 5:行レベルセキュリティ (RLS) の設定

  1. 「モデリング」 → 「セキュリティ管理」
  2. 「ロールの作成」 → 例:『東京担当』
  3. DAX フィルタ:[都道府県] = "東京都"
  4. テスト:「テストとして表示」で動作確認

ケース 6:パフォーマンスチューニング

🪜 ステップバイステップ チュートリアル

チュートリアル:Power BI で SSDSE-B-2026 ダッシュボードを作る

ステップ 1:データ取り込み

Power BI Desktop 起動 → ホーム → データを取得 → テキスト/CSV → SSDSE-B-2026.csv、 文字コードに「日本語 (Shift-JIS) - 932」を指定。

ステップ 2:Power Query で整形

// 最初の行(英文ヘッダ)を削除
= Table.Skip(Source, 1)
// ヘッダ昇格
= Table.PromoteHeaders(#"Removed Top Rows")
// 型変換
= Table.TransformColumnTypes(#"Promoted Headers", {
    {"年度", Int64.Type},
    {"総人口", Int64.Type},
    {"65歳以上人口", Int64.Type}
})

ステップ 3:データ列カテゴリ設定

モデリング → データカテゴリ → 「都道府県」 を選ぶ。 マップビジュアルが正しく地点を認識する。

ステップ 4:DAX メジャーを作成

高齢化率 = DIVIDE(SUM('SSDSE'[65歳以上人口]), SUM('SSDSE'[総人口]))
人口 YoY = [総人口] - CALCULATE([総人口], DATEADD('SSDSE'[年度], -1, YEAR))

ステップ 5:ビジュアル配置

  1. マップ:場所=都道府県、 サイズ=[総人口]、 色=[高齢化率]
  2. カード:[総人口] の全国合計、 [高齢化率] の全国平均
  3. 折れ線:X 軸=年度、 Y 軸=[総人口]、 凡例=都道府県(上位 5 県)
  4. テーブル:都道府県、 総人口、 高齢化率、 YoY

ステップ 6:レポート共有

Power BI Service へ発行(Pro ライセンス必要)、 ワークスペース内で共有、 自動更新設定。

🚀 現場での応用シナリオ(8 例)

応用 1:経営ダッシュボード

売上・利益・在庫・予算の月次/週次/日次更新。 Power BI Service の自動更新と Teams 配信。

応用 2:自治体オープンデータ

SSDSE-B-2026 を読み込み、 都道府県別人口・経済・社会指標をマップ化。 Power BI Embedded で市民向けに公開も可。

応用 3:学校データ分析

科目別成績、 不登校推移、 進路追跡。 文部科学省統計と SSDSE を結合してベンチマーク。

応用 4:医療・福祉

病床稼働率、 救急搬送、 在宅医療件数。 RLS で病院ごとアクセス分離。

応用 5:マニュファクチャリング

製造ラインの稼働率、 不良率、 OEE。 IoT センサーから Synapse 経由で取り込み。

応用 6:人事分析

採用ファネル、 給与分布、 離職予測(Azure ML 連携)。

応用 7:マーケティング

キャンペーン ROI、 チャネル別売上、 顧客 LTV。 Google Analytics、 CRM、 ERP を統合。

応用 8:研究・大学

研究費獲得状況、 論文出版、 学生統計。 経年比較ダッシュボード化。

🏋️ 演習問題(8 題)

  1. Power BI Desktop で SSDSE-B-2026 を読み込み、 Power Query で整形せよ。
  2. DAX メジャーで「高齢化率」「人口 YoY」「全国比シェア」を計算せよ。
  3. マップビジュアルで「都道府県」を地理ロールに設定、 ヒートマップを作れ。
  4. Time Intelligence で「過去 5 年平均人口」のメジャーを作れ。
  5. RLS で「東京担当」「大阪担当」のロールを作り、 アクセス制限をテストせよ。
  6. Python ビジュアルで matplotlib の棒グラフを埋め込め。
  7. Power BI Service へ発行し、 自動更新スケジュールを設定せよ。
  8. DAX Studio でクエリを実行し、 性能を分析せよ。

🗺 学習ロードマップ

  1. レベル 1 — Power BI Desktop の UI、 ビジュアルのドラッグ操作、 簡単なフィルタ。
  2. レベル 2 — Power Query で取り込みと整形(型変換、 列削除、 行フィルタ)。
  3. レベル 3 — DAX の基本(SUM, AVERAGE, CALCULATE, FILTER)、 計算列とメジャー。
  4. レベル 4 — リレーションシップ、 スタースキーマ、 Time Intelligence。
  5. レベル 5 — Power BI Service、 自動更新、 RLS、 Apps の作成。
  6. レベル 6 — Premium / Fabric、 DAX 最適化、 大規模モデル、 Embedded 配信。

📊 比較表(兄弟手法・選択肢)

Power BI ライセンス比較

プラン料金用途
Free / Desktop無料個人作業、 学習
Pro10 USD / user / 月組織内共有、 自動更新
Premium Per User20 USD / user / 月大容量、 AI 機能
Premium Capacity4,995 USD / 月~全社配信、 Embedded
Fabric F SKU応相談OneLake + Power BI 統合

📖 用語ミニ辞典

用語意味
DAXData Analysis Expressions。 集計の式言語
M 言語Power Query の式言語
計算列行コンテキストで毎行計算する列
メジャーフィルタコンテキストで集計する式
リレーションシップテーブル間の結合関係
スタースキーマ中心ファクト + 周辺ディメンション
RLS行レベルセキュリティ
VertiPaq列指向圧縮エンジン
DirectQueryクエリ時に DB へ直接問い合わせ
Importデータを取り込んでローカル保持
CALCULATEフィルタコンテキストを変更する DAX 関数
Time Intelligence時間軸の DAX 関数群

🍳 コードレシピ(コピペ用 15 連発)

レシピコード
Power Query: 型変換
= Table.TransformColumnTypes(Source, {{"年度", Int64.Type}})
Power Query: フィルタ
= Table.SelectRows(Source, each [年度] = 2023)
Power Query: 列追加
= Table.AddColumn(Source, "高齢化率", each [65歳以上人口]/[総人口])
DAX: 合計
総人口 := SUM('SSDSE'[総人口])
DAX: 平均
平均人口 := AVERAGE('SSDSE'[総人口])
DAX: 比率
高齢化率 := DIVIDE(SUM('SSDSE'[65歳以上人口]), SUM('SSDSE'[総人口]))
DAX: CALCULATE
東京シェア := CALCULATE([総人口], 'SSDSE'[都道府県]="東京都") / [総人口]
DAX: フィルタ削除
全国平均 := CALCULATE(AVERAGE('SSDSE'[総人口]), ALL('SSDSE'[都道府県]))
DAX: 前年
前年人口 := CALCULATE([総人口], DATEADD('SSDSE'[年度], -1, YEAR))
DAX: ランク
人口ランク := RANKX(ALL('SSDSE'[都道府県]), [総人口],, DESC)
メジャーをカードに
ビジュアル「カード」を追加 → メジャーをドラッグ
Time Intelligence: YTD
YTD人口 := TOTALYTD([総人口], 'SSDSE'[年度])
RLS フィルタ
[都道府県] = USERNAME()
Python ビジュアル
dataset = pd.DataFrame(...) を受け取って matplotlib
R ビジュアル
ggplot2 で同様の処理が可

⚠️ よくある落とし穴

❌ DAX のコンテキスト混同
計算列は「行コンテキスト」、 メジャーは「フィルタコンテキスト」。 同じ式でも値が変わる。 まずは 1 つの数値を 3 通りの式で確認するクセを。
❌ リレーションシップの方向
1→多の方向が逆だとフィルタが伝播しない。 マスタ表は「1」、 トランザクション表は「多」が原則。
❌ DirectQuery の限界
DAX の一部関数(時間インテリジェンスなど)は DirectQuery で動かない。 大規模 DWH と組み合わせるときは要検証。
❌ Import モードのメモリ
VertiPaq は列圧縮で強力だが、 高カーディナリティ列(連続値・テキスト)は容量を食う。 不要な列は早めに削る。
❌ RLS の検証漏れ
行レベルセキュリティはモデル全体を覆うので、 ロールごとに必ず『このロールで表示』をプレビューして検証する。

❓ よくある質問(FAQ)

Q: 計算列とメジャーの違いは?
A: 計算列は「テーブルに 1 列追加、 行コンテキストで毎行計算」。 メジャーは「集計時にフィルタコンテキストで遅延評価」。 メモリ・速度ともにメジャー優先が原則。
Q: Power Query と DAX の役割分担
A: 取り込み・整形・列追加・型変換は Power Query(M 言語)、 集計・指標・比率は DAX。 「上流で整える、 下流で集計する」を守ると保守性が高い。
Q: Excel と Power BI どちらを使うべき?
A: 1 シート完結・100MB 以下なら Excel、 複数データソース統合・自動更新・共有なら Power BI。 SSDSE 単独なら Excel でも回るが、 学習価値で Power BI を勧めたい。
Q: 有料/無料の境界は?
A: Power BI Desktop は無料。 共有・自動更新するには Pro ライセンスが必要。 大規模配信は Premium/Fabric。
Q: Mac で使える?
A: Power BI Desktop は Windows 専用。 Mac では Power BI Service(Web 版)の閲覧のみ可。 Mac で開発する場合は仮想化/クラウド VM。

📜 歴史と背景

歴史と位置づけ:Power BI は Microsoft が 2015 年に正式リリースした BI 製品。 ルーツは Excel の「PowerPivot」(2010)と「Power View」(2013)にあります。 これらを単独の製品として独立させ、 Power Query/Power Pivot/Power View/Power Map/Power Q&A を統合したものが Power BI。

製品ファミリー

言語

🗺 概念マップ

Power BI のレイヤー構造:

   [表示]      ビジュアル(棒/線/散布/マップ/Python ビジュアル)
                       ↑
   [計算]      DAX メジャー / 計算列 / 時間インテリジェンス
                       ↑
   [モデル]    テーブル + リレーションシップ + 階層 + RLS
                       ↑
   [取込]      Power Query(M 言語:取り込み・整形)
                       ↑
   [データ]    CSV / Excel / SQL / Web API / SSDSE-B-2026.csv

📚 参考文献・出典