お問い合わせ
6 分で読むことができます。

【Sisense Plugin】Switchable Dimensionで分析軸を瞬時に変更する

執筆者 Turtle 更新日時 2020年10月16日

Topics: Plugin
【Plug-in】Switchable Dimensionで分析軸を瞬時に変更する

目次

こんにちは、Michaelです!

Turtleの前回のブログに触発されて、

「よし!流れに乗って飲み物のアイキャッチ画像を設定するぞ!!」

と気合を入れてキッチンに向かい、冷蔵庫を開けて、唯一見つかったのはなんと…!

IMG_3977-scaled-e1593182031769-980x735

これでしたー(泣)

よりによって、おしゃれなクラフトビールでも買っておけばよかったなー。でも、この梅サワー、パッケージはともかく、味はおいしいんですよー!

さて、本題に。今日はSwitchable Dimensionというプラグインの紹介です!

 

1.はじめに

Sisenseでは標準の機能の範囲で、あるチャートの分析軸の切り替えを行うには、編集画面に行って軸の変更を行う必要があります。

ただこの場合、テーブルと項目名を選ぶ必要があってエンドユーザーからすると、elastiCube側の構造を知っていないと不便であったりしますよね。特に大きなプロジェクトになるとテーブルもカラムも増えていって、不必要なカラムをelastiCube側で非表示にしていなければカオスな状態になります。(ユーザーからすると、どのテーブルのどのカラムを軸に設定するかがわからない)

なんと!今回のプラグインを使うと、軸の切り替え項目をチャートの作成段階で設定でき、ユーザーからすると、チャートを右クリックするだけで選択、瞬時に軸の切り替えが可能になります。

今回は例として、

①軸の切り替え
②Break By(内訳)の切り替え
③散布図で指標の切り替え

上記3つをSwitchable Dimensionを使って実装していこうと思います。

 

2.データ準備

さて、今回もFoodmartのデータで説明していきます。まず最初にデータを少し加工します。

 

購入年代の追加

購入時年代を追加します。

元データには顧客の誕生日情報がCustomerテーブルにあり、Salesテーブルにある売上日から差額を計算した購入時年齢というカラムがSalesテーブルにあります。これを元に購入時年代を作成していきます。

表示が5歳ごとの範囲(例:40-45歳)になるように以下のようにカスタム例を追加しました。

CASE
  WHEN Mod(購入時年齢,5) = 0 THEN ToString(購入時年齢) + '-' + ToString(購入時年齢 + 5)
  ELSE ToString(Floor(購入時年齢/5)*5) + '-' + ToString(Ceiling(購入時年齢/5)*5-1)
END

①5で割り切れる時は、そのままの購入時年齢、購入時年齢に5を足した年齢
②それ以外はFloorした年齢とCeilingした年齢

という風に分けて処理をします。結果は下のようになりました。

コメント 2020-06-26 161547

 

いい感じです!

 

RFM分析用のデータ準備

後々、RFM分析の散布図を作ります。そのために、Recency, Frequency, Monetaryの3指標を準備します。

新しくカスタムテーブルを作成し、以下のSQLでそれぞれ用意します。

新しく作成したテーブルをRFMという名前にし、顧客テーブルと顧客IDで紐づけました。
(厳密に言うと、別テーブルで持つ意味もないので顧客テーブルにそのままJoinしても構いません)

SELECT
    顧客ID
  , recency
  , frequency
  , monetary
  , CASE
        WHEN recency <= 30 THEN 5
        WHEN recency <= 60 THEN 4
        WHEN recency <= 90 THEN 3
        WHEN recency <= 180 THEN 2 else 1 END AS r_rank 
, CASE
WHEN frequency >= 500 THEN 5 WHEN frequency >= 250 THEN 4 WHEN frequency >= 100 THEN 3 WHEN frequency >= 50 THEN 2 else 1 END AS f_rank , CASE WHEN monetary >= 500000 THEN 5 WHEN monetary >= 300000 THEN 4 WHEN monetary >= 100000 THEN 3 WHEN monetary >= 50000 THEN 2 else 1 END AS m_rank FROM ( SELECT 顧客ID , DayDiff(Now(), Max(売上日)) AS recency , COUNT(売上日) AS frequency , SUM(売上金額) AS monetary FROM Sales GROUP BY 顧客ID ) AS user_rfm

説明

Recency = 現在の日付から最新売上日との差額
Frenquecy = 売上日のカウント
Monetary = 売上金額の合計

上記の3つを顧客IDでGROUP BYしてSalesテーブルから求めました。
3つの指標に対して、1〜5のランク付けを行ってあります。

結果がこちら。

コメント 2020-06-26 225601

 

データ構造はこのような感じです。

コメント 2020-06-26 194128

準備が整いました!次から本題であるプラグインを実装していきましょう!

 

3.プラグイン設定

インストール

まずは、例の通りプラグインをインストールしないと始まらないですね。Switchable Dimensionはオフィシャルにサポートされているプラグインです。安心安心。

ダウンロードはこちらから

ダウンロード後は、所定のパス(C:\Program Files\Sisense\app\plugins)に解凍して置きます。

ウェブサーバーをリスタートして、ダッシュボードを作っていきましょう。

 

ディメンションの変更

新しくウィジェットを作成し、棒グラフを選択します。

ディメンション(カテゴリー)を「売上都道府県」にし、メジャーは「売上金額」に設定します。

棒グラフが完成したら、ウィジェットのスクリプト編集画面にいきます。以下の雛形のコードをコピーして張り付けてください。必要部分を変えていきます。

prism.registerSwitchDimension({
			widget: widget,
			maxItemsBeforeSubMenuIsCreated: 5,  //optional
			dimensions: [
			{
			panel: '',
			affectAllWidgets: true,  //optional (true|false)
			dims: [
			{
			"index": 0,
			"dim": "[.]",
			"datatype": "",
			"title": "", //optional
			"widgetTitleTemplate": "" //optional
			},
			{
			"index": 0,
			"dim": "[.]",
			"datatype": "",
			"title": "", //optional
			"widgetTitleTemplate": "" //optional
			}
			]
			}
			]
		});

説明していきます。

 

maxItemsBeforeSubMenuIsCreated : オプショナル。デフォルトは5(5を超えると表示上サブメニューの中になる)

panel : ウィジェット編集画面のパネルの名前を設定。棒グラフの場合はcategoriesで設定。
他にはx-axis, y-axisなどがある

affectAllWidgets:オプショナル。tureの場合、全てのウィジェットでディメンション変更が行われる。デフォルトではtrue

dim: ディメンションのデータの場所をここで指定。テーブル名.カラム名 の形式で指定

datatype: データのタイプを設定。text, datetime, numericなどから設定

title : チャートを右クリックした際に、表示されるタイトル名。

widgetTitleTemplate: オプショナル。ウィジェットタイトルを変更する。ここを設定しないとウィジェット名が勝手に変わってしまうので注意。

 

ここでは、切り替えできる項目として、商品大分類、購入時年代、ブランド名、売上月を設定しました。
(初期表示のカテゴリーである都道府県も、切り替えた後に戻れるように設定してあります)

最終的なコードはこちら。

prism.registerSwitchDimension({
			widget: widget,
			maxItemsBeforeSubMenuIsCreated: 5,  //optional
			dimensions: [
			{
			panel: 'categories',
			affectAllWidgets: false,  //optional (true|false)
			dims: [
					{
					"index": 0,
					"dim": "[Area.売上都道府県]",
					"datatype": "text",
					"title": "Prefecture", //optional
					"widgetTitleTemplate": "Sales by Prefecture" //optional
					},
					{
					"index": 0,
					"dim": "[CategoryProducts.商品大分類]",
					"datatype": "text",
					// "level":"days",
					"title": "Product Categories", //optional
					"widgetTitleTemplate": "Sales by Product Categories" //optional
					},
					{
					"index": 0,
					"dim": "[Sales.購入時年代",
					"datatype": "text",
					"title": "Age", //optional
					"widgetTitleTemplate": "Sales by Age" //optional
					},
				    {
					"index": 0,
					"dim": "[CategoryProducts.ブランド名]",
					"datatype": "text",
					"title": "Brand", //optional
					"widgetTitleTemplate": "Sales by Brand Name" //optional
					},
				 {
					"index": 0,
					"dim": "[Sales.売上日]",
					"datatype": "datetime",
					"level":"months",
					"title": "Months", //optional
					"widgetTitleTemplate": "Sales by Months" //optional
					},
			]
			}
			]
		});

※datetimeの場合は、levelを追加し、years, quarters, weeks, months, daysから選択する必要あり。

 

Saveして、スクリプト編集画面を出ます。

ウィジェット編集画面で一度画面リフレッシュをして、保存してダッシュボードへ。できたチャートはこれです。

 

棒グラフを右クリックして、確認してみると…。

コメント 2020-06-26 210023

Switch Dimensionのオプションが増えています!ここから軸の切り替えができるようですね。

試しに一つ、ここでは購入時年代をクリックしてみましょう。Ageをクリックすると…。

コメント 2020-06-26 210847

ディメンションが切り替わりました!ウィジェットタイトルも変わっていますね。

他のディメンションも確認しましょう。

Monthsに切り替えると…。

コメント 2020-06-26 211037

Brand Nameに切り替えると…。

コメント 2020-06-26 210750

問題ないです!

 

Break Byの変更

次に棒グラフを横向きに作成して、都道府県ごとの売上を様々な内訳で見てみましょう。

デフォルトのBreak byを店舗タイプで設定します。これを切り替えで性別と、商品カテゴリーに切り替えできるように設定します。
(上記と同様に、初期表示の軸である店舗タイプも切り替えた後に戻れるように設定します)

prism.registerSwitchDimension({
			widget: widget,
			maxItemsBeforeSubMenuIsCreated: 5,  //optional
			dimensions: [
			{
				 panel: 'break by',
				 affectAllWidgets: true,
				 dims: [
					{
						"index":0,
						"dim":"[Store.店舗タイプ]",
						"datatype": "text",
						"title":"Store Type",
						"widgetTitleTemplate": "Sales by Area (broken by Store Type)"
					},
					{
					   "index": 0,
					   "dim": "[Customer.性別]",
					   "datatype": "text",
					   "title": "Gender",
						"widgetTitleTemplate": "Sales by Area (broken by Gender)"
					},
					{
					   "index": 0,
					   "dim": "[categoryProducts.商品大分類]",
					   "datatype": "text",
					   "title": "Product Category",
						"widgetTitleTemplate": "Sales by Area (broken by Product Cateogory)"
					}
				 ]
			  }
			]
		});

Saveして、スクリプト編集画面を出ます。ウィジェット編集画面でリフレッシュしてダッシュボードに戻りましょう。

できあがったチャートがこちら。

コメント 2020-06-26 210123

チャートの棒グラフの上で右クリックすると…。

コメント 2020-06-26 210646

切り替えられる項目が表示されていますね!

試しに、Product Categoryを選択すると、

コメント 2020-06-26 210631

表示が変わります!

今度は性別を選ぶと…。

コメント 2020-06-26 210729

ノープロブレムです!

 

散布図の軸切り替え

最後に散布図の軸の切り替えを行います。

RFM分析のチャートをここでは作成するのですが、初期表示として、Recency, Frequencyを2軸に各顧客をプロットし、x軸、もしくはy軸の指標をMonetaryに切り替えできるように実装していきましょう。(もちろんRecency, Frequencyに戻ることも可能です)

散布図を作成して、先ほど作成したRFMテーブルから、x軸にRecency、y軸にFrequencyをそれぞれ設定します。ポイントに(RFMテーブルの)顧客IDを設定します。

コメント 2020-06-26 211451

スクリプト編集画面に行って以下のようにコードを入れます。panelがx-axisとy-axisであることに注意。

prism.registerSwitchDimension({
			widget: widget,
			maxItemsBeforeSubMenuIsCreated: 8,  //optional
			dimensions: [
			{
				 panel: 'x-axis',
				 affectAllWidgets: false,
				 dims: [
					{
						"index":0,
						"dim":"[RFM.recency]",
						"datatype": "numeric",
						"title":"X: Recency"
					},
					{
					   "index": 0,
					   "dim": "[RFM.frequency]",
					   "datatype": "numeric",
					   "title": "X: Frequency"
					},
					{
					   "index": 0,
					   "dim": "[RFM.monetary]",
					   "datatype": "numeric",
					   "title": "X: Monetary"
					}
				 ]
			  },
			  {
				 panel: 'y-axis',
				 affectAllWidgets: false,
				 dims: [
					{
						"index":0,
						"dim":"[RFM.recency]",
						"datatype": "numeric",
						"title":"Y: Recency"
					},
					{
					   "index": 0,
					   "dim": "[RFM.frequency]",
					   "datatype": "numeric",
					   "title": "Y: Frequency"
					},
					{
					   "index": 0,
					   "dim": "[RFM.monetary]",
					   "datatype": "numeric",
					   "title": "Y: Monetary"
					}
				 ]
			  }
			]
		});

散布図のポイントにホバーした際に、分析軸がわかりやすいようにtitleにx軸、y軸それぞれ、「X:」「 Y:」と入れました。

Saveして、スクリプト編集を出ます。ウィジェット編集画面でリフレッシュして、ダッシュボードに戻ります。

散布図のプロットされたポイント上を右クリックすると同様にSwitch Dimensionのオプションが出ています。

これでRecency、Freqeuency、Monetaryを自在に切り替えて分析できるようになりました。

試しに、RFからFMに替えてみると…。

コメント 2020-06-26 211659

RMに替えると…?
コメント 2020-06-26 211737

このように1つのチャート上で瞬時に切り替えができます!

5.まとめ

ということで、Switchable Dimensionを紹介しました。

分析の軸が多いと、その分チャートを作る数も増えてごちゃごちゃして、ダッシュボードが見にくくなりますよね。

もしくは、同チャートで軸の切り替えを行うには、標準の場合、ウィジェット編集画面に入り、該当するテーブル、カラムを選び直すぶ必要があってエンドユーザーからするととても使いにくい!

メジャーが一緒であれば、このプラグインを使うことによって、軸の切り替えは同一のチャートでできるようになりUI改善につながりそうです。このプラグインとても使えます!

ただ、datetimeからdatetimeへの切り替えはできないようなので使いどころは要注意です。
(例えば、売上日を週から日への切り替えの設定を行うと右クリックしても切り替え軸が表示されませんでした)

それではまた!

Viva, Sisense!

Sisenseを体験してみませんか?

INSIGHT LABではSisense紹介セミナーを定期開催しています。Sisenseの製品紹介や他BI製品との比較だけでなく、デモンストレーションを通してSisenseのシンプルな操作性やプレゼンテーション機能を体感いただけます。

詳細はこちら

Turtle

執筆者 Turtle

可視化領域を中心とした業務に従事しています。

8 分で読むことができます。

【API連携】Spotify音楽データの分析①【Sisense】

3 分で読むことができます。

【Sisense Formula】CASE関数を使って条件分岐する

4 分で読むことができます。

【Sisense Administaration】無料のSSL証明書"Let's Encrypt"でSSL化してみる

3 分で読むことができます。

【Sisense Widget】折れ線グラフにおける欠落値の対処法

2 分で読むことができます。

【Sisense Widget】折れ線グラフを階段状に表示する