データエンジニアがtableauをちゃんと使って気づいたデータソースの問題点3つ
はじめに
自社内でtableau serverのデータソースを提供する役割をしています。
そして現在datasaberを目指していて、今まで作ったことがないタイプのダッシュボードを作ることが増えてきました。
その中で改めて思うことあります。
「データソースがちょっと使いづらい・・・!?」
データソースを利用する側の立場に立ってみると、ビジュアライズする以前の課題が色々と見えてきます。 今回自戒を込めてデータソース提供側が知るべき課題を整理しました。
(1)どんなデータがあるのかそもそもわからない
まずこれです。
何か業務上の課題があって分析をしたいと思っても、そもそもデータソースがあるのかどうかがわからないのです。
データソース提供側からすると、tableau serverにデータソース専用フォルダーを作ってそこにまとめてはいます。
ただ利用者側からすると、それだけだと中にどんなデータが入っているのか1つ1つチェックしないとわかりません。
(またこれはうちの社内の問題ですが、、「【テスト用】売上情報」みたいなデータソースが混在していてどれが公式なものかわかりません。)
どんなデータがあるのかそもそもわからない。なので何ができるかわからない。
となると「まぁいいや」とやる気がそがれてしまいます。
データがあるかわからない場合の解決案
解決案には以下のようなものがありそうです。
- データソース置き場を整理する
- データの取得元や種類別に分ける
- 定期的に更新されているものとアドホックなものをわける。
- tableau serverとは別にデータソースを紹介するドキュメントを作成する
- データカタログやデータポータル的なイメージ
- データソース利用事例を提供する。
(2)データソースはわかったけど必要な項目がない
欲しいデータが入っているとされているデータソースを見つけられたとします。
「よし!これで分析を開始しよう」
と思ってもつまづくことがあります。
データソースの中に必要な項目がないこと結構あるのです。
たとえば業種ごとに売上の推移を見たいとします。
売上推移なので売上データソースを使います。
もちろん売上の情報はあります。一応顧客の基本情報も一通りありました。
しかし今回見たい業種の情報が入ってない!とか。
そういうかゆいところに手が届かないことが結構あります。
他には、データを登録した人を確認しようとしたときに、
「作成者IDはあるけど、作成者名がない!ユーザマスタと結合してないじゃん」
みたいなこともよくあります。
私はデータエンジニアの立場でもあるので、データソースに項目ない場合は追加することができますが、Explorerの人はその時点で分析をあきらめてしまう人もいそうな気がします。
項目がない場合の解決案
解決案には以下のようなものがありそうです。
- 利用者の立場になって必要そうな項目は可能な限り事前に用意しておく。
- 正直すべての項目を事前に網羅するには難しい
- (項目の数が多すぎるとわかりづらいしパフォーマンスも悪くなる)
- しかしデータソースは使われないと意味がないので少なくとも
- データがなかった場合に項目追加を依頼する場合の連絡先を明示しておく
- わかりやすいマニュアルを用意しておく
(3)データソースが重い
データソースの問題点3つ目。
「データソースが重い」
です。
tableauは1つ1つの操作に画面からリアクションがあるのがウリです。
その操作を行うたびにタイムラグがあると本気で萎えます。
(あまりに重いので自動更新を一時停止したりして、これではtableauの良さを全く活かせません。)
いままでも提供しているデータソースを使ってVizを作ることはありました。
しかしそこまでパフォーマンスに問題を感じたことはありませんでした。
今回色々な切り口でビジュアライズしようとしたことにより、内容によってパフォーマンスに差が出ることがわかりました。
たとえばサンプルスーパーストアでいうと、カテゴリ別にデータをみているときは全然問題なかったのに、 顧客別に見ようとすると突然遅くなるといったような感じです。
パフォーマンスの低下は様々な要因があるので、一概にデータソースだけが問題というわけではありません。
しかし少なくともデータソース側でできる対応は可能な限りやっておくべきだと感じました。
パフォーマンス問題の解決案
- データソース作成後にパフォーマンスチェックを行う
- パフォーマンスに問題がある場合、原因によって改善策は色々な方法がある
- データソース提供側としては利用用途ごとにデータマート、データソースを用意することが一つの解決策
終わりに
以上、データソースを積極的に利用するようになったことで気づいたデータソースの問題点です。
いずれも地味なポイントですが、こういう土台をしっかり作ることでデータの活用が進みます。
IT業界では自社の製品やサービスを自分たちで使ってテスト・改善していくことを「ドッグフーディング」といいますが、まさにそれです。
提供しているデータソースを自分で使って今後も一つ一つ改善していきたいと思います。
salesforceの画面にTableauのビューを埋め込む方法
はじめに
Salesforceの画面にTableauのビューを埋め込むことができます。
見たいデータがSalesforceの中に存在しなくて困ることはないでしょうか?
当たり前ですが、SalesforceはSalesforceの中に保持しているデータしか表示することができません。
しかしSalesforceにはデータ容量の制限がありますし、データ連携のハードルはそこそこ高いです。
基幹システム系のデータや行動ログ系のデータなど、データ量が多かったりすると連携が行われていない場合も多いと思います。
そんなときに、わざわざ別のシステムの画面やTableau Serverを見に行かなくてもシームレスにSalesforceの画面からTableauの画面を表示できます。
たとえば私の所属する組織では、Salesforceの取引先のページに、その顧客の過去の売上推移を表示しています。 (売上データは量が多いのでSalesforceにデータ連携していません)
TableauであればSalesforceのレポートよりも柔軟かつリッチなビューを表示できるので、その意味でもTableauの埋込ビューの利点があります。
Tableau ServerやTableau Cloud(Online)を利用していることが前提にはなりますが、以下に手順や注意点などをまとめます。
手順
Lightning Web コンポーネントインストール
まずはTableau Lightning WebコンポーネントをAppExchangeからインストールします。
通常のAppExchangeのアプリと同様の手順です。
https://appexchangejp.salesforce.com/appxListingDetail?listingId=a0N3u00000OMuhjEAD
正常にインストールが完了するとLightning アプリケーションビルダーにコンポーネントが表示されます
Tableauビューを埋め込む
インストールが完了したら、次は画面に埋め込みます。
埋め込むビューですが、今回は事前に作成してtableau publicにアップしておいたこちらを使います
https://public.tableau.com/app/profile/atsushi.watanabe/viz/SF_16730673681450/DB1
tableau publicの画面から共有用のURLを取得します
保存して取引先の画面を表示してみます。
tableau publicのビューが表示されました。
ページの内容に応じたフィルター
一応画面の埋込自体はできました。 しかしSalesforceの取引先とTableauのフィルターがあっていません。
これを合わせます。
そのためにはSalesforceとTableauに共通のキーが必要です。
今回はサンプルスーパーストアのデータなので、そこに存在する顧客IDを利用します。
(業務上のデータであればすでに顧客を一意に識別するIDがすでにあるケースが多いと思います)
この顧客IDを取引先の取引先番号に仮で入れてみます
Tableau Lightning WebコンポーネントにTableau側のフィールド名とSalesforce側の項目名を指定する
これで設定を保存します。
そして実際に取引先画面を表示てみます。 (わかりやすいようにtableau側に顧客名表示しました)
このように取引先ごとにフィルターされたTableauビューが表示されます
その他ポイント
埋込の設定はこれで完了ですが、注意点を2つ紹介します。
①tableau server側はhttpsでの接続が必要
これはtableau埋め込みに限った話ではないですが、httpとhttpsが混在していると一般的にセキュリティ上の理由でエラーになります。
tableau cloud(online)であれば気にする必要がありませんが、ローカルネットワークにある組織内tableau serverだと、SSL化していない場合もあるかもしれないので、注意です。
②埋込ビューの高さが500以下だとビューがくずれる
これは私が個人的にはまった仕様?なのですが、Lightning Webコンポーネントの高さ(Height)が500以下だとレイアウトがくずれます。
例えばこういうワークシートを横に並べたダッシュボードを埋め込んでみます。
これで高さを500以下にするとビューがくずれてしまいます。 (今回実際閾値がどこにあるのか色々試してみましたが500がボーダーラインのようでした)
このような高さの制限があるので、Salesforceに埋め込む予定のダッシュボードは、500以上の高さで自然に表示されるレイアウトにするのがよさそうです。
終わりに
以上、salesforceの画面にtableauのビューを埋め込む方法でした。
今回は取引先レコードページへの埋込を例にしました。
その他にもユーザのレコードページにそのユーザが所有している取引先や商談の一覧を出すなども便利です。
SalesforceとTableauを両方使っている場合はこの連携による色々と可能性が広がります。
まだ未実施の方はぜひ試してみてください。
参考
バンプチャートで理解する表計算
バンプチャートとは
バンプチャートというグラフがあります。 縦軸に順位(ランキング)、横軸に時系列をおいたグラフです。
ランキングの推移を見るときに便利です。
この記事ではこのバンプチャートを作りながら、tableauにおける表計算について解説します。
バンプチャート作成手順
まずは大まかなバンプチャートの作成手順を示します。
(1)列にオーダー日(年)、行に売上をドロップし折れ線グラフを作る
(2)カテゴリを色にドロップし折れ線を3つに分ける
(3)売上を簡易表計算からランクを選択
(4)「次を使用して計算:」から「カテゴリ」を選択
(5)売上(ランク)をコピーして、1つの目のマークを円にする
(6)2重軸にする
(7)ランクをラベルに表示する(位置が円の中に来るように調整)
(8)軸を同期して反転する
はい。これで完成です。
表計算について
私がこの手順の中で最初よくわからなかったのが
(4)「次を使用して計算:」から「カテゴリ」を選択
です。 なぜこの操作が必要なのか、この操作はどういう意味を持つのかを考えてみます。
あらためてこの操作の前後の見た目を確認します。
まずは最初にランクを選択したときに発生する挙動
ぐちゃぐちゃしてよく分からない線になっています。
これをカテゴリを選択するときれいに表示されます。
何が変わったのでしょうか。
バンプチャートはディメンションが2種類あるのがポイントです。
年(オーダー日)とカテゴリの2種類。
年(オーダー日)はこの4つです
- 2018
- 2019
- 2020
- 2021
カテゴリはこの3つです
- 家具
- 家電
- 事務用品
組み合わせは4x3で12個になります。
この中でどの軸でランクをつけるのかをtableauに教えてあげなければいけません。
- カテゴリのランキングなのか
- 年(オーダー日)のランキングなのか、
- はたまたカテゴリと年(オーダー日)の全部の要素の中でランク付けするのか
それを指定するのが「次を使用して計算」です。
ディメンションが1つであればあまり気にする必要はありません。 たとえばカテゴリしか指定がなかったら、 家電が1位、家具が2位~のようにカテゴリのランキングだということは明確です。 (しいていえば売上が高い順か低い順かぐらいでしょうか)
「次を使用して計算」による動きの変化
tableauには表計算アシスタントという機能があるので、それで違いを見てみましょう
年(オーダー日)で計算した場合のイメージ
ランキング | 年 |
---|---|
1位 | 2021年 |
2位 | 2019年 |
3位 | 2020年 |
4位 | 2018年 |
見たいのはこのランキングじゃないですね。
カテゴリで計算した場合のイメージ
ランキング | カテゴリ |
---|---|
1位 | 家電 |
2位 | 家具 |
3位 | 事務用品 |
見たいのはこのランキングですね。
このようにどのディメンションごとにランキングを出すのかを指定するのかが「次を使用して計算」です。
index()を使った例
今まではランキングでしたが、今度はindex()関数を使って確認してみます。
要はindex()とは、表に1から順番に番号を振ってくれる関数です。
年(オーダー日)を列に、カテゴリを行に、index()をマークラベルに配置します
このように指定するディメンションによって番号の振られ方が変わってきます。
カテゴリを変えると赤くなる理由
今回はカテゴリでランキングを作りましたが、異なる切り口でバンプチャートを作り直したくなることもあると思います。
試しにカテゴリをサブカテゴリに変更してみましょう。
するとエラーが発生してしまいました。
カテゴリ単位のバンプチャートをサブカテゴリ単位にしたいだけなのに、なぜ合計(売上)ランクがエラーになるのでしょう
そうです。ランクの計算に「カテゴリ」を使っているからです。
これらの表計算のディメンションもすべてカテゴリからサブカテゴリに変更してあげる必要があります。
修正したら無事にサブカテゴリのバンプチャートになりました。
【表(横)や表(下)について】 今回あえて省きましたが、ディメンションでの計算ではなく、 表計算では「表(横)」や「表(下)」なども選択することができます。 たとえば「表(下)」は文字通り表を下方向に向けて計算します。 「表(下)」と「カテゴリ」はこの例だと計算順番は同じです。 ただし表(下)はディメンションに依存していないので、 カテゴリをサブカテゴリに変更してもエラーになりません。
終わりに
表計算はtableauの中でもややこしい分野ですが、実際にバンプチャートというグラフを作り試行錯誤することで理解が深まりました。
今回の記事が表計算について悩んでいる方の助けになれば幸いです。
アクションとリンクで項目の初期値を設定する方法
アクションやリンクで新規作成画面を開いたときに開いた状態で初期値(デフォルト値)を最初からセットしておく方法
たとえば取引先から商談を作成するときに、商談名の初期値をセットするときの例
初期値は例として
「年月日」と「取引先名」に「商談」という固定文字をつけたもの
とします
アクションを使う場合
商談作成アクションの定義済み項目値を設定する
数式の値
TEXT(today()) & Account.Name & "商談"
商談作成アクション押下時
カスタムリンクを使用する場合
リンクURLの値
/lightning/o/Opportunity/new?defaultFieldValues=Name={!TEXT(today())&Account.Name&"商談"}
defaultFieldValuesを使うことでデフォルト値をセットします
商談作成リンク押下時
このように商談名にデフォルト値をセットすることが可能です