はじめに
はじめまして、T.matuです。
2019年8月1日 に Salesforce が、Tableau Software を買収し、分析プラットフォームを統合したと発表して早2年ほど経ちました。
私もここ1年は Einstein Analytics あらため Tableau CRM を使用した分析ダッシュボードの作成機会がかなり増えており、時代はレポートから Tableau CRM に置き換わっていると感じています。
2019年8月1日 に Salesforce が、Tableau Software を買収し、分析プラットフォームを統合したと発表して早2年ほど経ちました。
私もここ1年は Einstein Analytics あらため Tableau CRM を使用した分析ダッシュボードの作成機会がかなり増えており、時代はレポートから Tableau CRM に置き換わっていると感じています。
しかし、Tableau CRM は、完全にレポートを踏襲しているわけではなく、レポートでは簡単にできていたことが Tableau CRM では思うようにできないといった事象もいくつかあります。
そのひとつに、選択リスト項目による制限事項がございますので、こちらの対策方法について検証した結果を紹介させていただきます。
そのひとつに、選択リスト項目による制限事項がございますので、こちらの対策方法について検証した結果を紹介させていただきます。
問題点
選択リスト項目並びを Salesforce で設定した通りに表示することができない。
原因
なぜ選択リストの並びが指定できないかというと、根本的にデータ構造が異なるからです。
レポートでは Salesforce のオブジェクトを使用しますが、Tableau CRM では、各種データ群をデータセットという形で保持します。
そのため、Tableau CRM では選択リストの設定情報を引き継げず、結果として並び替えが文字データかレコード数でしかソートができない状態となります。
レポートでは Salesforce のオブジェクトを使用しますが、Tableau CRM では、各種データ群をデータセットという形で保持します。
そのため、Tableau CRM では選択リストの設定情報を引き継げず、結果として並び替えが文字データかレコード数でしかソートができない状態となります。
◯レポート
Salesforce に格納されているオブジェクトのレコードを使用
・ Salesforce オブジェクト
◯Tableau CRM
データセットにて変換されたデータ群を使用
・ CSVからの取り込み
・ Salesforce オブジェクトのローカルデータ
・ 各種コネクタを使った外部データ
Salesforce に格納されているオブジェクトのレコードを使用
・ Salesforce オブジェクト
◯Tableau CRM
データセットにて変換されたデータ群を使用
・ CSVからの取り込み
・ Salesforce オブジェクトのローカルデータ
・ 各種コネクタを使った外部データ
選択リストの挙動
検証のため、今回はレア度という選択リストの項目と値を設定しました。
並びはレア度が低い順に登録しています。
C - コモン(Common)
B - アンコモン(Uncommon)
A - レア(Rare)
S - エピック(Epic)
SS- レジェンダリー(Legendary)
並びはレア度が低い順に登録しています。
C - コモン(Common)
B - アンコモン(Uncommon)
A - レア(Rare)
S - エピック(Epic)
SS- レジェンダリー(Legendary)
レポート
まずはレポートで表示してみると、並びは登録された順番となっています。
C - コモン(Common)
B - アンコモン(Uncommon)
A - レア(Rare)
S - エピック(Epic)
SS- レジェンダリー(Legendary)
C - コモン(Common)
B - アンコモン(Uncommon)
A - レア(Rare)
S - エピック(Epic)
SS- レジェンダリー(Legendary)
Tableau CRM ダッシュボード
次に、Tableau CRM ダッシュボードの画面を確認します。
今回は、絞り込みの2種類(リストと切り替え)と横棒グラフを用意しました。
今回は、絞り込みの2種類(リストと切り替え)と横棒グラフを用意しました。
文字列の昇順でソートされているため、絞り込みもグラフもレア度順に並んでいない状態です。
A - レア(Rare)
B - アンコモン(Uncommon)
C - コモン(Common)
S - エピック(Epic)
SS- レジェンダリー(Legendary)
また、文字列の昇順降順かデータ件数の昇順降順しか指定ができないため、このままでは少し使いにくいUIとなっています。
そこで今回は2つの対応方法を記載します。
A - レア(Rare)
B - アンコモン(Uncommon)
C - コモン(Common)
S - エピック(Epic)
SS- レジェンダリー(Legendary)
また、文字列の昇順降順かデータ件数の昇順降順しか指定ができないため、このままでは少し使いにくいUIとなっています。
そこで今回は2つの対応方法を記載します。
対応方法1(簡易版)
レシピでレア度に対しバケット列を追加し、名称の頭にナンバリングを追加することで指定した並びでソートできる状態にします。
STEP 1 レシピのバケット機能で、選択リストの値に対しナンバリングを行う
レシピより、バケット機能を使い、文字列の頭に並びたい順番でナンバリングを行った列を新たに追加します。
STEP 2 ナンバリング付きの項目でグラフを作成
作成したバケットを使用し、ダッシュボードを修正します。
おめでとうございます!
レア度が低い順に並んでいますね!
でも、ナンバリングがあるとグラフや絞り込みに不要な文字列が表示されています。
この方法では、どうしてもラベルを変更するため、全体的に影響がでてしまう方法となってしまいます。
ここはもう1歩踏み込んで、SAQL の変更まで行っていきたいと思います。
レア度が低い順に並んでいますね!
でも、ナンバリングがあるとグラフや絞り込みに不要な文字列が表示されています。
この方法では、どうしてもラベルを変更するため、全体的に影響がでてしまう方法となってしまいます。
ここはもう1歩踏み込んで、SAQL の変更まで行っていきたいと思います。
対応方法2
データフローやレンズのクエリモードで SAQL を編集し、順番の並び替えを行い、
拡張メタデータを利用し、値の形式をカスタマイズします。
拡張メタデータを利用し、値の形式をカスタマイズします。
STEP 1 SAQL で値の並び変え
作成したレンズの SAQL を編集で開き、以下の通り値の修正を行います。
q = load "Rarity"; q = group q by 'Rarity__c'; q = foreach q generate (case q.'Rarity__c' when "C - コモン(Common)" then "001 C - コモン(Common)" when "B - アンコモン(Uncommon)" then "002 B - アンコモン(Uncommon)" when "A - レア(Rare)" then "003 A - レア(Rare)" when "S - エピック(Epic)" then "004 S - エピック(Epic)" when "SS- レジェンダリー(Legendary)" then "005 SS- レジェンダリー(Legendary)" else q.'Rarity__c' end ) as 'Rarity__c', count() as 'カウント'; q = order q by 'Rarity__c' asc; q = limit q 2000;
SAQL
STEP 2 拡張メタデータの修正
ダッシュボードで参照しているデータセットより、拡張メタデータの修正を行い値の形式をカスタマイズします。
場所は、データマネージャ>データセット> ダッシュボードで使用しているデータセット に遷移し、
画像の箇所より拡張メタデータファイルをダウンロードします。
場所は、データマネージャ>データセット> ダッシュボードで使用しているデータセット に遷移し、
画像の箇所より拡張メタデータファイルをダウンロードします。
ダウンロードしてきた拡張メタデータファイルをテキストで開き、編集を行います。
{ "dataset": {}, "dates": [], "derivedDimensions": [], "derivedMeasures": [], "dimensions": [ { "conditionalFormatting": {}, "customActions": [], "field": "Rarity__c", "members": [ { "label": "C - コモン(Common)", "member": "001 C - コモン(Common)" }, { "label": "B - アンコモン(Uncommon)", "member": "002 B - アンコモン(Uncommon)" }, { "label": "A - レア(Rare)", "member": "003 A - レア(Rare)" }, { "label": "S - エピック(Epic)", "member": "004 S - エピック(Epic)" }, { "label": "SS- レジェンダリー(Legendary)", "member": "005 SS- レジェンダリー(Legendary)" } ], "recordDisplayFields": [], "salesforceActions": [] }, { "conditionalFormatting": {}, "customActions": [], "field": "Name", "linkTemplateEnabled": true, "members": [], "recordDisplayFields": [ "Name" ], "recordIdField": "Id", "salesforceActions": [], "salesforceActionsEnabled": false } ], "measures": [], "organizations": [], "showDetailsDefaultFields": [] }
Rarity.xmd (work).json
修正後、先程ダウンロードしてきたデータセットに対し置換でjsonファイルを格納します。
それでは、ダッシュボードを見てみましょう。
それでは、ダッシュボードを見てみましょう。
おめでとうございます!
レア度が低い順に並んでいますね!
こちらの方法であれば、ユーザが確認する画面はそのままで、裏でナンバリングされた値でソートが行われていますので、違和感なく並び替えが行われています。
レア度が低い順に並んでいますね!
こちらの方法であれば、ユーザが確認する画面はそのままで、裏でナンバリングされた値でソートが行われていますので、違和感なく並び替えが行われています。
まとめ
このように標準機能ではできないことも、SAQLと拡張メタデータを使うことで実現の幅が広がると感じています。
思ったとおりに表示できない。。。と悩んでる方の助けになれば、と思います。
思ったとおりに表示できない。。。と悩んでる方の助けになれば、と思います。
43 件