こんにちは。CData Software Japan リードエンジニアの杉本です。
前回の記事ではTeamSpirit のデータに対して、CData Driver からアクセスする方法を紹介しました。
https://www.cdata.com/jp/blog/teamspirit-odbc-salesforce
今回はデータパイプラインツールであるCData Sync からTeamSpirit にアクセスし、各種データを取得、RDBやDWHにレプリケーションする方法を紹介したいと思います。
https://www.cdata.com/jp/sync/
TeamSpirit とは?
TeamSpirit は、株式会社チームスピリットが提供する、勤怠管理・工数管理・経費精算などの機能を融合したクラウドサービスです。
https://www.teamspirit.com/ja-jp/
TeamSpirit は、Salesforce プラットフォーム上で稼働するアプリケーションとして提供されています。さまざまな勤務形態に柔軟・高セキュリティで対応することができ、「組織を1歩強くするための機能」が豊富に提供されています。充実したレポート機能もその1つです。
今回はこのTeamSpirit のデータをMySQL にレプリケーションしてみます。
なお、CData Sync ではMySQL 以外にも多様なRDB・DWH にデータをレプリケーションすることが可能です。
https://www.cdata.com/jp/sync/connections/#destinations
対象とするデータ
今回レプリケーションの対象とするデータは「TeamSpirit 3.0(勤怠)レポート」の「月別勤怠一覧」で取得できる勤怠データです。
TeamSpirit はSalesforce プラットフォーム上に構成されており、各種カスタムオブジェクトでデータを管理していますが、粒度が細かいため分析用途には向きません。そのため、このレポートを通じてデータを取得します。
なお、予めレポートのIDをURLから取得しておきましょう。
CData Sync からの接続
それではCData Sync からTeamSpirit への接続を追加します。
「接続」タブから「Salesforce」を選択し
Auth Scheme が「OAuth」の状態で「次に接続 Salesforce」をクリックします。これでTeamSpirit へのログインが完了するので、設定を保存します。
次に同期先を追加します。今回は以下のようなLocal にあるMySQL に接続しました。
レポートのスキーマの追加
接続が完了したら、TeamSpirit のレポートのデータが取得できるように、カスタムスキーマというものを定義します。
先程のTeamSpirit の接続画面に移動し、「カスタムスキーマ」→「スキーマを追加」をクリックし
「CreateReportScehma」を選択して「次」へ移動します。
任意の「ReportName」と予め取得しておいた「ReportId」を指定して「作成」をクリックします。
これで対象のレポートのデータが取得できるようになります。
ジョブの作成
それでは実際にデータのレプリケーションを実行してみましょう。
ジョブのタブから「+ジョブを作成」をクリックし
先程作成したTeamSpirit とMySQLのコネクションをそれぞれ選択します。
タスクの追加
そして、先程定義したレポートをタスクとして追加します。
以下のように「月別勤怠一覧」のレポートがタスクとして追加できるようになっています。
これを追加して、プレビューを確認してみると、以下のようにデータが確認できます。
ジョブを実行する
最後にジョブを実行します。通常は以下のようにスケジュールを組んで実行しますが、今回は手動で実行しました。
対象のタスクを選択して「実行」ボタンをクリックしましょう。
以下のようにレプリケーションが成功すればOKです。
MySQL を確認してみると正常にレポートのデータ、各カラムがレプリケーションされました。
Tips:レポートをフィルターする時の注意点
Salesforce のレポートはその仕様上2000件以上のデータを取得することができません。
そのためフィルター条件を駆使して取得するデータを絞り込むことを検討する必要があります。
ただ注意しなければいけないのはそのフィルターの指定方法です。例えばCData Sync では以下のようにフィルタの指定ができますが、このフィルタの指定だとメモリ上でフィルターがかかる方式になっており、適切にSalesforce 側へフィルターが効きません(件数が少ない場合は正常に動いているように見えるのでより注意が必要です)
そこで利用するのが「ReportFilter」という疑似的に存在しているカラムです。ここにSalesforce のReportで有効はWHERE条件を指定することで、取得結果をSalesforce 上で絞り込むことが可能です。
例えば「月別勤怠一覧」レポートの「勤怠月度」の項目で絞り込みたい場合はカスタムクエリを用いて以下のように指定します。ReportFilterの中ではAPIの列名(teamspirit__AtkEmpMonth__c.teamspirit__YearMonthS__c)を用いて記述しています。
REPLICATE [月別勤怠一覧] SELECT * FROM [月別勤怠一覧] WHERE [ReportFilter] = 'WHERE teamspirit__AtkEmpMonth__c.teamspirit__YearMonthS__c = ''2022/09'''
もし動的に1ヶ月前のレポートを取得したい場合は、以下のように記述すると良いでしょう。
REPLICATE [月別勤怠一覧] SELECT * FROM [月別勤怠一覧] WHERE ReportFilter = CONCAT('WHERE teamspirit__AtkEmpMonth__c.teamspirit__YearMonthS__c = ''',FORMAT(DATEADD('mm',-1,CURRENT_DATE()),'yyyy/MM'),'''');
APIの列名はちょっと調べるのに癖がありますが、一番簡単な方法は作成したレポートの定義ファイル(.rsd)を参照する方法です。
レポートの定義ファイルは接続設定のLocation のフォルダに格納されており、
以下のようなXMLファイルになっています。各カラムが「attr」というプロパティで定義されていて、この「other:internalname」に指定されている文字列がAPI名になります。
おわりに
このようにCData Sync を利用することでTeamSpirit の各種勤怠などのデータを簡単にRDB やDWH にレプリケーションし分析、活用を行うことができます。
30日間のトライアルもあるので、是非自社のTeamSpirit に繋いでお試しください。
また、トライアルを進める中で気になった点や困った点があればテクニカルサポートまでお気軽にお問い合わせください。
https://www.cdata.com/jp/support/submit.aspx
関連コンテンツ