SFA管理者の日常

salesforceとtableau関連の記録

データエンジニアが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の中に存在しなくて困ることはないでしょうか?

当たり前ですが、SalesforceSalesforceの中に保持しているデータしか表示することができません。

しかし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 Visualizationが表示されている

Tableauビューを埋め込む

インストールが完了したら、次は画面に埋め込みます。

試しに画面上部にドラッグ&ドロップ

デフォルトでtableau publicのサンプルビューが表示される

埋め込むビューですが、今回は事前に作成してtableau publicにアップしておいたこちらを使います

https://public.tableau.com/app/profile/atsushi.watanabe/viz/SF_16730673681450/DB1

Salesforce埋込用

tableau publicの画面から共有用のURLを取得します

画面右上のShareをクリック

共有用のLinkをコピー

コピーした共有用LinkをSalesforce側のURL欄に貼り付け

保存して取引先の画面を表示してみます。

これで埋込自体は完成です

tableau publicのビューが表示されました。

ページの内容に応じたフィルター

一応画面の埋込自体はできました。 しかしSalesforceの取引先とTableauのフィルターがあっていません。

これを合わせます。

そのためにはSalesforceとTableauに共通のキーが必要です。

今回はサンプルスーパーストアのデータなので、そこに存在する顧客IDを利用します。

(業務上のデータであればすでに顧客を一意に識別するIDがすでにあるケースが多いと思います)

顧客名と顧客ID

この顧客IDを取引先の取引先番号に仮で入れてみます

サンプルスーパーストアの顧客IDを取引先番号へ

確認用の2つ目

Tableau Lightning WebコンポーネントにTableau側のフィールド名とSalesforce側の項目名を指定する

顧客とIdの間にスペースがあるので注意

これで設定を保存します。

そして実際に取引先画面を表示てみます。 (わかりやすいようにtableau側に顧客名表示しました)

阿久さん

綾部さん

このように取引先ごとにフィルターされたTableauビューが表示されます

その他ポイント

埋込の設定はこれで完了ですが、注意点を2つ紹介します。

①tableau server側はhttpsでの接続が必要

httpsでないとNGというエラー

これはtableau埋め込みに限った話ではないですが、httpとhttpsが混在していると一般的にセキュリティ上の理由でエラーになります。

tableau cloud(online)であれば気にする必要がありませんが、ローカルネットワークにある組織内tableau serverだと、SSL化していない場合もあるかもしれないので、注意です。

②埋込ビューの高さが500以下だとビューがくずれる

これは私が個人的にはまった仕様?なのですが、Lightning Webコンポーネントの高さ(Height)が500以下だとレイアウトがくずれます。

例えばこういうワークシートを横に並べたダッシュボードを埋め込んでみます。

わかりやすいように枠線で囲んでいます

これで高さを500以下にするとビューがくずれてしまいます。 (今回実際閾値がどこにあるのか色々試してみましたが500がボーダーラインのようでした)

500にしてみる

こういう風に縦に並んでしまいます

501にしてみる

501以上なら正しいレイアウトで表示されます

このような高さの制限があるので、Salesforceに埋め込む予定のダッシュボードは、500以上の高さで自然に表示されるレイアウトにするのがよさそうです。

終わりに

以上、salesforceの画面にtableauのビューを埋め込む方法でした。

今回は取引先レコードページへの埋込を例にしました。

その他にもユーザのレコードページにそのユーザが所有している取引先や商談の一覧を出すなども便利です。

SalesforceとTableauを両方使っている場合はこの連携による色々と可能性が広がります。

まだ未実施の方はぜひ試してみてください。

参考

help.tableau.com

バンプチャートで理解する表計算

バンプチャートとは

バンプチャートというグラフがあります。 縦軸に順位(ランキング)、横軸に時系列をおいたグラフです。

カテゴリと年(オーダー日)の売上バンプチャート

ランキングの推移を見るときに便利です。

この記事ではこのバンプチャートを作りながら、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()とは

表計算関数 - Tableau

要はindex()とは、表に1から順番に番号を振ってくれる関数です。

年(オーダー日)を列に、カテゴリを行に、index()をマークラベルに配置します

計算に年(オーダー日)を選んだ場合

計算にカテゴリを選んだ場合

計算に年(オーダー日)とカテゴリ両方選んだ場合

このように指定するディメンションによって番号の振られ方が変わってきます。

カテゴリを変えると赤くなる理由

今回はカテゴリでランキングを作りましたが、異なる切り口でバンプチャートを作り直したくなることもあると思います。

試しにカテゴリをサブカテゴリに変更してみましょう。

サブカテゴリをマークの色にドロップ

するとエラーが発生してしまいました。

赤いところがエラー

カテゴリ単位のバンプチャートをサブカテゴリ単位にしたいだけなのに、なぜ合計(売上)ランクがエラーになるのでしょう

そうです。ランクの計算に「カテゴリ」を使っているからです。

カテゴリの文字が赤くなっている

これらの表計算のディメンションもすべてカテゴリからサブカテゴリに変更してあげる必要があります。

カテゴリのチェックをサブカテゴリに変更

修正したら無事にサブカテゴリのバンプチャートになりました。

サブカテゴリ多いので事務用品カテゴリに絞っています

【表(横)や表(下)について】
今回あえて省きましたが、ディメンションでの計算ではなく、
表計算では「表(横)」や「表(下)」なども選択することができます。
たとえば「表(下)」は文字通り表を下方向に向けて計算します。

「表(下)」と「カテゴリ」はこの例だと計算順番は同じです。
ただし表(下)はディメンションに依存していないので、
カテゴリをサブカテゴリに変更してもエラーになりません。

終わりに

以上、バンプチャートで理解する表計算でした。

表計算はtableauの中でもややこしい分野ですが、実際にバンプチャートというグラフを作り試行錯誤することで理解が深まりました。

今回の記事が表計算について悩んでいる方の助けになれば幸いです。

アクションとリンクで項目の初期値を設定する方法

アクションやリンクで新規作成画面を開いたときに開いた状態で初期値(デフォルト値)を最初からセットしておく方法

たとえば取引先から商談を作成するときに、商談名の初期値をセットするときの例

初期値は例として

「年月日」と「取引先名」に「商談」という固定文字をつけたもの

とします

アクションを使う場合

商談作成アクションの定義済み項目値を設定する

数式の値

TEXT(today()) & Account.Name & "商談"

商談作成アクション押下時

カスタムリンクを使用する場合

リンクURLの値

/lightning/o/Opportunity/new?defaultFieldValues=Name={!TEXT(today())&Account.Name&"商談"}

defaultFieldValuesを使うことでデフォルト値をセットします

商談作成リンク押下時

このように商談名にデフォルト値をセットすることが可能です

フローでエラー発生時にエラーの内容を確認する方法

設定画面

一時停止中の失敗したフローインタビュー

すべての失敗したフローインタビュー

 

から確認可能です。

 

すべての失敗したフローインタビュー

 

今まではAPEXエラーメールの送信先を指定してメールで確認するしかないと思っていましたが、画面から確認可能でした

 

上記画面にはエラーのフローはありませんが、実際エラーとなったフローがある場合はどこでエラーになったのかのデバッグログも表示されます。

エラー調査に有効です。