Tableauの関数を全て試してみる〜表計算関数編その1〜 #tableau

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。DI部のtama@奈良県です。

当エントリはTableau Functions Advent Calendar 2017の22日目のエントリです。
昨日のエントリはTableauの関数を全て試してみる〜ユーザー関数編〜でした。

当アドベントカレンダーも、ついに最終セクションを迎えました。最後は表計算関数について見ていきたいと思います。

  • 使用するTableauのバージョンは一貫して10.4.1です。
  • 各関数の説明で引用しているのは、Tableauの公式リファレンスからの引用です。

 

検証環境

作業環境

  • MacOS High Sierra 10.13.1
  • Tableau 10.4.1

使用データ

  • (原則)Tableau付属のサンプルスーパーストア
  • (場合によって)関数グラフ描画用データ

 

表計算関数とは

表計算関数は、表計算をカスタマイズするために使用します。表計算とは、表全体の値に適用される計算であり、表構造そのものに依存していることが多々あります。表計算の作成とカスタマイズの詳細については、「表計算のカスタマイズ」を参照してください。

帳票のようなクロス集計表を作成した際、部分的に計算を行う時などで使用できる関数です。

 

FIRST( )

概要

現在の行からパーティション内の最初の行までの行数を返します。たとえば、次のビューには四半期ごとの売上高が示されています。FIRST() が日付パーティション内で計算される場合、2 番目の行からの最初の行のオフセットは -1 です。

  • 最初の行→現在の行まで何行離れているかを返す関数です。
  • その離れている行数のことをオフセットと呼称します。

使ってみた

「表の横」に沿って、行数がカウントされています。

FIRST関数に限った話ではありませんが、表計算関数は「計算の方向」を指定できます。
計算フィールドの右クリックメニューで選択することができます。

「表(下)」を選択すると、カウントが下に向かって計算されるように変わりました。

どういう時に使う?

  • この関数で行番号を振っておくことによって、他の表計算を行う際に、これらの行番号をフィルタ等に使用して、柔軟な計算ができるようになります。

参考文献

 

INDEX( )

概要

値に関しては並べ替えをせずに、パーティション内の現在の行のインデックスを返します。最初の行のインデックスは 1 から始まります。たとえば、下の表は四半期ごとの売上高を示しています。INDEX() が日付パーティション内で計算される場合、各行のインデックスは 1、2、3、4 のようになります。

  • FIRST関数同様、行番号を振る関数です。
  • INDEX関数は1からカウントが始まります。

使ってみた

どういう時に使う?

  • この関数で行番号を振っておくことによって、他の表計算を行う際に、これらの行番号をフィルタ等に使用して、柔軟な計算ができるようになります。

参考文献

 

LAST( )

概要

現在の行からパーティション内の最後の行までの行数を返します。たとえば、次の表には四半期ごとの売上高が示されています。LAST() が日付パーティション内で計算される場合、2 番目の行からの最後の行のオフセットは 5 です。

  • FIRST関数と逆で、最後の行から最初の行に向かってカウントします。

使ってみた

どういう時に使う?

  • この関数で行番号を振っておくことによって、他の表計算を行う際に、これらの行番号をフィルタ等に使用して、柔軟な計算ができるようになります。

参考文献

 

LOOKUP(expression, [offset])

概要

現在の行からの相対オフセットとして指定されたターゲット行にある式の値を返します。パーティション内の最初/最後の行に相対的なターゲットには、オフセット定義の一部として FIRST() + n と LAST() - n を使用してください。offsetを省略した場合は、比較対象行をフィールド メニューで設定できます。この関数は、ターゲット行を特定できない場合は、NULL を返します。

  • クロス集計表の指定した部分の値を取得する関数です。
  • FIRST関数やLAST関数を使用することで、位置を相対的に指定することも可能です。

使ってみた

このような式だと、どうなるでしょうか?

LOOKUP(SUM([売上]),1)

「表(横)」に沿った1つ先の値をとってくる計算式を入れています。
この表ではオーダー日が年単位で設定されているので、このLOOKUP関数は、「1年先の売上」を表示することになります。(下記画像参照)

どういう時に使う?

  • 上記の計算式を応用すれば、「1年後の売上との差」といった値を、その表の中に表すことができます。
    • Excelのような計算が、Tabelauでも可能ということです。

参考文献

 

PREVIOUS_VALUE(expression)

概要

前の行のこの計算の値を返します。現在の行がパーティション内の最初の行の場合は、指定された式を返します。

  • Tabelauでは珍しい再帰関数となっています。
  • この関数を単独で使用してもあまり意味はありません。
    • 「現在の行がパーティション内の最初の行の場合は、指定された式を返します。」とありますが、PREVIOUS_VALUE関数は再帰関数なので、単独で使用した場合、最終的に最初の行を参照することになるため、どの行でも、「指定された式」の値が返ることになるためです。

使ってみた

上記の注意点を考慮し、以下のような式にします。

PREVIOUS_VALUE(0) + SUM([売上])

右に向かって売上が足し上げられていってることがわかります。
「前の行の値+その行の売上」を算出しているためです。

どういう時に使う?

  • 上記の例だと、Tableau標準機能の「累計」等で代用できてしまいます。
  • 下記参考文献に挙がっているような、もう少し複雑な表計算の時に真価を発揮する関数だと思われます。

参考文献

おわりに

表計算関数を見てきました。あくまでデータビジュアライゼーションがメインであるTableauではありますが、表計算の機能もなかなか揃っているので、Excelとは勝手が違いますが、それなりの帳票も再現できそうですね。

次回はtamaによる「Tableauの関数を全て試してみる〜表計算関数編その2」です。お楽しみに。