Einstein Analytics:データ作成の勘所の話
実は、これまで私、Einstein Analyticsの一部の機能しか使ってこなかったのですが、先日EAチームが来社したのをきっかけに、ちゃんとフルスペック使い倒してやろうという気になったので、勉強しつつ実装しています。
Terrence(左)とChris(右)と一緒に
一番簡単な使い方はなにかというと
Salesforce側で1オブジェクトにできる限りのデータをまとめちゃうことです。そうすれば、あとから結合したりする必要もないので、加工も簡単。
ただそれしか知らないと、複数ソースからのデータを使うことができないのです。リバネスの場合は、Salesforceに殆どのデータがのっているけれど、実際はそうではないパターンのほうが多いでしょう。その場合は、コネクタでデータソースを引っ張ってきて、その後にキーでマッチングしたデータソースを使って処理をすることになるはずです。
Salesforceにデータが乗っていても、複数のオブジェクトにまたがっていたりすると、データの前処理が必要になります。そこで活用されるのが、レシピ機能です。
Einstein Analytics レシピとはなにか
レシピは、特定のソースデータセットまたは接続済みデータに対して実行される一連の保存済みの変換仕様 (ステップ) です。レシピを使用して変換を実行します。たとえば、複数のデータセットまたは接続済みオブジェクトのデータを結合したり、データをバケット化したり、数式項目を追加したり、項目値を変更してデータを整理したりします。項目の削除や不要な行の絞り込みを行うことができます。
端的に言うとこういうイメージです
・沢山のデータが入ったExcelのシートを加工する
・複数のシートにまたがったExcelのデータをvlookup等で参照する
・使う前に、少しデータの形式を変換したいので数式で加工する
今回の最終成果物について
最終成果物はこちら↓。事業部毎に、事業計画と、それに対する達成度を商談の売上予測分類毎に分けて表示するというイメージのテーブルです。事業部名でグルーピングされており、各カラムのデータと、数式カラムを追加して、欲しい数値を得るような設計になっています。
上部にあるボタンは、左から3グループあり
・事業年度
・事業部名(複数選択)
・売上予測分類名(複数選択)
となっています。ダッシュボードの中には上の3つに、下のテーブルを加えた4つのレンズが配置されており、それぞれが一つのデータソースからできているので連動して動きます。
レシピを使って、複数のデータを統合する
一つのデータセットにしたいのに、別々のデータに別れているというものを統合するならレシピ機能が有効です。僕が勉強のために作ったデータは以下の2つです。
・すべての商談
・事業計画
すべての商談は、SalesforceのOpportunityデータをそのまま持ってきたものです。事業計画は、事業部毎の各月の目標金額が入ったものと考えてください。
このままでは統合ができないので、マッチングするためのキーを作る必要があります。
事業計画のデータセットをクリックして、レシピ名を任意に設定して、加工を始めます。
事業計画のカラムには以下の3つのカラムがすでに存在しています。
事業部名
会計年度
目標金額
商談とのマッチングのキーは会計年度+事業部名にすることに決めました。
まず、会計年度は数値項目だったので、ディメンションに変換しています。その次に、year_devという数式項目を作り、concat(会計年度,事業部名)という数式を追加しました。これで、マッチング先のデータは完成。レシピを保存したら、データセットを作成ボタンを押して、データセットを作ります。
すべての商談テーブルにデータを追加する
商談側にもyear_devなんてものは存在しないので同様にマッチングするためのキーを作成したあとに、データの追加をしてみる。
データの追加については、5種類のやり方がある。知ってる人は知っていると思いますが、知らないと微妙なニュアンスの違いで正しい結果が得られないので注意。
今回は、商談に事業計画の数字をくっつけたかったのでルックアップを選択した。
ルックアップとはなにか
例えばすべての商談がこんな感じだったとする
商談名,完了予定日,取引先ID,事業部名,金額,year_dev
商談A,2020-4-1,xxxxx,事業部A,4000000,2020_A
商談B,2020-8-1,xxxxx,事業部A,100000,2020_A
商談C,2020-4-10,xxxxx,事業部B,300000,2020_B
商談D,2020-5-1,xxxxx,事業部A,1500000,2020_B
商談E,2020-9-1,xxxxx,事業部C,8800000,2020_C
事業計画テーブルはこうなっているとする
year_dev,目標金額
2020_A,1234554321
2020_B,5432112345
2020_C,999999999
これをルックアップで統合するとこうなる
商談名,完了予定日,取引先ID,事業部名,金額,year_dev,目標金額
商談A,2020-4-1,xxxxx,事業部A,4000000,2020_A,1234554321
商談B,2020-8-1,xxxxx,事業部A,100000,2020_A,1234554321
商談C,2020-4-10,xxxxx,事業部B,300000,2020_B,5432112345
商談D,2020-5-1,xxxxx,事業部A,1500000,2020_B,5432112345
商談E,2020-9-1,xxxxx,事業部C,8800000,2020_C,999999999
簡単!
合計を自動的に出してくれるのが便利なのだが...
こちら比較的新しい機能のようですが、テーブルに合計と小計を含められるようになっています。レンズの編集画面の右上のボタンから設定します。
これをやるには設定画面から設定をする必要があるので、こちらを読んで有効化しましょう。
ただ、こちらちょっと癖があります。合計って書いてあるくせに、カラムが値の平均値を表示していた場合は、合計欄も平均値になってしまいます。いやいや、そこは合計値だしてくれよと思うじゃないですか…。平均値なんですね。なぜなんだよEinstein Analytics!!
今回作ったテーブルでは、目標金額が全レコードに入ってます。それを平均値として出すことで、テーブルに正しい値が表示されるという仕組みです。ただ、それだと合計欄が平均値になってしまうので使えないんですよね。
そこの仕様は変えてほしいなぁ😓
SAQLを書けばなんとかなるようなのですが、メンテナンスが大変になるのであんまりおすすめできない気がする。仕様変更を願うしかないなぁ。
ここもなんとかして欲しい
レンズを編集してクエリモードにしたときに、それまでに設定していた情報が抜け落ちてしまうのです。せめてその前に実装したままのSAQLを書き出して欲しい!せっかく設定したラベルが消えちゃったりと、元の見た目に戻すところから始めないといけないのはつらすぎるよ😥
データ作成の勘所
今回、ここまでくるまでに何度もデータセットを作り直しました。最初は、欲しいデータを確実に出せるように、フィルタかけまくったデータセットにしました。しかし、そうするとダッシュボード上で、連動項目によるフィルタが機能しません。
そういった訳でレシピ作成時にフィルタかけてしまうこともできるのですが、それはおすすめしません。後でもう少し大きなデータで見てみたいと言うときに対応ができなくなってしまう。レシピはあくまでもデータの加工にとどめておいたほうが良いのではないかというのが、今の所のわたしの結論。
上記のようなテーブルは本当はどう作るべきなのか
そもそもデータセットとしていびつでしょというのが、欲しい物が得られない理由なのですが、ではどのようにデータを用意すればよかったのかと言われると今の所解決策が思い浮かびません。
Einstein Analyticsな人からのアドバイスをお待ちしたいと思います。
月末にはEinstein Analyticsのアドバンスの講習受けてくるので、そこで解決できるかもしれないなと淡く期待を抱いています。
Next stepは…
SAQLだろうな多分。文法さえ覚えてしまえば、使いこなせるはず。
noteにはこれまでの経験を綴っていこうかと思います。サポートによって思い出すモチベーションが上がるかもしれない。いや、上がるはずです。