2023/05/09
アドバンスド
Spotfireで前処理・可視化を行う際に、「計算カラムの追加」や「ローのフィルター」、「カスタム演算式」を利用する場面は多く登場すると思います。それらを実行する際に必ず必要になるのが関数です。
本コンテンツでは、使用頻度の高いおすすめ関数についてご紹介していきます。
なお、本コンテンツで利用したバージョンはSpotfire11.4/12.0となります。ご利用環境によって、一部画面構成が異なる可能性があります。ご了承ください。
本コンテンツでは、データの前処理・可視化において頻出の「関数」を使用例を交えてご紹介いたします。
本コンテンツで紹介する関数一覧は下記の通りです。
関数とは、計算カラムやカスタム演算式の式の中で用いる「+」や「IF」などの機能を指します。
関数を適切に活用することで、前処理・可視化を大幅に効率化できます。
Spotfireで使用可能な関数は、「IF」のような汎用的な関数もあれば、「OVER」のようなSpotfire特有の関数もあります。※OVER関数についてはこちらをご参照ください。
本コンテンツでは、各関数の利用方法を例を交えてご紹介します。
引数を示す際には、式の左から順に「Arg1」、「Arg2」のように表記します。
例:Sum([Arg1], [Arg2])
本コンテンツで使用するサンプルデータはこちらです。飲食店の売上に関するデータです。
飲食店データ.xlsxを読み込みます。「ビジュアライゼーションタイプ」>「テーブル」を選択します。
※上画像と読み込んでいただいたデータテーブルは多少異なる可能性がありますが問題ありません。
DateDiff関数を利用することで、2つの日付カラム、時刻カラム、または日付時刻カラムの間の差異を計算し出力できます。
例えば、下図のように開始時間と終了時間の両方がカラムとして存在している場合に、開始から終了までどのくらい継続していたのかという期間を算出できます。
下記のような2通りの使用方法があります。
結果は期間として出力され、全ての単位の差異が出力されます
結果は比較対象の単位に基づき、実数値で出力されます。
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関数を利用することで、現在の日付を取得できます。
例えば、Web共有されたダッシュボードを各人が閲覧する際に、各人が閲覧している日付をダッシュボードに反映させたい場面で活用できます。
Today()
先ほどDateDiff関数を活用し「来店時の年齢」というカラムを作成しましたが、今回はToday関数を活用し「現在の年齢」というカラムを作成していきます。
現在の年齢を算出することで、例えば現在の年齢で分析対象を絞り込むことが可能になります。
Today関数とDateDiff関数を活用することで「現在の年齢」の算出が可能です。
DateDiff関数で来店時の年齢を取得した際と同様に、計算カラムを追加します。
以下の式およびカラム名を入力し「OK」、次のダイアグラムでも「OK」をクリックします。
Integer(DateDiff('yy',[生年月日],Today()))
計算カラムが以下のように作成されます。
このように、Today関数を活用することで現在の日付を使用できます。
Case関数を利用することで、条件分岐処理を実行できます。
つまり、特定の条件が満たされているかどうかに応じて、出力結果を変更できます。
条件分岐の例:
Case ステートメントには下記の2種類の形態があります。
Arg1 が Arg2 と等しい場合は Arg3 が、等しくない場合は Arg4 が返されます。
※これらの式は左から右に順番で評価されます。
例
Arg1=true の場合は Arg2 を返します。Arg1=false の場合は Arg3 を返します。
※これらの式は左から右に順番で評価されます。
例
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
計算カラムが以下のように作成されます。
このように、Case関数を活用することで条件を満たしているかどうかで任意の結果を出力できます。
If関数を利用することで、条件分岐処理を実行できます。
If(Arg1,Arg2,Arg3)
Arg1がTrueならば、Arg2が出力されArg1がFalseならばArg3が出力されます。※これらの式は左から右に順番に評価されます。
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関数の差異は、選択したカラム内の値が同じであった際のランキングを表す値の返し方です。
※詳細はこちらのページ内「DenseRank(Arg1, Arg2, Arg3...)」と「Rank(Arg1, Arg2, Arg3...)」をご参照ください。
Rank / DenseRank 関数は複数の形態を取りますが、下記の2種類を例に挙げます。
Arg3ごとにArg1の値をArg2の順で判別し、整数値を取得します。
例
式:Rank([Arg1], 'desc', [Arg3])
Arg3の値「A」「B」ごとにArg1の値が大きい順でランクを表す整数値を取得できています。
Arg3ごとにArg1の値をArg2の順で判別し、整数値を取得します。Arg4はArg1の値が同じだった場合の処理方法を指定します。
引数の役割は下記になります。
Rank関数を活用し、店舗ごとに売上の高い会計TOP10を取得していきます。
Rank関数とIf関数を活用することで実現可能です。
店舗ごとに売上金額TOP10のローを取得し、その他のローはNULLにします。
これまでと同様に計算カラムを追加します。
以下の式およびカラム名を入力しOKをクリックします。
If(Rank([売上金額],'desc',[店舗ID])<=10,
Rank([売上金額],'desc',[店舗ID]),
NULL)
このように、Rank関数を活用することで値の大きさや順番を考慮した計算・出力ができます。
【アドバンスド】最新の記事