Tableauでは、フィールドのメニューなどでデータ型を簡単に変更することができます。
しかし、一部のデータ型変更が原因で表示内容がおかしくなることがあり注意が必要なケースがあります。
Tableau Desktop, Tableau Prepそれぞれの事例をご紹介します。
<事例>
① Tableau Desktopで小数点の値を文字として扱う際、桁があふれることがある。
② Tableau Prepで小数点の値を文字として扱う際、桁があふれることがある。
① Tableau Desktopで小数点の値を文字として扱う際、桁があふれることがある。
よくあるスーパーストアのサンプルデータを基に紹介します。
こちらの割引率ですが、数値ではなく文字で扱う必要がでてきたとします。(例えば、販売価格に【】書きで割引率を表示させる等)計算フィールドで、売上を合計にして文字に、割引率を属性にして文字に、割引率の前後に”【”と”】”を入れて、1つのフィールドを作ってみました。
これを表に入れてみたところ、以下のように桁数があふれて異常な表示になってしまいました。
2個左にある「売上」の合計は桁の処理がされて見やすい値となっていますが、数値を文字にするとそのまま元の値が表示されるようです。
このような場合は、以下のようにRound関数などで桁の処理を組み入れる必要があります。
上記の計算式とすることで、以下のように表示させたい形に近づいたかと思います。
もう少し見栄えをよくするべく、売上合計をカンマ区切りで表示したいと思います。
しかし、数値では以下のように書式設定から数値の設定欄で「千の桁区切りを含める」という機能が使えるのですが、文字ではこれが利用できません。
このような場合は、計算フィールドで文字列から桁数を判断しカンマを間に入れるよう処理が必要です。
123456789 という9ケタを想定した場合、左から3文字目まで、4~6文字目まで、7~9文字目まで、と文字列を分割し、間にカンマを入れていきます。
これを8桁~4桁まで区切り位置を意識して処理していくと以下のようになります。(最後の3桁はそのまま利用)
処理結果は以下のようになります。実際は値が取り得る範囲を想定し上記の式を作成する必要があります。
少しややこしい感じはありますが、数値を文字として扱う際はご注意ください。
② Tableau Prepで小数点の値を文字として扱う際、桁があふれることがある。
続いて、Tableau Prepで同様の処理を見てみたいと思います。
以下のようなフィールドで、売上の合計と割引率を先ほどと同様に1つのカラムとして作成します。
以下のようにそのまま文字に変換して組み合わせると、先ほどと同様に元データがそのまま反映されて桁数が多く見づらいです。
ここで、先ほどと同じようにRound関数で処理してみたいと思います。
以下のような式を反映させると、売上のほうは桁の処理がされていますが割引率のほうが変わっていません。
(Roundで小数点以下を無しにすれば大丈夫ですが、小数点以下でキリの悪い値の場合桁があふれたままとなります)
Tableau DesktopではできていたことがTableau Prepではうまく処理されないようです。
一旦、売上のほうの桁の処理をします(「千の桁区切りを含める」)。以下のように処理できました。
次に、割引率の桁の処理を行います。
割引率が1桁(小数点無し)のときは、後ろに「.00」をつけて、0.00 として表示し、それ以外は左から4文字を取るようにして、0.40 などを表現しました。
左から4文字 という処理にすると「10.41」などが出てきた際、小数点第1位までで切れてしまうので、小数点の位置によって区切る位置を変えることが必要になります。
ここで、小数点の位置が3文字目のとき(例:10.41)左から5文字としてみたところ、以下のように桁の処理ができました。
ところが、値が10.40などキリが良い場合、左から5文字としてみても結果は下図のように10.4となってしまいました。
(文字として扱うのは色々と制限がありそうですね)
ここで、Tableauのヘルプ内にある記事 の計算方法を参考にもう少し計算式を改良してみます。
割引率に100をかけて一旦小数点を処理し、INT関数で整数にした後に100で割る形を取ります。
また、この計算結果を対象とし、計算結果の中からFind関数で小数点(.)を探し、その文字数+2文字目までをleft関数で処理します。
このようにすると以下のように小数点第2位まで正しく表現することができました。
(注:Tableauのヘルプ記事のとおりに処理すると0など小数点がないものは0として表示され、表示桁数が揃わないので注意しましょう)
今回の検証はここまでとしますが、取り得る値を事前に想定していろいろと文字の処理を施す必要がありそうです。
ちなみに、途中紹介しましたTableauのヘルプ記事に記載のとおり、Tableauとしてのバグなどではなくコンピュータ上で小数点を扱う際に起こる一般的な問題のようです。
このほかにも、以前のTableau Serverのバージョンで遭遇したことがある例としては、Rank関数で複数のディメンションを用いてランキング処理したものを数値から文字に変換して利用したところ、Microsoft Edgeのブラウザで表示するとランキングの順番がおかしくなる不具合がありました。これの奇妙な点としてはGoogle Chromeで表示すると正しいランキングになるという事象でした。これに直面した当時は、相談をしてきたユーザの方に数値で扱うようにアドバイスをして問題を回避することができました。
何かの機会に数値を文字で扱うようなことがある場合は思いもよらない不具合が発生する可能性も考えられるため、十分注意するようにしましょう。
※Tableau 2023.1時点の情報となります。