Tableauの関数を全て試してみる〜論理関数編その1〜 #tableau

2017.12.14

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

はじめに

こんにちは。DI部のtamaです。

当エントリはTableau Functions Advent Calendar 2017の14日目のエントリです。 昨日のエントリはTableauの関数を全て試してみる〜型変換関数編その2〜でした。

今回は論理式の関数について見てきます。 その関数単独で何かを行うというよりは、他の関数と組み合わせて使用する関数ですね。(人によっては、関数という言い方がしっくりこないかもしれません。)

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

目次

検証環境

作業環境

  • MacOS High Sierra 10.13.1
  • Tableau 10.4.1

使用データ

  • (原則)Tableau付属のサンプルスーパーストア
  • (場合によって)関数グラフ描画用データ
  • -1〜1の範囲で、0.01毎に値が並んでいるデータ
  • 上記の値をディメンション「X軸」とし、その上に色々な関数をプロットする。
  • 参考:Tableau 関数グラフの描画 | Developers.IO

CASE

構文

CASE expression WHEN value1 THEN return1 WHEN value2 THEN return2...ELSE default return END

概要

論理テストを実行して適切な値を返すためには、CASE 関数を使用します。通常、CASE は IIF または IF THEN ELSE より簡単に使用できます。CASE 関数は expressionを評価し、value1、value2 などの連続した値と比較して、その結果を返します。expressionと一致する値が見つかった場合、CASE は対応する戻り値を返します。一致が見つからない場合は、既定の return 式が使用されます。既定の return がなく、一致した値がない場合は、Null が返されます。 一般的に、IF関数は連続した任意のテストを実行するために使用し、CASE 関数は式に対する一致を検索するために使用します。しかし、CASE 関数は常に IF 関数として再記述できますが、一般的に CASE 関数の方が簡潔です。 通常は、グループを使用して、複雑な CASE 関数と同じ結果を得ることができます。

  • 「Aという項目が、Bだったら○、Cだったら☓…」と、その項目によって、次の処理を条件分岐させるための関数です。
  • プログラムやSQLの経験がある方にとっては、説明不要だと思います。

使ってみた

まずシンプルな使い方をしてみましょう。 顧客区分を、値によって「個人」か「会社」に振り分けています。

CASE [顧客区分] WHEN '消費者' THEN '個人'
WHEN '小規模事業所' THEN '会社'
WHEN '大企業' THEN '会社'
END

別の式を試してみましょう。 公式リファレンスに載っているもので恐縮ですが、オーダー日から曜日を判断してみます。

CASE LEFT(DATENAME('weekday',[オーダー日]),2)
WHEN 'Su' THEN '日曜日'
WHEN 'Mo' THEN '月曜日'
WHEN 'Tu' THEN '火曜日'
WHEN 'We' THEN '水曜日'
WHEN 'Th' THEN '木曜日'
WHEN 'Fr' THEN '金曜日'
WHEN 'Sa' THEN '土曜日'
END

この計算フィールドが何をしているのかというと… 、以下の通りとなります。

  1. DATENAME関数でオーダー日から曜日の値を算出する ※DATENAME関数は「日付関数編その1」で紹介しています。
  2. LEFT関数で、DATENAME関数から出した曜日の値のうち、左から2文字だけ取得する ※LEFT関数は「文字列関数編その1」で紹介しています。
  3. LEFT関数から取得した2文字によって、何曜日か振り分ける

どういう時に使う?

  • 論理式なので、活躍の場はたくさんあると思いますが、項目をいくつかにグループ分けするときに使用するのがポピュラーでしょうか。

参考文献

IIF

構文

IIF(test, then, else, [unknown])

概要

論理テストを実行して適切な値を返すためには、IIF 関数を使用します。最初の引数であるtestはブール値である必要があります。ブール値には、データ ソースのブール値フィールドか、演算子を使った論理式 (または AND、OR、NOT の論理比較) の結果を指定できます。If testが TRUE として評価された場合、IIF はthen 値を返します。testが FALSE として評価された場合、IIF は else 値を返します。 ブール値比較は、通常、テストに Null 値が含まれていることが原因で、値 UNKNOWN(TRUE と FALSE のいずれでもない) を生成することもあります。IIF の最後の引数は、比較の結果が UNKNOWN である場合に返されます。この引数を省略した場合は、Null が返されます。

  • 引数に指定した式の結果が真だったらAの処理、偽だったらBの処理…ということを行う論理式です。

使ってみた

その購買が、高額を買ったかどうかのフラグを付与してみましょう。

IIF([売上]>10000, '高額商品購買','通常購買' )

ただし、こういった計算の場合、集計している単位に注意してください。 上記の状態から、「製品名」を除くと以下のようになります。

こうなると、「売上」はオーダーID毎に集計されている状態となります。先程作成した「IIF」もオーダーIDも集計されてしまっています。 どういう意味かというと、例えば上記の画像の赤枠を見ると、10000円を超えているのに「通常購買」となっていておかしいと思いがちですが、この売上はオーダーID単位で集計されて10000円を超えているに過ぎません。 中のデータを覗いてみると…

製品単位では10000円を超えていません。IIFの式はこのレコード単位に適用されるため、全て「通常購買」となります。

どういう時に使う?

  • 論理式の中では、簡潔に記述できるので、ちょっとした2択判定を行いたい時に使えると思います。

参考文献

おわりに

論理関数について見てきました。 関数というより論理「式」という感じですが、ExcelやSQLにあるような一般的なものについては、Tableauにも備わっていることがわかったかと思います。

次回はtamaによるTableauの関数を全て試してみる〜論理関数編その2です。お楽しみに。