困りましたぞ…
Power BIで取得したデータに、全角/半角文字が混在しておりますぞ!
Power BIで全角文字→半角文字に変換するのは、少し大変ですが、Power Query等で変換できます。
この記事では、Power BIで取得した全角文字→半角文字に変換する方法を紹介します。
- Excel関数で全角→半角変換する方法
- Power BIで全角→半角変換する方法
- Power Queryのカスタム関数を使った変換方法
Excelで全角→半角変換する方法
Power BIを使わず、Excel上で全角→半角(英数カナ)に変換したい場合、「ASC関数」を使います。
以下のようにExcel関数式を使えば、簡単に全角→半角変換できます。
=ASC([@変換したい全角の列])

ASC関数で新しい変換後の列を作成すると、自動的に一番下まで式がコピーされます。

Excelでの全角→半角変換は、とても簡単ですな!
Power QueryでもASC関数と同様の関数を使えばよいのですかな?
実は、Power Queryで使うM言語や、Power BIのDAXでは、ExcelのASC関数と同じ機能を持つ関数はありません…
Power Queryで全角→半角変換する方法
Power BIで取り込んだデータを全角→半角変換したい場合、Power QueryのM言語や、Power BIのDAX式を使う必要があります。
よくみるやり方として、「A、B、C…」→「A、B、C…」のように、対応表を使って変換する方法があります。
しかしそれだと少し大変なので、今回は簡単にUnicodeのコードポイントを変換して、全角→半角変換する方法を紹介します。
全角文字のデータを取り込む
1.Power BIで取得する全角データを含むExcelサンプルファイルを用意します。

2.Power BIで、対象のデータを取得します。
※今回は簡単にExcelブックで取り込みます

3.対象のデータを選択し、「データの変換」をクリックして、Power Queryエディタを開きます。

Power Queryエディタが開いたら、データの変換をしてきましょう!
Power Queryでカスタム列を作成
1.Power Queryエディタの「列の追加」>「カスタム列」を選択します。

2.以下のようにカスタム列の式を入力し「OK」をクリックします。
Text.Combine(
List.Transform(
Text.ToList([OriginalText]),
each Character.FromNumber(
let n = Character.ToNumber(_)
in if n >= 65281 and n <= 65374 then n - 65248
else n
)
),
""
)
※[OriginalText]は、変換したい全角を含むデータの列を選択します

ちなみに、全角スペースも半角スペースに変換したい場合は、以下の式を使ってください。
Text.Combine(
List.Transform(
Text.ToList([OriginalText]),
each Character.FromNumber(
let n = Character.ToNumber(_)
in if n = 12288 then 32
else if n >= 65281 and n <= 65374 then n - 65248
else n
)
),
""
)
※[OriginalText]は、変換したい全角を含むデータの列を選択します
3.以下のように全角→半角に変換できました!
あとは「ホーム」>「閉じて適用する」でPower BIデスクトップにデータを反映します。

この式は、一体何をしているのですかな…?
Unicodeでは、各文字に固有の数値(コードポイント)が割り当てられています。
半角と全角の対応する文字は、決まった数値分だけずれています。
たとえば半角の「A」はコードポイント65で、全角の「A」は65313です。
このとき、全角文字から65248を引くと、対応する半角文字のコードポイントになり、全角→半角変換できるというわけです。
4.レポートで、テーブル等に表示すれば、このように全角→半角変換されたデータが表示されます。

最後に
この記事では、Power BIで取得した全角文字データを、半角文字のデータに変換する方法を紹介しました。
Excelでは「ASC関数」を使うと簡単に全角→半角変換できますが、Power Queryでは直接的に全角→半角変換する関数はありません。
今回は、Power Queryでカスタム列を使い、Unicodeのコードポイントで、全角文字を「-65313」をすることで、全角→半角に変換する方法を解説しました。
とはいえ、Excelだけで使うなら、Excelの「ASC関数」を使うのが楽ですな。
さらに言えば、データ入力時点で、全角/半角が混在しないように制御できた方がよいですね!