MSCRM中報表開發一:創建基於SQL報表


1.       新建報表項目。打開SQL Server Business Intelligence Development Studio,點擊 文件 > 新建 > 項目,項目類型選擇 商業智能項目 中的 報表服務器項目,為該項目命個名字。

2.       添加報表,我這里命名為 OppSQLReport.rdl 。

        3.  添加數據源。類型要選擇 Microsoft SQL Server,點擊連接字符串旁邊的 編輯 按鈕,在彈出的連接屬性對話框中,在服務器名稱中輸入SQL Server所在的服務器名稱,登錄到服務器使用默認的 使用Windows 身份驗證,連接到一個數據庫則選擇你要發布到到的組織對應的數據庫,一般是組織名稱加上下划線在加上MSCRM。然后點擊 確定 按鈕就會自動生成連接字符串。在數據源的憑據中則使用第一個選項 使用Windows身份驗證不變。

Dynamics CRM教程之創建基於SQL報表 - 羅勇 - 羅勇的博客
 
Dynamics CRM教程之創建基於SQL報表 - 羅勇 - 羅勇的博客
 
Dynamics CRM教程之創建基於SQL報表 - 羅勇 - 羅勇的博客
 
 4.  添加數據集。右擊剛才添加的數據源,選擇 添加數據集 ,在 查詢下面的文本框中輸入你准備好的SQL語句,我這里是輸入 SELECT name, estimatedclosedate, estimatedvalue FROM FilteredOpportunity 。然后點擊本對話框的確定按鈕。 
Dynamics CRM教程之創建基於SQL報表 - 羅勇 - 羅勇的博客
  
5.  制作報表。從工具箱中拖動出來一個表,將三列拖動到表中,並且預覽下沒有問題。注意格式化的問題,可以參考文章  設置報表內容格式 ,如果是設置基礎貨幣的顯示格式,對應的篩選視圖中有個列名叫crm_moneyformatstring,將貨幣類型字段的Format屬性設置為這個字段即可。其他的格式化信息則通過 SELECT * FROM dbo.fn_GetFormatStrings() 新建一個DataSet,可以將這個DataSet命名為DSNumandCurrency,然后將顯示字段的Format設置為類似如下之一即可:
First(Fields!DateFormat.Value, "DSNumandCurrency")
First(Fields!TimeFormat.Value, "DSNumandCurrency")
First(Fields!NumberFormat_0_Precision.Value, "DSNumandCurrency")
First(Fields!NumberFormat_2_Precision.Value, "DSNumandCurrency")
First(Fields!CurrencyFormat_2_Precision.Value, "DSNumandCurrency")
 
Dynamics CRM教程之創建基於SQL報表 - 羅勇 - 羅勇的博客
 
6.  為報表啟用預篩選。因為這個是很簡單的報表,我就用一種簡單的辦法來啟用預篩選。就是SDK中說的 Automatic Pre-Filtering 方法。雙擊數據集,將FilteredOpportunity后面增加 AS CRMAF_FilteredOpportunity,如下圖所示,然后點擊確定。這個命名有講究,就是要以 CRMAF_ 開頭。
Dynamics CRM教程之創建基於SQL報表 - 羅勇 - 羅勇的博客
 
7. 發布報表。導航到 工作區 > 報表,設置屬性如下圖所示。然后點擊保存並關閉按鈕。
 
Dynamics CRM教程之創建基於SQL報表 - 羅勇 - 羅勇的博客
 
8. 測試報表。到 銷售 > 商機 界面,選擇一些記錄,點擊 運行報表 ,一會兒報表效果如下圖所示,我后來為報表加了餅狀圖。
 
Dynamics CRM教程之創建基於SQL報表 - 羅勇 - 羅勇的博客
 
Dynamics CRM教程之創建基於SQL報表 - 羅勇 - 羅勇的博客
 
9.  使用顯式預篩選。因為自動預篩選有些局限性,僅限於簡單的報表,所以我這里也說明一下顯示預篩選。顯式開啟預篩選功能,需要用到一個CRM參數CRM_FilteredEntity,因為是針對Opportunity實體,所以這個參數名稱應該名為為CRM_FilteredOpportunity。增加的參數屬性如下,除了名稱外,最好將選擇參數可見性更改為隱藏。將其默認值設置為 select FilteredOpportunity0.* from FilteredOpportunity as FilteredOpportunity0 。當然,不要在查詢語句中使用 * ,一般應該指明要使用的查詢列名,我這里是演示,所以從簡了,也可以使用 select name, estimatedclosedate, estimatedvalue from FilteredOpportunity 更好。
 
Dynamics CRM教程之創建基於SQL報表 - 羅勇 - 羅勇的博客
 
Dynamics CRM教程之創建基於SQL報表 - 羅勇 - 羅勇的博客
  
10. 增加參數。更改數據集的屬性,雙擊它,增加一個參數,名稱為 @CRM_FilteredOpportunity ,值為 [@CRM_FilteredOpportunity] ,並將查詢的SQL更改為類似如下:這樣就完成使用顯示預篩選的更改了。

DECLARE @SQL NVARCHAR(4000);

SET @SQL = 'SELECT name, estimatedclosedate, estimatedvalue FROM (' + @CRM_FilteredOpportunity + ') AS Filtered';

EXEC(@SQL);

Dynamics CRM教程之創建基於SQL報表 - 羅勇 - 羅勇的博客
 
Dynamics CRM教程之創建基於SQL報表 - 羅勇 - 羅勇的博客
 
如果碰到關聯多個實體來顯示數據的話,需要為要啟用預篩選的實體創建一個參數,和前面的增加參數的類似。比如另外一個例子是 客戶和聯系人實體關聯,顯示客戶和聯系人兩個實體的字段,我需要在客戶上啟用預篩選,那么我需要增加一個報表參數,名稱為 CRM_FilteredAccount,這個參數的默認值我可以設置為簡單的 select name,accountid from FilteredAccount ,並將這個參數設置為隱藏。
然后我還要修改數據集,增加一個參數,參數名為 @CRM_FilteredAccount ,參數值為 [@CRM_FilteredAccount] ,然后修改數據集的SQL類似如下:
DECLARE @SQL NVARCHAR(4000);
SET @SQL = 'select Filtered.Name,FilteredContact.FullName FROM (' + @CRM_FilteredAccount + ') AS Filtered ';
SET @SQL = @SQL + ' inner join FilteredContact on Filtered.AccountId = FilteredContact.AccountId';
EXEC(@SQL);
 這樣就可以做到多實體關聯的預篩選了。
 
值得注意的是,若之前報表沒有啟用預篩選,后來啟用的,需要刪除原來的報表,重新上傳,囧。還有報表會有個默認的篩選條件,我們刪除的話,去 報表 界面編輯默認篩選器,將條件去掉並保存即可。
 
 

引用來源:http://luoyong0201.blog.163.com/blog/static/1129305201311193338296/

注明:基於SQL的報表只能應用於On-Premise的CRM中,不能應用於Online版本的CRM中。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM