本記事では、Power Query(M言語)とDAXの両方の観点から、具体的な操作方法や活用シーンをわかりやすく解説します。元データを整形し、必要な情報だけを抽出して可視化する手順をマスターすれば、レポート作成やデータ分析がさらにスムーズになるでしょう。
1. 文字列抽出の重要性
1-1. データクレンジングの一環
実務で扱うデータには、顧客IDや注文番号など、複雑な形式の文字列が含まれることがあります。不要なプレフィックスやサフィックス、特定の記号が含まれる場合、それらを取り除いて正規化する作業が必須です。文字列抽出によって必要な部分だけ切り出すことで、データの整合性を保ちながら、後続の分析やレポート作成が容易になります。
1-2. カテゴリ別の集計や加工
メールアドレスからドメインを抜き出したり、住所データから都道府県名だけを取り出したり、商品コードから色やサイズの情報を分割したりするシーンでは、文字列抽出や分割のテクニックがとても役立ちます。抽出した情報を新たな列やカテゴリとして扱うことで、多角的な分析が可能になります。
2. Power Queryでの文字列抽出
2-1. 基本的な操作
Power Queryエディター(以下クエリエディター)を利用すると、元データを取り込む段階で文字列の前処理を行えます。「データを変換」画面でクエリエディターを開き、該当の列を選択して操作を追加することで、抽出結果を新たな列として生成できます。
-
クエリエディターを開く
Power BI Desktop上部の「データの変換」ボタンをクリックして、クエリエディターを起動します。
-
カラムを選択
抽出対象となる文字列列を選び、「列の追加」タブから各種操作を選択します。
-
ステップの追加
抽出の操作を行うと、クエリの右ペイン「クエリの設定」に新しいステップが追加されます。ここで編集履歴を管理し、いつでも修正や削除が可能です。
2-2. クエリエディターの主な抽出機能
2-2-1. 列の分割
特定の区切り文字(カンマやハイフンなど)に基づいて列を分割すると、分割後の各パーツが新たな列として生成されます。郵便番号や電話番号、メールアドレスなど、規則性のある文字列を分割する場合に有効です。
-
区切り文字による分割
「列の分割」→「区切り文字による分割」を選択し、コンマやスペースなどを指定します。必要に応じて、分割する回数や分割する方向(左から、右から)を選択できます。
-
固定幅による分割
文字数が決まっている場合、固定幅を指定して任意の位置で区切ることができます。
2-2-2. 部分文字列の抽出
「列の追加」→「カスタム列」でM言語の式を使うことで、さらに柔軟な抽出が可能になります。
-
Text.Start
文字列の先頭から指定した文字数だけ抜き出す関数です。
これは、ProductCode列の先頭3文字を新たな列として生成します。
-
Text.End
文字列の末尾から指定した文字数を抜き出します。
-
Text.Range
引数に開始位置と文字数を指定して、任意の範囲を切り出します。
これは、PhoneNumber列の先頭から2文字スキップし、次の3文字を取得します。
2-2-3. 正規表現の活用
Power Query標準のUI上では直接正規表現を利用できませんが、M言語のカスタム機能や一部の拡張機能を用いれば、正規表現による検索・抽出を実装可能です。特定のパターンに合致する部分を取り出すシナリオでは検討の価値があります。
3. DAXを使った文字列抽出
3-1. DAXによる計算列やメジャー
DAX(Data Analysis Expressions)は、レポート上でデータを加工・集計するための言語です。クエリエディターとは異なり、モデルに取り込まれた後のテーブルや列に対して式を定義します。文字列抽出の場合は、計算列を追加して固定的に結果を保持するか、メジャーを定義して動的に表示するかを選択できます。
3-2. 主な関数
3-2-1. LEFT, RIGHT, MID
-
LEFT(文字列列, n)
文字列の先頭からn文字を返します。
-
RIGHT(文字列列, n)
文字列の末尾からn文字を返します。
-
MID(文字列列, 開始位置, 文字数)
任意の位置から指定文字数を抜き出せます。開始位置は1文字目が1として数える点に注意が必要です。
3-2-2. SEARCH, FIND
特定の文字や文字列がどの位置にあるかを調べたい場合に使います。
-
SEARCH(検索文字列, 対象列, [開始位置], [非一致時の戻り値])
大文字小文字を区別しません。
-
FIND(検索文字列, 対象列, [開始位置], [非一致時の戻り値])
大文字小文字を区別します。
検索結果として返ってくるのは見つかった文字列の先頭位置(整数)です。これを使って MID
などと組み合わせると、柔軟な抽出が可能です。
3-2-3. SUBSTITUTE, REPLACE
-
SUBSTITUTE(対象列, “検索文字列”, “置換文字列”, [置換が起きる回数])
文字列内の一部を別の文字列に置換します。
-
REPLACE(対象列, 開始位置, 文字数, “新しい文字列”)
指定した範囲を「新しい文字列」で置き換えます。抽出というよりは加工やクリーニングに役立ちます。
4. 活用シーン
4-1. メールドメインの切り出し
顧客データからメールアドレスの「@」以降を抽出して、ドメインごとにグルーピングしたい場合は、Power Queryで「区切り文字による分割」を使うか、DAXで SEARCH("@", [Email])
を用いてMID関数で切り出す方法があります。
これにより、どのドメインが多いのか、あるいは特定のドメインに属するユーザー特性はどうかなど、マーケティング分析がしやすくなります。
4-2. 住所の都道府県と市区町村の抽出
日本の住所データには都道府県名、郡市区、町名などが連結されている場合が多いです。Power Queryで都道府県リストに基づくマッピングを行ったり、特定の区切り文字が含まれる場合は分割機能を活用したりして、分析に必要な地理情報を取り出します。
たとえば、都道府県ごとの売上を知りたい場合は、Power Queryで「都道府県」列を新設しておくことで、レポート内でのスライサーやマップビジュアルが扱いやすくなります。
4-3. 注文番号や商品コードの一部抽出
システム上で採番された注文番号や商品コードに、意味のある情報が含まれているケースがあります。例えば、前半3桁がカテゴリーを表し、次の2桁が色コードを示すなど。その場合、先頭数文字を抜き出して新列を作成すれば、カテゴリー別や色別の集計が容易になります。
DAXで計算列として定義すれば、後からフィルターコンテキストに基づくメジャーも活用しやすくなります。
5. 運用時のポイント
5-1. どこで抽出するか:Power Query vs. DAX
-
Power Query
元データの取り込み時点で抽出・加工を済ませておくと、モデルがシンプルになり、レポート表示のパフォーマンス向上につながります。また、クエリエディターではビジュアルな操作で抽出ステップを追加できるため、チームメンバーとの共有も容易です。
-
DAX
レポート側で動的に抽出結果を使いたい場合や、フィルターコンテキストに応じて文字列を変化させたい場合はDAXが向いています。ただし、大規模データの場合、計算列の作成やメジャーの乱用はパフォーマンスに影響することがあります。
5-2. エラー処理とデータ品質
Null値や想定外の文字列形式が混在すると、抽出ステップでエラーが発生することがあります。IF
や ISBLANK
、ERROR
などの条件分岐を組み合わせて例外処理を行い、エラーになったデータを検出しやすくする工夫が必要です。
5-3. 定期的な見直し
ビジネス要件が変化すると、抽出対象の文字列パターンや区切り文字が変わる場合があります。定期的にクエリエディターやDAX式を見直し、古くなったロジックを適切にアップデートすることで、最新のデータ構造に対応できます。
6. まとめ
Power BIの文字列抽出機能を活用すれば、煩雑なテキストデータから必要な部分だけを切り出して整形し、分析や可視化に役立てられます。Power QueryではGUIを通じて直感的に前処理を行え、DAXでは計算列やメジャーを使って動的な抽出や加工が実現できます。
実運用では、元データのサイズや更新頻度、チームのスキルセットによって、どのステージで文字列抽出を行うかを選択しましょう。適切な手法で柔軟にデータを加工できるようになると、レポートの見やすさや分析の深さが格段に向上します。ぜひ今回紹介した手法を活用して、文字列抽出の効率化に取り組んでみてください。
コメント