SANSAN名刺データAPIを元に誰と誰が繋がっているのか? を可視化するネットワーク図を作成してみる(CData ODBC REST Driver + Power BI)
最近とてもCMが印象的なSANSAN
社長が持っている名刺にキーマンが含まれているにもかかわらず、その情報を部下が持っていないばかりに、商談の機会を逃してしまうというものでした。
社内での顧客管理の大切さを感じながらも、コメディタッチなCMで面白いのがいいですね。
そんな繋がりを、SANSANデータを元に可視化できたら面白いかも!? と思いSANSANから提供されているAPIを利用して、Network図を作ってみました!
こんな可視化をしてみた
構成イメージとしては以下のような感じです。
人対人だと、対会社で動いている繋がりが見えづらいので、会社情報を中心に、Graph DBのような形でデータをまとめてしまいます。
そして、Power BIのNetwork Network Navigator Chartを使って、以下のようにビジュアライズしました!
SANSAN APIについて
SANSANは名刺管理機能をメインとしたSaaS型クラウドアプリケーションです。
詳しくは以下のURLからどうぞ。
SANSAN APIでは、現在以下の7種類のエンドポイントが提供されています。どれも名刺に関連したエンドポイントですね。今回は名刺Set取得の条件指定をベースにAPIを利用していますが、今回のネットワーク図を作るだけであれば、特に意識する必要はありません。
- 名刺Set取得(期間指定)
- 名刺Set取得(条件指定)
- 名刺取得
- 名刺画像取得
- 名刺のタグSet取得
- 人物取得
- タグSet取得
なお、ドキュメントは以下のURLで公開されています。
実現イメージ
今回はAPIの連係対象BIツールとして、Power BIを使用しますが、各APIは単純にBIツールに接続することはできません。 各BIツールがどのようにWeb API側へリクエストを投げるべきかの判断材料やメタデータの情報が無いためです。
そこで、CData REST ODBC Driverを用いて、このボトルネックを解決します。
まず、各BIツール(PowerBI、QlikSence、Tableau)からはODBCインタフェースでSQL(Select文)をCData REST ODBC Driverに向けて発行してもらいます。そのリクエストを受け取った、CData ODBC REST Driverは、SANSANのWebAPIのエンドポイントに対して、SQL文を解釈し、HTTPリクエスト形式に変換して、Getメソッドを発行します。
リクエスト後、Jsonフォーマットで返ってきたデータセットはCData REST ODBC DriverがODBCインタフェースのResultsetに変換してBIツールに返します。
これにより、BIツールからアドホックにSQLによるリクエストがあったタイミングで最新のデータをSANSANから取得することが可能です。
前提条件
本記事では以下のサービスや製品を使用しています。
- SANSANアカウント
- CData REST ODBC Driver ※30日間の評価版あり
- PowerBI Desktop ※無料トライアル版あり
手順
SANSAN Web API 利用準備
まず、SANSANへWeb APIアクセスするにあたって必要となるAPIキーを取得します。
SANSANログイン画面へ移動し、ログインを行います。
https://ap.sansan.com/v/SSLogin.aspx
TOPページに表示されている「外部サービス連携」をクリックし
「API」タブから対象ユーザーを選択し「発行」をクリックします。
すると、以下のようにAPI Keyが発行されます。このAPI Keyを後ほど使用するので、控えておいてください。
以上でSANSAN側の準備は完了です。
REST データ処理用 RSDファイルの作成
続いて、SANSANのWeb APIをCData ODBC REST DeiverがSQLとして解釈できるように設定ファイルを作成します。
サンプルとしてSANSANの名刺データ (bizcard)のデータを取得するための設定ファイルを作成していますので、以下のGitHubから保存して、利用してみてください。
保存先フォルダは後ほど使用するので「C:\CData_REST\SANSAN」といった書き込み可能な任意のフォルダに配置してください。
CData ODBC REST Driverのインストール
PowerBIとSANSANのAPIを繋ぐために必要となるCData ODBC REST Driverをインストールします。
CData REST ODBC Driverの30日間の評価版をダウンロードします。ダウンロードの際には、Emailの登録が必要となります。
ダウンロードしたsetup.exeファイルをBIツールがインストールされているマシンにインストールします。インストールウィザードに従い、EULAを確認した上でインストールを完了します。
※途中、ライセンスサーバーへのオンラインアクティベーションが行われるためネットワーク環境に接続されている必要があります。
インストールが完了すると、ODBCのDSN設定のウィンドウが立ち上がります。
以下の項目をセットし、保存します。
Schema
- Location : 先程RSDファイルを配置したフォルダパス(例:C:\CData_REST\SANSAN)
その他
- Other : ApiKey=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX;range=all;
OtherのApiKeyには、先程取得したSANSANのAPIキーを入力してください。
以上で、CData ODBC REST Driverの準備は完了です。
PowerBIでの接続確認
それでは、実際にPowerBIと接続して、データの取得処理を実施してみましょう。
PowerBI Desktopを起動して、「データを取得」をクリックします。
データ接続先一覧の中から「ODBC」を選択し、「接続」をクリックします。
データソース名は先程登録したSANSANを選択し、「詳細設定オプション」のSQLステートメントに以下のクエリを入力します。
このSQLでは、まずどの「社内ユーザー」がどの「取引先」と名刺交換したか? という情報を持ってきます。
/* 社内ユーザーデータと名刺交換先企業データ取得クエリ。このSampleでは1000件リミットをかけています。 */ SELECT owner_id as id, owner_name as user, companyName, companyId FROM [REST].[bizcard] LIMIT 1000
クエリ結果のデータを確認し、読み込みを行います。
上記データ取得後、さらにデータ取得を行います。先程と同様の手順でSANSANデータソースへ接続し
今度は、取引先担当者がどの取引先に所属しているか? の情報を以下のクエリで取得します。
/* 名刺交換先企業データとその担当者データ取得クエリ。このSampleでは1000件リミットをかけています。 */ SELECT id, CONCAT(lastName,' ',firstName) as user, companyName,companyId FROM [REST].[bizcard] LIMIT 1000
それぞれのデータ取得が完了したら、それぞれのクエリ結果をマージします。
「クエリを編集」からPower Query エディター画面を表示し
「クエリの追加」→「クエリを新規クエリとして追加」をクリックします。
ここで先程まで取得した2つのクエリをそれぞれ選択し、「OK」をクリック
これで、元データとなるクエリの完成です。「適用して閉じる」をクリックして元の画面に戻ります。
Network Navigator を使用したビジュアライズ
Power BIには、初期状態でNetwork Navigator チャートが無いので、Market Placeからダウンロードしてくる必要があります。
Power BIのグラフツールが配置してある場所から「Market Place」に移動します。
「Market Place」から「Network Navigator Chart」を検索し、「追加」をクリック
あとは、追加されたNetwork Navigator Chartを配置し
「Source Node」と「Target Node」にそれぞれ、「User」と「CompanyName」を設定します。
あとはラベルやフィルター用のレコード一覧を表示してあげると、いい感じになります。
実際に使用するときは、会社名や社内営業担当者同士で絞り込みを行って使用するかなと思います。
終わりに
いかがでしたでしょうか。
NoSQLのGraphDB的なことができて、個人的に結構面白かったです。もうちょっと使いやすくする工夫が必要だなぁとは思っていますので、今後いろいろと改良していきたいところですねぇ。
あと、SANSANのAPI制限がなかなかつらいので、大量のデータを一気に取得したい場合は、CData Excel-Addinで少しづつ取得したほうがいいかもです。
https://www.cdata.com/jp/drivers/rest/excel/www.cdata.com
なお、ODBC Driverの場合、ローカルのRDBにレプリケートする機能もあるので、それを使って一度ローカルにレプリケートしてからBIに取り込むのもいいかもです。その辺はまた今度紹介したいと思います。
あと、この記事を元に.NET ラボ でお話させていただきました。