Dynamics CRM 2011 カスタムレポート その 1 - フィルター化されたビュー vs. FetchXML

みなさま、あけましておめでとうございます。
今年も Microsoft Dynamics CRM および弊社サポートをよろしくお願いいたします。

年末年始はどのように過ごされましたでしょうか。私はずっと Windows Server 2012 の
検証を行っていました。素晴らしい新機能が満載ですので、是非お試しください。 

2013年最初の記事は北米 PFE ブログよりレポートに関するトピックをお届けします。
レポート開発ではよく話題になる、フィルター化されたビューと FetchXML の比較です。

元記事: Custom Reporting in Microsoft Dynamics CRM - Fetch vs. Filtered Views

===========================================================
Microsoft Dynamics CRM 2011 を利用していて、レポートウィザードや高度な検索、
また既存のレポートでは要件を満たせない為に独自にレポート開発が必要な場合が
良くあります。今後カスタムレポートの選択肢や技術的な問題の解決に関して情報を
提供する予定であり、今回はその第 1 回となります。

Microsoft Dynamics CRM 2011 で利用できるカスタムレポートには、2  種類があります。
1 つは SQL Server 上のフィルター化されたビューを直接クエリすることでデータを取得
する方法と、もう 1 つは FetchXML を利用して、Web サービス経由でデータを取得する
方法です。いずれも Business Intelligence Developer Studio を利用した開発が可能です。

今回の記事ではこれらの 2 つの選択肢について、それぞれの違を取りあげます。

クエリの種類

FetchXML

FetchXML は Microsoft Dynamics CRM でサポートされるクエリ言語です。T-SQL の機能
に似た内容をサポートします。FetchXML はユーザービューやシステムビューの保存に
利用されており、高度な検索の実行でも利用されます。FetchXML を利用することで、
CRM のセキュリティに準じた結果セットを取得することができます。

また高度な検索で利用したクエリを FetchXML として取得できます。

FetchXML を利用したレポートを開発した場合、レポート実行時に Microsoft Dynamics
CRM の Web サービスに対してクエリが実行されます。SSL を利用することでクエリや
結果セットを暗号化することができます。Microsoft Dynamics CRM Online では、これが
唯一の選択肢となります。

フィルター化されたビュー

Microsoft Dynamics CRM データベースを直接クエリする場合、フィルター化されたビュー
が利用できます。このビューを通してクエリを実行した場合、CRM セキュリティに準じた
結果セットを取得できます。ただしこちらのクエリを利用したカスタムレポートは、設置型
のみでサポートされるため、オンライン環境へ移行することができません。

展開の種類

設置型 (On-Premise)

設置型を利用している場合、より柔軟で複雑なクエリが記述できることから、フィルター化
されたビューを利用したカスタムレポートを利用することが多くなります。しかしその一方で
パフォーマンスの考慮より FetchXML を利用する選択肢もあります。FetchXML を利用した
場合、セキュリティは Microsoft Dynamics CRM サーバーで処理され、データベースへの
クエリではフィルター化されたビューを利用しません。

もし後で述べる FetchXML の制限範囲内でレポートを作成できる場合は、FetchXML は
有力な選択肢となります。

オンライン

オンライン環境では直接データベースにアクセスできないため、FetchXML が唯一の
選択肢となります。開発者のメリットとしては、高度な検索から FetchXML が取得できる
ことで、1 からクエリを記述する手間が省けることと、パフォーマンスがフィルター化された
ビューより向上することが期待できる点です。

以下に FetchXML の制限をあげます。

・ FetchXML では Right Outer 結合および Full Outer 結合をサポートしません。
・ FetchXML ではサブクエリで Exist/In 条件をサポートしません。
・ 取得できるデータは上限が 5000 件となります。
・ UNION SELECT をサポートしません。
・GroupBy および SUM クエリを明示的に指定できません。取得したレコードを
集約することのみサポートされます。
・ 結合できるエンティティ数に上限があります。
・ FetchXML は Microsoft Dynamics CRM データソースのみサポートします。
・ FetchXML は Microsoft Dynamics CRM 固有の技術であるため、学習が必要です。

比較

以下のテーブルに両者の比較をまとめています。

  フィルター化されたビュー FetchXML
開発の エクスペリエンス Business Developer Intelligence Studio、またはレポートビルダーを利用した開発 Business Developer Intelligence Studio を利用した開発。別途モジュールの取得が必要
スキルセット T-SQL の知識およびレポート開発の経験 FetchXML の知識およびサポート開発の経験
柔軟性 複雑なクエリの実行が可能であり、SSRS の機能をフルに利用できる FetchXML の制限ないでのクエリのみ記述が可能
データクエリ フィルター化されたビューに対する T-SQL クエリ CRM Web サービスを利用したクエリ
レポートの実行 スケジューリングや電子メール通知等が利用可能 リアルタイム実行のみサポート
オンラインサポート サポートされない サポートされる

===========================================================

こちらの記事はシリーズということですので、オリジナル記事が投稿され
次第、随時日本語化していきたいと思います。

- Dynamics CRM サポート 中村 憲一郎