BI探検ノート

Power Query で、空白行と重複行を消す方法(消えない重複は、空白(スペース)が原因だった)

約5分

濵口 翔長崎で、Power BI のつまずきを記録しています
目次
  1. 前提
  2. 手順1: 空白行を消す
  3. 手順2: 重複行を消す(でも、梅田が消えない)
  4. 原因と手順3: 後ろの空白を取る
  5. 公式の記載との照合
  6. この記事で確認できたこと・できていないこと
  7. 参考

確認日2026年10月24日。Power BI Desktop(日本語版、2.159.883.0)で、ダミーの CSV を使って確かめました。確認できていないことは、末尾にまとめました。

CSV を読み込んだら、空白の行と、同じ内容の行(重複)が入っていました。Power Query で消せます。ただ、見た目が同じなのに、重複として消えない行がありました。原因は、文字の後ろの空白でした。

結論(30秒版)

  • 「ホーム」タブの「行の削除」→「空白行の削除」で、すべての列が空(空の文字、または null)の行が消えました(9行 → 7行)。
  • 全部の列を選んで「重複部分の削除」を押すと、同じ内容の行が消えました(7行 → 6行)。
  • でも、「梅田」の行は、見た目が同じなのに、2行残りました。「梅田 」と、後ろに空白が付いていたためです。「トリミング」をしてから、もう一度重複を消すと、5行になりました。

前提

ダミーの CSV(dup.csv、UTF-8、見出しと9行)を、「データを取得」→「テキスト/CSV」で開いて、「データの変換」で Power Query エディターを開きました。中身は、次のとおりです。

  • S02 の新宿が、まったく同じ内容で2行(重複)
  • 空白の行が2行(「,,」だけの行)
  • S03 の梅田が2行。ただし、2行目の店舗名は、「梅田」の後ろに空白が1つ付いている
  • S04 の難波は、売上が空(null)

読み込んだ直後の表。9行。S02 の新宿が2行、店舗コードも店舗名も空で売上が null の行が2行(4行目と8行目)、S03 の梅田が2行、S04 の難波は売上が null

4行目と8行目の行は、店舗コードと店舗名が空で、売上が null でした。梅田の2行は、画面では、同じに見えます。

手順1: 空白行を消す

「ホーム」タブの「行の削除」を押して、「空白行の削除」を選びました。メニューには、「上位の行の削除」「下位の行の削除」「代替行の削除」「重複部分の削除」「空白行の削除」「エラーの削除」が並んでいました。

9行が7行になりました。空白の2行が消えて、売上だけが空の難波の行は、残りました。式は、次のとおりです(「削除された空白行」のステップ)。

Table.SelectRows(変更された型, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null})))

行の全部の値から、空の文字("")と null を除いて、何も残らない行を消す式です。だから、1つでも値がある行は消えません。

手順2: 重複行を消す(でも、梅田が消えない)

3つの列の見出しを、Ctrl キーを押しながらクリックして、全部の列を選びました。「行の削除」→「重複部分の削除」を押すと、7行が6行になりました。式は、Table.Distinct(削除された空白行) です。

S02 の新宿は、1行になりました。しかし、梅田は、2行のままです。

重複部分の削除のあとの表。6行。S03 の梅田が2行残っている。画面では、2行とも「梅田」と読める

原因と手順3: 後ろの空白を取る

梅田の2行は、1行目が「梅田」、2行目が「梅田 」(後ろに空白)でした。Power Query は、文字を1文字ずつ比べるので、空白があると、別の値になります。Microsoft Learn にも、Power Query は大文字と小文字も区別する、と書かれています(確認日 2026年10月24日)。

直し方は、次のとおりです。

  1. 「重複部分の削除」のステップを、いったん削除しました。
  2. 店舗名の列を選んで、「変換」タブの「書式」→「トリミング」を押しました。ステップ「トリム テキスト」ができました。
  3. もう一度、全部の列を選んで、「重複部分の削除」を押しました。

結果は5行でした(S01 渋谷、S02 新宿、S03 梅田、S04 難波、S05 博多)。

最後の表。5行。S01 渋谷 1200、S02 新宿 1500、S03 梅田 900、S04 難波 null、S05 博多 700

適用したステップの並びは、「ソース」「昇格されたヘッダー数」「変更された型」「削除された空白行」「トリム テキスト」「削除された重複」です。トリミングを、重複の削除の前に置くのが、ポイントです。

適用したステップ。ソース、昇格されたヘッダー数、変更された型、削除された空白行、トリム テキスト、削除された重複の順

公式の記載との照合

Microsoft Learn の「Working with duplicate values」と「Table.Distinct」(英語版、確認日 2026年10月24日)と、私の観察を、突き合わせました。

  • 大文字と小文字: 重複の比較では、大文字と小文字が区別される、と書かれています。大文字と小文字をそろえたいときは、先に、大文字または小文字にそろえる変換を入れる、という回避策が示されています。この記事では、確かめていません。
  • どの行が残るか: どの行が残るかは、保証されない、と書かれています。順番を保ちたいときは、Table.Buffer を使う方法などが書かれています。この記事のデータでは、先に出てきた行が残りましたが、保証はありません。
  • 列を絞った重複の削除: Table.Distinct は、列を指定すると、その列だけで重複を判断する、と書かれています。この記事では、全部の列で確かめました。
  • メモリ: 重複の削除は、元のデータベースに処理を任せられないとき、メモリを多く使うことがある、と書かれています。大きなデータでは、確かめていません。

この記事で確認できたこと・できていないこと

確認日: 2026年10月24日。Power BI Desktop(Windows、日本語版、2.159.883.0、未サインイン)、ダミーの CSV 9行。

確認できたこと

  • 「空白行の削除」が、すべての列が空の行を消し、一部だけが空の行は残すこと(9行 → 7行)
  • 全部の列を選んだ「重複部分の削除」が、同じ内容の行を消すこと(7行 → 6行)
  • 後ろに空白が付いた行は、重複とみなされず残ること
  • 「トリミング」のあとに、重複を消すと、5行になること

確認できていないこと

  • 先頭の空白や、全角の空白(スペース)がある場合(「トリミング」の対象かどうかも)
  • 大文字と小文字だけが違う行
  • 1つの列(店舗コードだけなど)だけを選んだ重複の削除
  • 数万行以上の大きなデータでの速さ
  • Excel ファイルや、データベースから読んだ場合
  • Power BI サービスでの動作、英語版での名称

参考

この記事で使った用語

Power BI Desktop
Windows で動く、レポートを作るためのアプリです。データの取り込みとモデルの作成、レポートの作成に向いています。

用語集をすべて見る