ETLとは何か — CSVを集める前に、表の意味を決めよう

LWP | ETLとは何か―CSVを集める前に、表の意味を決めよう

ETLとは何か―CSVを集める前に、表の意味を決めよう

集計結果と要確認データを、一緒に渡すPower Query設計

ストーリー

淡水商事を取材するワカサギさんは、「CSVを集めれば売上記事が書ける」と早くも見出しを考えていた。フナさんが確かめたのは、合計より前の「一行の意味」。シャケモンも加わり、取得・加工・出力の役割をたどる。

以下はWindowsデスクトップExcelのPower Queryを想定した架空例です。売上表の一行を一件の伝票とし、伝票番号を入力全体で一意にします。金額は円。図の数値は説明用入力から計算した期待値で、Excelによる実測結果ではありません。

1 一行は何を表すのか

一行の単位と未確定値を、処理の前に確認する。

図1|一行の単位と未確定値を、処理の前に確認する。

2 取得・加工・出力をつなぐ

ETLは取得・加工・出力の役割を表す。

図2|ETLは取得・加工・出力の役割を表す。

3 Power QueryとMとExcel

取得・変換の定義と、読み込み先の設定を分ける。

図3|取得・変換の定義と、読み込み先の設定を分ける。

4 コードのゼロと未確定を守る

識別子と未確定金額の意味を変えずに扱う。

図4|識別子と未確定金額の意味を変えずに扱う。

5 結合で売上行が増える理由

一対多の対応が展開後の売上行を増やす。

図5|一対多の対応が展開後の売上行を増やす。

6 40,000円だけでは完了しない

集計と要確認表を一組で確認する。

図6|集計と要確認表を一組で確認する。

7 元を直し、同じ規則で更新する

訂正は入力側で行い、集計と要確認表を再更新する。

図7|訂正は入力側で行い、集計と要確認表を再更新する。

まとめ

ETLは、データを取得し、利用目的に合わせて加工し、使う場所へ格納する一連の役割を表します。一行の単位・型・キー・不正値の扱いを先に決めると、どの処理が何を保証するかを説明できます。

今回の仕掛け

この例の有効額40,000円は、東京27,000円と大阪13,000円の合計です。T005の未確定額を含む全売上の確定額ではありません。有効件数と要確認件数、元ファイル・データ行の連番を一緒に渡し、訂正元へ戻れるようにします。

マスターの同一コードが複数行あると、結合後の展開で売上行が増えることがあります。必須列の欠落・マスターキーの重複は停止、個々の売上の値の不備は要確認へ振り分ける、というのが今回の設計例です。すべての業務に同じ停止条件を強制するものではありません。

Power QueryのGUIとMはクエリ定義の入口です。Excel側には結果の読み込み先と更新設定があります。共通クエリを参照しても取得回数が必ず一回になるわけではなく、接続のみのクエリは永続的な中間表でもありません。Microsoftの説明

ETLは主要な変換を格納前に、ELTは格納後に行う順序の違いです。バッチかストリーミングか、全件か差分かは別の分類です。本例は更新のたびに対象CSVを読み直す前提で、差分処理や無人定時実行は実装していません。ETLとELTの解説

今回のソースコードのサンプル

サンプルコード 変換できなかった金額を要確認表に残す

01

let

02

    source = #table(

03

        type table [伝票番号 = text, 売上金額 = text],

04

        {{"T001", "12000"}, {"T005", "未確定"}}

05

    ),

06

    checked = Table.AddColumn(

07

        source, "金額判定",

08

        each try Number.FromText([売上金額], "ja-JP"), type record

09

    ),

10

    issues = Table.SelectRows(checked, each [金額判定][HasError])

11

in

12

    Table.SelectColumns(issues, {"伝票番号", "売上金額"})

関数の説明

Number.FromTextは文字列を数値へ変換し、地域設定を指定できます。tryは成否をレコードとして返します。HasErrorが真の行をTable.SelectRowsで選びます。[Number.FromText](https://learn.microsoft.com/en-us/powerquery-m/number-fromtext)、[エラー処理](https://learn.microsoft.com/en-us/power-query/error-handling)

コードの説明

sourceは説明用二行の表です。checkedは元の金額文字列を残したまま変換結果を加え、issuesは変換失敗だけを集めます。0円への置換や行の消去ではなく、元の伝票へ戻れる要確認表を返します。

入力・概要

空のクエリの詳細エディターへ全体を貼り付ける例です。外部ファイル・別クエリは不要。null・空欄・重複・マスター照合は、この短いサンプルの検査範囲に含みません。仕様と構造を照合しましたが、Excelでの実行は未実施です。

結果

予測される結果は、伝票番号T005、売上金額「未確定」の一行です。

読むポイント

変換の成功・失敗を、元の値と結び付けて残している点を見てください。実務へ組み込むときは、必須値や未登録コードなどの業務検査を追加します。

出典メモ

元ネタ:[採用原稿 260927_ETLの全体像とPowerQuery実践.md](<C:/LWP/記事制作/01_記事ネタ/archive/260927_ETLの全体像とPowerQuery実践.md>)。2026年10月4日に原稿全文と追補を確認し、中心主題を選んで再構成しました。会社・人物・業務データは創作・説明用です。

技術の仕様は原資料と一次資料に照合しました。サンプルと図の結果はソース・仕様・計算に基づく予測で、Excel実機の動作確認済みとはしていません。

Copyright © 2026 LWP 山中 一弘

本資料は、出典を明記いただければ、商用・非商用を問わず、ご自由に複製・改変・再配布していただけます。なお、著作権表示は改変せず、そのまま記載してご利用くださいますようお願いいたします。