2023/05/09

アドバンスド

実務において役立つ関数①

Spotfireで前処理・可視化を行う際に、「計算カラムの追加」や「ローのフィルター」、「カスタム演算式」を利用する場面は多く登場すると思います。それらを実行する際に必ず必要になるのが関数です。
本コンテンツでは、使用頻度の高いおすすめ関数についてご紹介していきます。
なお、本コンテンツで利用したバージョンはSpotfire11.4/12.0となります。ご利用環境によって、一部画面構成が異なる可能性があります。ご了承ください。

探索的分析/原因分析の領域で
高い評価と実績
TIBCO Spotfire

TIBCO Spotfire®は分析に必要な機能を単一製品でカバーするビジュアルアナリティクスツールです。

はじめに

本コンテンツでは、データの前処理・可視化において頻出の「関数」を使用例を交えてご紹介いたします。

本コンテンツで紹介する関数一覧は下記の通りです。

  • 日付および時刻関数
    ・DateDiff
    ・Today
  • 論理関数
    ・Case
    ・If
  • ランク関数
    ・Rank / DenseRank

関数とは

関数とは、計算カラムやカスタム演算式の式の中で用いる「+」や「IF」などの機能を指します。
関数を適切に活用することで、前処理・可視化を大幅に効率化できます。
Spotfireで使用可能な関数は、「IF」のような汎用的な関数もあれば、「OVER」のようなSpotfire特有の関数もあります。※OVER関数についてはこちらをご参照ください。

各関数の利用方法

本コンテンツでは、各関数の利用方法を例を交えてご紹介します。
引数を示す際には、式の左から順に「Arg1」、「Arg2」のように表記します。
例:Sum([Arg1], [Arg2])

サンプルデータの読み込み

本コンテンツで使用するサンプルデータはこちらです。飲食店の売上に関するデータです。
飲食店データ.xlsxを読み込みます。「ビジュアライゼーションタイプ」>「テーブル」を選択します。

※上画像と読み込んでいただいたデータテーブルは多少異なる可能性がありますが問題ありません。

DateDiff

DateDiff関数を利用することで、2つの日付カラム、時刻カラム、または日付時刻カラムの間の差異を計算し出力できます。
例えば、下図のように開始時間と終了時間の両方がカラムとして存在している場合に、開始から終了までどのくらい継続していたのかという期間を算出できます。

使用方法

下記のような2通りの使用方法があります。

  • DateDiff([Arg1], [Arg2])
  • DateDiff('Arg1', [Arg2], [Arg3])
「DateDiff([Arg1], [Arg2])」を使用する場合

結果は期間として出力され、全ての単位の差異が出力されます

  • Arg1:終了時間カラム
  • Arg2:開始時間カラム
「DateDiff('Arg1', [Arg2], [Arg3])」を使用する場合

結果は比較対象の単位に基づき、実数値で出力されます。

  • Arg1:比較対象部分
  • Arg2:開始時刻カラム
  • Arg3:終了時刻カラム

Arg1 の比較対象部分において有効な引数は以下です。
年:'year' または 'yy'
四半期:'quarter' または 'qq'
月:'month' または 'mm'
日:'day' または 'dd'
週:'week' または 'wk'
時:'hour' または 'hh'
分:'minute' または 'mi'
秒:'second' または 'ss'
ミリ秒:'millisecond' または 'ms'

ユースケース

DateDiff関数を活用し、「来店時の年齢」というカラムを作成していきます。
今回使用するサンプルデータのように年齢が不明なケースがあります。
そのような場合、DateDiff関数を用いて来店日時から生年月日を引くことで、簡単に来店当時の年齢を算出できます。

また、Arg1の比較対象部分に「yy」を入力するだけで、年単位で計算させることができ簡単に年齢を取得できます。

「来店時の年齢」という計算カラムを作成します。
メニューバー 「データ」 > 「計算カラムを追加…」 をクリックします。

以下の式およびカラム名を入力し、「OK」次のダイアログでも「OK」をクリックします。
式:Integer(DateDiff('yy',[生年月日],[来店日]))
※Integer() 内にDateDiff関数式を入れることにより、実数値(Real)ではなく整数で出力することができます。小数点以下は切り捨てられます。
カラム名:来店時の年齢

計算カラムが以下のように作成されます。

このように、DateDiff関数を活用することで簡単に期間を算出することができます。
その他の活用例として、来店時刻と退店時刻という情報があるのならば、それらをDateDiff関数で計算することで滞在時間を取得できます。

Today

Today関数を利用することで、現在の日付を取得できます。
例えば、Web共有されたダッシュボードを各人が閲覧する際に、各人が閲覧している日付をダッシュボードに反映させたい場面で活用できます。

使用方法

Today()

ユースケース

先ほどDateDiff関数を活用し「来店時の年齢」というカラムを作成しましたが、今回はToday関数を活用し「現在の年齢」というカラムを作成していきます。
現在の年齢を算出することで、例えば現在の年齢で分析対象を絞り込むことが可能になります。

Today関数とDateDiff関数を活用することで「現在の年齢」の算出が可能です。

DateDiff関数で来店時の年齢を取得した際と同様に、計算カラムを追加します。
以下の式およびカラム名を入力し「OK」、次のダイアグラムでも「OK」をクリックします。

  • 式:Integer(DateDiff('yy',[生年月日],Today()))
  • カラム名:現在の年齢

計算カラムが以下のように作成されます。

このように、Today関数を活用することで現在の日付を使用できます。

Case

Case関数を利用することで、条件分岐処理を実行できます。
つまり、特定の条件が満たされているかどうかに応じて、出力結果を変更できます。

条件分岐の例:

  • 天気が雨 ⇒ 映画を見る
  • 天気が晴 ⇒ 散歩に行く
  • それ以外の天気 ⇒ 勉強する

使用方法

Case ステートメントには下記の2種類の形態があります。

  • case Arg1 when Arg2 then Arg3 else Arg4 end
  • case when Arg1 then Arg2 else Arg3 end
「case Arg1 when Arg2 then Arg3 else Arg4 end」を使用する場合

Arg1 が Arg2 と等しい場合は Arg3 が、等しくない場合は Arg4 が返されます。
※これらの式は左から右に順番で評価されます。

  • Arg1:条件分岐の対象カラム
  • Arg2:条件
  • Arg3:Arg2がTrueの場合の結果
  • Arg4:Arg2がFalseの場合の結果

「case when Arg1 then Arg2 else Arg3 end」を使用する場合

Arg1=true の場合は Arg2 を返します。Arg1=false の場合は Arg3 を返します。
※これらの式は左から右に順番で評価されます。

  • Arg1:条件
  • Arg2:Arg2がTrueの場合の結果
  • Arg3:Arg2がFalseの場合の結果

ユースケース

Case関数を活用し、分析対象のデータにフラグ(目印)を立てていきます。
分析対象は20〜29歳の20代とします。

20代に「1」、20代以外に「0」というフラグを立てます。
また、年齢カラムに値がない(NULL)データには「100」というフラグを立てることにします。
※ローのフィルターにより分析対象データを絞ることは可能ですが、分かりやすくするためにフラグを立てています。

これまでと同様に計算カラムを追加します。
以下の式およびカラム名を入力し「OK」をクリックします。

  • 式:
    case
    when (20<=[現在の年齢]) And ([現在の年齢]<30) then 1
    when [現在の年齢] is NULL then 100
    else 0
    end
  • カラム名:20代フラグ

計算カラムが以下のように作成されます。

このように、Case関数を活用することで条件を満たしているかどうかで任意の結果を出力できます。

If

If関数を利用することで、条件分岐処理を実行できます。

使用方法

If(Arg1,Arg2,Arg3)
Arg1がTrueならば、Arg2が出力されArg1がFalseならばArg3が出力されます。※これらの式は左から右に順番に評価されます。

  • Arg1:条件式
  • Arg2:Arg1がTrueの場合の結果
  • Arg3:Arg1がFalseの場合の結果

ユースケース

If関数を活用し、追加でフラグ(目印)を立てていきます。
分析対象をさらに絞るために、20代に加えて来店客数が2人以上、来店時刻が17時以降のデータにもフラグ「1」を立てます。
再度Case関数を利用してもよいのですが、今回はIf関数を使用します。

これまでと同様に計算カラムを追加します。
以下の式およびカラム名を入力しOKをクリックします。

  • 式:
    If(([20代フラグ]=1) and ([来店客数]>1) and ([来店時刻]>=Time(17,00,00,00)),1,0)
  • カラム名:分析対象フラグ

計算カラムが以下のように作成されます。

Rank / DenseRank

Rank関数およびDenseRank関数を利用することで、選択したカラム内の値のランキングを表す整数値を取得できます。

Rank関数とDenseRank関数の差異は、選択したカラム内の値が同じであった際のランキングを表す値の返し方です。
※詳細はこちらのページ内「DenseRank(Arg1, Arg2, Arg3...)」と「Rank(Arg1, Arg2, Arg3...)」をご参照ください。

使用方法

Rank / DenseRank 関数は複数の形態を取りますが、下記の2種類を例に挙げます。

  • Rank(Arg1, Arg2, Arg3)
  • Rank(Arg1, Arg2, Arg3, Arg4)
「Rank(Arg1, Arg2, Arg3)」を使用する場合

Arg3ごとにArg1の値をArg2の順で判別し、整数値を取得します。


式:Rank([Arg1], 'desc', [Arg3])

Arg3の値「A」「B」ごとにArg1の値が大きい順でランクを表す整数値を取得できています。

「Rank(Arg1, Arg2, Arg3, Arg4)」を使用する場合

Arg3ごとにArg1の値をArg2の順で判別し、整数値を取得します。Arg4はArg1の値が同じだった場合の処理方法を指定します。

引数の役割は下記になります。

  • Arg1:ランクされるカラム
  • Arg2:’asc’ または ‘desc’ を入力することで、ランク順の選択が可能
    ※Arg2を指定しない場合、asc(昇順)でランクを取得します。
  • Arg3:OVER関数のように計算対象をグルーピングする役割を担い、Arg3ごとにランクできます。
  • Arg4:Arg1が同値だった場合の処理方法を指定できます。詳細はこちらのページ内「タイのランク詳細」をご参照ください。

ユースケース

Rank関数を活用し、店舗ごとに売上の高い会計TOP10を取得していきます。
Rank関数とIf関数を活用することで実現可能です。

店舗ごとに売上金額TOP10のローを取得し、その他のローはNULLにします。

これまでと同様に計算カラムを追加します。
以下の式およびカラム名を入力しOKをクリックします。

  • 式:
    If(Rank([売上金額],'desc',[店舗ID])<=10,
    Rank([売上金額],'desc',[店舗ID]),
    NULL)
  • カラム名
    上位10会計

このように、Rank関数を活用することで値の大きさや順番を考慮した計算・出力ができます。

探索的分析/原因分析の領域で
高い評価と実績
TIBCO Spotfire

TIBCO Spotfire®は分析に必要な機能を単一製品でカバーするビジュアルアナリティクスツールです。

【アドバンスド】記事一覧に戻る
全記事一覧に戻る