※注意)弊社代表の独断と偏見です。
Tableau(タブロー)の、少し戸惑ってしまう関数を整理してみた
今回のテーマ
今回は、Tableau(タブロー)の関数についてです。Tableauにも便利な関数が用意されております。ただ、ときどき、何のために使うんだ?や、どの範囲を計測しているだ?で、使用することをためらうかもしくは、敬遠したくなるシーンがあります。今回は、そのあたりを解明しながらこれらの利用シーンを考えてみたいと思います。これを機に、しっかりと関数を使いこなしていけるようにしましょう!
* 念のためですが、ベストプラクティスは計算フィールドで関数を使うことを考えるよりも前に、デフォルトで、Tableau(タブロー)機能が既に用意されているかどうかを調べることが大事です。何でもかんでも計算フィールドを自作することは良いことではありません。
目次)今回取り上げるTableau(タブロー)関数はこちら
- ATTR
- IFNULL
- STDEV / STDEVP
- VAR / VARP
- ISFULLNAME / ISUSERNAME / ISMEMBEROF
- TOTAL
- LOOKUP
- PREVIOUS_VALUE
1)ATTR
オンラインヘルプ
ATTR(expression)
すべての行に単一の値がある場合に式の値を返します。それ以外の場合はアスタリスクを返します。NULL 値は無視されます。
解説ブログ
http://tableaujpn.blogspot.jp/2015/11/understand-attribute-function.html
ひとことで言うと、あるディメンション(例えば市区町村)の値がたった一つしかなければその値を返し、複数あれば*が返ってきます。なお、NULLがある場合は評価しない、という解釈ですね。ひとまず、試してみましょう。
現在の設定)
香川県には高松市のみがデータ定義されております。また、佐賀県では、春日、唐津の2つがデータ定義されております。ATTR関数定義からすれば、市区町村ディメンションをATTRにかけた場合、香川県の市区町村ディメンションでは、「高松」という値がそのまま返され、佐賀県では、*(アスタリスク)が返されるはずです。
ATTR([市区町村])という計算フィールドを作成しましょう
元々の市区町村ディメンションと入れ替えました。
結果は予想通りでしたね。
さて、ATTR関数の挙動は確かに把握できました。しかし、この関数は一体どこでどんなシーンで使えるのでしょうか?未だに謎ですね。
素直に考えるならば、NULLは置いといて、ディメンションに格納されたデータが1個かそれ以外かを調べるために使えそうです。例えば、重複を許さない「ID」に関する調査ですね。
こちらに関しては、この記事が参考になります。
http://www.senturus.com/blog/powerful-misunderstood-tableaus-attr-function/
あとは、下記の機能を利用した場合、次のような利用法も紹介されておりますので試してみたいと思います。
◆次元を集約してメジャーにする機能 がある
基準月の前後判定を”色”で識別できるようにしたいです。
上記のようなブーリアン値を返す判定式を作成します。
先ほどの計算式を、”色”へ配置してみました。
すると、不連続ディメンション活用により、断線してしまいます。
そこで、ATTR関数をかませてメジャーにしてみます。
すると、先ほどの断線が連続線に変わりました。
同じことが、MAXでもMINでも可能です。
どちらかというと、後段の使い方が掴みやすいかもしれませんね。
2)IFNULL
オンラインヘルプ
IFNULL(expression1, expression2)
IFNULL 関数は、結果が NULL でない場合は最初の式を返し、NULL の場合は 2 番目の式を返します。
例
IFNULL([Profit], 0) = [Profit]
では試してみましょう。
こんなような集計表を用意しました。
取り込んだ結果です。NULL月が出てきました。
月データに欠損値が出た場合は、ひとまず、1900/1/1に変換してみましょう。
行のディメンションを先の計算フィールドへ入れ替えました。ご覧の通り、1900年1月に置き換えできました。
似たような関数にISNULLがあります。こちらは、NULLが入っていなければいればtrueといったブーリアン値を返します。IF文と組み合わせると同じようなことが実現できそうですね。
* ISNULL(式)の解説が変ですね。NULLが含まれていない場合はFALSEのはずです。
利用シーンとしては、欠損値をひとまず、特定の値で埋めておきたいなどが考えられますね。
例えば、顧客名の欠損があった場合は、取り急ぎ、IDを文字列変換して埋めておくとあとで作業が便利です。
3)STDEV / STDEVP
オンラインヘルプ
STDEV(expression)
サンプル母集団に基づいて、指定された式のすべての値の統計的標準偏差を返します。
STDEVP(expression)
バイアス母集団に基づいて、指定された式のすべての値の統計的標準偏差を返します。
そもそも標準偏差とは何か?
データの散らばりの度合いを示す値です
サンプル母集団:調査対象が標本の場合
バイアス母集団:調査対象が全数の場合
では試してみましょう。
ひとまず、このようなデータを用意しております。
平均はいずれも、おおよそ、120グラムです。
ここから、ばらつき具合をみてみましょう。
まずは、2つの計算式を用意します。
* 機能としてすでに用意されているため、本来、計算式の用意は不要です。
サンプル標準偏差 :61.48 / 8.01
母集団標準偏差 :58.32 / 7.60
グラムをサイズで配置した時のイメージです。
ポンカンの方が大きさのばらつきが大きいですね。
利用シーンはいうまでもなく、ばらつき具合をみたい場合に利用できます。
4)VAR / VARP
オンラインヘルプ
VAR(expression)
サンプル母集団に基づいて、指定された式のすべての値の統計的変異を返します。
VARP(expression)
母集団全体について、指定された式のすべての値の統計的変異を返します。
統計的変異とは何か?
これは分散ですね。
分散とは数値データのばらつき具合を表すための値です。
標準偏差は、分散を平方根にとることによって計算される値であり、ここが標準偏差と違う点です。
それでは、先ほどのデータを使って試してみましょう。
まずは、2つの計算式を用意しましょう。
上記で求められた値の平方根(√)をとると標準偏差となります。
利用シーンとしては、標準偏差が使われることがほとんどと思います。
正直、あまり思いつきません。
この辺りが参考になるかもしれません。
5)ISFULLNAME / ISUSERNAME / ISMEMBEROF
オンラインヘルプ
ISFULLNAME(string)
現在のユーザーのフル ネームが指定されたフル ネームに一致する場合に true を返し、一致しない場合は false を返します。この関数は、ユーザーがサインインしている場合は Tableau Server または Online のフル ネーム、それ以外の場合は Tableau Desktop ユーザーのローカルまたはネットワーク フル ネームを使用します。
例
ISFULLNAME(“Dave Hallsten”)
この例では、Dave Hallsten が現在のユーザーである場合は True、それ以外の場合は False を返します。
ISUSERNAME(string)
現在のユーザーのユーザー名が指定されたユーザー名に一致する場合に true を返し、一致しない場合は false を返します。この関数は、ユーザーがサインインしている場合は Tableau Server または Online のユーザー名、それ以外の場合は Tableau Desktop ユーザーのローカルまたはネットワーク ユーザー名を使用します。
例
ISUSERNAME(“dhallsten”)
この例では、dhallsten が現在のユーザーである場合は True、それ以外の場合は False を返します。
ISMEMBEROF(string)
現在 Tableau を使用しているユーザーが、特定の文字列と一致しているグループのメンバーである場合は、True を返します。現在 Tableau を使用しているユーザーがサインインしている場合、グループのメンバーシップは Tableau Server または Tableau Online 上のグループによって決定されます。ユーザーがサインインしていない場合、この関数は False を返します。
例
IF ISMEMBEROF(“Sales”) THEN “Sales” ELSE “Other” END
上記のような関数をユーザー関数と呼ぶようです。
オンラインヘルプのユーザー関数の定義を確認しますと…
ユーザー関数
ユーザー関数を使用すると、データ ソースのユーザー リストに基づいたユーザー フィルターを作成できます。たとえば、各社員の販売成績を示したビューがあるとします。このビューをパブリッシュしたときに、各社員が自分の販売データしか表示できないようにする必要があります。この場合は、CURRENTUSER という関数を使用することで、サーバーにサインインしているユーザーの名前がこのビューの従業員名と一致している場合に True を返すフィールドを作成できます。このようにすることで、この計算フィールドを使用してビューをフィルター処理すると、現在サインインしているユーザーのデータだけが表示されるようになります。
利用シーンは、ほぼ、オンプレミスでのサーバー構築でシステム制御で使う関数のようですね。
一応、Tableau Desktopで試してみましょう。
FULLNAME()の計算式を作成します。
上記のような結果となりました。
サーバー構築はまだ必要ないのと、概ね、利用シーンはイメージできました。
こちらはここで検証終了とします。
6)TOTAL
オンラインヘルプ
TOTAL(expression)
表計算パーティションで指定された式の合計を返します。
いまいち、SUM( )やRUNNING_SUM( )との違いがわかりづらいですよね。
ここは一緒に確認してみます。
それでは試してみましょう。
SUM()の場合は、行単位での合計値です。
RUNNING_SUM()は、表計算方向(ここでは表全体)に従って、累計額を出しております。
TOTAL(SUM( ))では、表計算方向(ここでは表全体)に従って、全体合計が出ております。
7)LOOKUP
オンラインヘルプ
LOOKUP(expression, [offset])
現在の行からの相対オフセットとして指定されたターゲット行にある式の値を返します。パーティション内の最初/最後の行に相対的なターゲットには、オフセット定義の一部として FIRST() + n と LAST() – n を使用してください。
offset
を省略した場合は、比較対象行をフィールド メニューで設定できます。この関数は、ターゲット行を特定できない場合は、NULL を返します。例
LOOKUP(SUM([Profit]), FIRST()+2)
はパーティション内の 3 番目の行の SUM(Profit) を計算します。
オフセットで指定した値に従うようです。
それでは、試してみましょう。
LOOKUP(sum([売上]),3)という計算式を用意します。
その計算式を上記にように配置します。
すると、1+3で4行目の値を取得します。
こちらの利用シーンとしては、下記のページが参考になりそうです。
http://breaking-bi.blogspot.jp/2013/04/using-lookup-function-in-tableau.html
日付のプロパティで会計年度を整えることができないほど、
会計カレンダーが混乱している場合などでしょうか。
追記)※ LOOKUP関数については下記の記事も参照ください。
●Tableau(タブロー)のWINDOW_SUMとLOOKUPの使い方を理解しながらZチャートを作成してみた
●Tableau(タブロー)再現シリーズ(応用編)_19/20選(Zチャートの作成)
●tableau(タブロー)で日付ベースで値を比較する方法をまとめてみた
また、会計年度やそのときの閏年の対策についてはこちらをご参照ください。
8)PREVIOUS_VALUE
オンラインヘルプ
PREVIOUS_VALUE(expression)
前の行のこの計算の値を返します。現在の行がパーティション内の最初の行の場合は、指定された式を返します。
例
SUM([Profit]) + PREVIOUS_VALUE(0)
は SUM(Profit) の累計を計算します。
上記のように、計算式を用意します。
sum([売上]) + PREVIOUS_VALUE(0)
同じように、こちらの計算式も2つ用意します。
PREVIOUS_VALUE(0)
PREVIOUS_VALUE(1)
上記のような結果になりました。
sum([売上]) + PREVIOUS_VALUE(0)は、累計となりますが、
累計機能をあえて使わず、正直、この計算式を使う意味はよくわかりません。
累積であれば、簡易表計算にもないため、それなりに利用シーンはありそうです。
SUM([Profit]) * PREVIOUS_VALUE(1)
ちなみに、PREVIOUS_VALUE(0)やPREVIOUS_VALUE(1)は、単独での使用に意味はないようです。
9)ZN
オンラインヘルプ
式が NULL でない場合は式を返し、それ以外は 0 を返します。NULL 値の代わりにゼロ値を使用するには、この関数を使用してください。
例:ZN([Profit]) = [Profit]
使い方としては、NULLを許可しているデータカラムが存在する場合、NULLの場合は0に置き換える処理を加えます。
例)9/8の収益をNULLに設定した場合
“date”,”revenue”
“2018/09/05”,1000000
“2018/09/06”,2000000
“2018/09/07”,3000000
“2018/09/08”,
ここで、ZN([revenue]) を設定する
下記の通り、0に置換されていることを確認。
まとめ)
今回は、Tableau(タブロー)関数のうち、ちょっとためらいがちな関数を整理してみました。
- ATTR
- IFNULL
- STDEV / STDEVP
- VAR / VARP
- ISFULLNAME / ISUSERNAME / ISMEMBEROF
- TOTAL
- LOOKUP
- PREVIOUS_VALUE
- ZN
使い方を覚えると、ATTR、TOTAL、STDEVP、LOOKUP、PREVIOUS_VALUE、ZNなどはそれなりに威力を発揮しそうな関数です。
これを機に、ぜひ、検証してみてください!