Tableau Prepの作業を変えるTips集11 ー数値の丸め方、ランク付けー
Tableau Prepユーザー会のNakajima2です。
Japan Preppin Data FamメンバーのPrep Tips集をご紹介します。
今回から2回に渡り、メンバー勉強会でもたびたび話題になる数値や日付の処理についてのTipsです。
いろいろな関数があるけど、ちょっと使い方 似ていて分からない という場合の参考になれば!
第11回目は、数値の丸め方 と ランク付け に関する2つのTipsです。
Prep Tips (21) : 少数点以下の数値 丸め方(Round、Floor、Intなど)
小数点以下の数値丸めなど、数値処理の関数は似たような内容で、処理される結果が微妙に違っているものがあります。ちょっと覚えきれない、、
これらの関数を整理してみます。
CEILING
構文 : CEILING(number)
出力 : 整数
定義 : <number> を等しいかより大きな最も近い整数に切り上げます。
例 : CEILING(2.1) = 3
FLOOR
構文 : FLOOR(number)
出力 : 整数
定義 : <number> を等しいかより小さな最も近い整数に切り下げます。
例 : FLOOR(7.9) = 7
ROUND
構文 : ROUND(number, [decimals])
出力 : 数値
定義 : 指定された桁数に <number> を丸めます。
例 : ROUND(1/3, 2) = 0.33
オプションの decimals 引数は、最終結果に含める小数点以下の桁数 (精度) を指定します。decimals を省略した場合、数値は最も近い整数に丸められます。
INT
構文 : INT(expression)
出力 : 数値
定義 : 出力整数定義引数を整数としてキャストします。引数が式の場合、この関数は結果をゼロに最も近い整数に丸めます。
例 : INT(8/3) = 2
INT(-9.7) = -9
FLOAT
構文 : FLOAT(number)
出力 : 数値
定義 : FLOAT(expression)出力浮動小数点数 (10進数)定義引数を浮動小数点数としてキャストします。
例 : FLOAT(3) = 3.000
各関数の表示結果を比較
以上の関数を、簡単な数値を用いて一覧にしてみました。
数値の丸められ方を比較してみてください
正、負の数値で丸められ方が違っています。感覚的なものとずれがあるかもしれません。よく確認してみてください。
(おまけ)
数値の丸めに関連し、切り捨て、切り上げ が出来ればとの議論がありました。
またPreppin Dataで数値の正負記号の確認、絶対値を求めるケースもありました。
両者についても、まとめてみます。
切り捨て、切り上げ については、Mr.もりた からのTipsです。
切り捨て
0に近い数値に寄せる(位を下げる)
FLOOR (ABS ( [値] ) ) * SIGN( [値] )
切り上げ
0から遠い数値に寄せる(位を上げる)
CEILING (ABS ( [値] ) ) * SIGN( [値] )
SIGN
構文 : SIGN(number)
出力 : -1、0、または 1
定義 : <number> の符号を返します。数値が負の場合は -1、数値がゼロの場合は 0、数値が正の場合は 1 を返します。
例 : SIGN(AVG(Profit)) = -1
ABS
構文 : ABS(number)
出力 : 数値 (正)
定義 : 指定された <number> の絶対値を返します。
例 : ABS(-7) = 7
ABS([Budget Variance])
2 番目の例では、Budget Variance フィールドに含まれているすべての数値の絶対値を返します。
以上の関数を比較してみました
実務でも良く使う関数だと思います。
一度整理して覚えておくと、便利ですね。
Prep Tips (22) : Rank関数
データ加工(前処理)で比較的よく利用するRank関数ですが、いろいろと種類がありランク付けされる数値が関数種により違っています。
実務では、使い分けが必要なケースもあり、覚えておくと使いでのある関数です。
なお、Rank関数は並び替え(順位付け)の表計算関数として利用されます。Prepでは、PARTITION や ORDERBY と組み合わせて利用します。
RANK()
パーティション内の現在の行に対して標準の競争ランクを返します。
同一の値には同一のランクが割り当てられます。昇順または降順を指定するには、オプションの 'asc' | 'desc' 因数を使用してください。既定では降順です。
Null はランキング関数では無視されます。これらには番号が付けられておらず、百分位値のランク計算のレコード総数に含まれません。
RANK_DENSE()
パーティション内の現在の行に対して密度ランクを返します。
同一の値には同一のランクが指定されますが、数列にギャップは挿入されません。昇順または降順を指定するには、オプションの 'asc' | 'desc' 因数を使用してください。既定では降順です。
Null はランキング関数では無視されます。これらには番号が付けられておらず、百分位値のランク計算のレコード総数に含まれません。
RANK_MODIFIED()
パーティション内の現在の行に対して変更された競争ランクを返します。
同一の値には同一のランクが割り当てられます。昇順または降順を指定するには、オプションの 'asc' | 'desc' 因数を使用してください。既定では降順です。Null はランキング関数では無視されます。これらには番号が付けられておらず、百分位値のランク計算のレコード総数に含まれません。
RANK_PERCENTILE()
パーティション内の現在の行に対して百分位値のランクを返します。
昇順または降順を指定するには、オプションの 'asc' | 'desc' 因数を使用してください。既定では昇順です。
Null はランキング関数では無視されます。これらには番号が付けられておらず、百分位値のランク計算のレコード総数に含まれません。
ROW_NUMBER()
パーティション内の現在の行に番号を付けて返します。
Tableau Deskopで利用出来る RANK_UNIQUEでの同一の値に異なるランクが指定されることと同じ結果が得られます。INDEX関数とも同じ結果になります。
昇順または降順を指定するには、オプションの 'asc' | 'desc' 因数を使用してください。既定では降順です。
各関数の表示結果を比較
10個の数値データでそれぞれのRank関数を利用した結果になります。
順位の表示され方が異なっている点を見てください。
関数は、全て昇順(ASC)で設定しています。関数の記述は下記の通りです。
*RANK() のところに、各種関数を入れています。
順序をつけたいフィールドをORDERBYで記載し、フィールドの後ろに
任意の順序(ASC、DESC)を指定します。順序はデフォルトでDESCです。
式 : {ORDERBY [元の値] ASC : RANK() }
利用する目的に応じて、ランク付けの方法が変わってくると思います。適正な関数を利用してフローを作成しましょう。
PrepのUIでRank関数を作成
Prepでは、標準機能としてのUIを使ってRank関数を作成出来るようになっています。上記の全関数が選べないのですが、実際の作業では簡単に作成が出来ます。
したの説明は、[元の値]のフィールドで、ランク関数を作成する事例です。
Rank関数の種類と昇降順を決めることで、画面下に作業時にその場で関数の利用結果が表示されています(下図では、青線で囲まれたフィールドが該当)
とても分かりやすいです。
UI画面を見てお気付きの方も多いと思いますが、設定する各項は次の関数指定に相当しています
グループ化 : PARTITION
並び替え : ORDERBY
ランク : 利用したいRank関数
元の値 : 並び替え(順序付け)をしたいフィールドの指定
AZの上下矢印 : 昇順か降順を決定
上のUI操作説明では、次の関数が自動的に記載されます。今回の例では、PARTITIONは利用しない形になっています。
{ORDERBY [元の値] ASC : RANK() }
Rank関数も、実務での利用機会が多い関数だと思います。
Tableau Desktopとの差異も理解しながら、有益に利用しましょう。