Salesforce學習之路-developer篇(四)Visualforce結合Reports展示圖表
Salesforce作為一款CRM系統,個人覺得最重要的環境便是在於資料的展示和聯動,而Salesforce也本身提供了相當強大的功能,Report在展示圖表的方面十分強大,前段時間更是宣佈以157億美元收購tableau之後更是如虎添翼。雖然,其本身標準組件很強大,但是在實際專案上依舊捉襟見肘。
話不多說,這裡提一提本人在展示圖表的心歷路程。
1. 什麼是報告?
以最簡單的形式,報告是滿足您定義的條件的記錄(如機會或帳戶)的列表。但是報告不僅僅是簡單的列表。要獲取所需的資料,可以對記錄進行過濾,分組和數學運算。您甚至可以在圖表中以圖形方式顯示它們!
每個報告都儲存在一個資料夾中。報告資料夾確定如何訪問報告,以及誰可以訪問它們以檢視,編輯或管理。資料夾可以是公共的,隱藏的或共享的。您可以根據角色,許可權,公共組,區域和許可證型別來控制誰有權訪問資料夾的內容。您可以將資料夾提供給整個組織使用,也可以將其設定為私有,以便只有所有者才能訪問。
2. 建立新的報告
建立Reprot Tyep
Report Type就像一個模版,確定建立Reports時可以使用哪些欄位和記錄。
- 點選Setup--> Report Types
- 點選New Custom Report Type
-
- Primary Object: 這裡指Report資料的物件,這裡選擇的是Account。注意,這裡不能選utilization物件,因為utilization被Account關聯,所以主物件是Account。如果分不清,可以檢視記錄的Related。例如:物件A記錄的Realted列表中含有物件B,那麼物件A便為Primary object。
- Store in Category: 是指該Report Type存放的目錄,在建立新Report時會用到。
- 點選Next,建立自定義資料集合。
-
- Each "A" record must have at least one related "B" record: 物件A的記錄必須有物件B的關聯資訊,即選擇物件A的Related列表中物件B不為空的記錄。
- "A" records may or may not have related "B" records: 選擇物件A的所有資料,無論物件A的Related列表中是否包含物件B。
新增過濾條件
過濾型別:
過濾型別 | 描述 |
標準過濾 | 預設情況下, 標準過濾應用於大多數物件。不同的物件具有不同的標準過濾器,但是大多數物件都包括標準過濾器Show Me和Date Field。Show Me過濾器:可根據常見分組(例如“我的賬號”或“所有賬號”)過濾物件。 Date Field過濾器:根據日期欄位進行過濾(如建立日期,上次活動)和日期範圍(如“所有時間”或“上個月”) |
欄位過濾 | 欄位過濾器可用於報告,列表檢視,工作流規則以及應用程式的其他區域。對於每個過濾器,設定欄位,運算子和值。 |
過濾邏輯 | 新增Boolean條件來控制欄位過濾器。在使用過濾邏輯之前,至少得有一個欄位過濾。 |
交叉過濾 | 使用WITH或WITHOUT條件按子物件過濾報告。新增子過濾器進一步按照子物件上的欄位進行過濾。例如:如果有交叉過濾器Account with Opportunity,點選Add filter並建立子過濾器Opportunity Name Equals ACME |
行數過濾 | 對於表格報告,選擇要顯示的最大行數,然後選擇要作為排序依據的欄位和排序順序。如果限制返回的行數,則可以將表格報告用作儀表盤或統計元件的源報表。 |
過濾邏輯:
操作 | 定義 |
AND | 與,必須同時滿足左右條件 |
OR | 或,只需滿足左右任一條件 |
NOT | 否,不滿足某條件 |
例如,某表格設定了三個過濾條件,其序號分別為1,2,3,設定過濾邏輯為:1 AND (2 OR 3) ==> 表格中只展示滿足條件1和(條件2或者條件3的某一個)的記錄。
建立Reprot
- 點選九宮格(App Launcher),在All Items下找到Reports並點選
- 點選New Report
- 選擇Report Type
- 這裡選擇上面建立的Account & utilization資料集,然後點選Continue,進入Report的建立介面
-
- Columns: 點選左側的Fields,可以看到所有可選擇的欄位,但是在我們的實際需求中,可能Report中只需要展示部分欄位,那麼將需要展示的欄位新增到Columns欄位下,新增的方法很簡單,1)在左側選中欄位後拖拽到Columns下面;2)在Columns的搜尋框中搜尋相應欄位,並選擇。
- Groups: 如果需要針對某個欄位進行分組,例如建立直方圖時需要選擇橫座標進行分組,可將對應欄位拖拽至Group Rows下,或者在Group Rows的搜尋框中新增。
- 新增過濾條件
如上面所說,Filters下面為表格的過濾條件,這裡設定了5個過濾條件。
-
- Show Me和Create Date為標準過濾,分別設定為:All accounts 和All Time
- 條件1,條件2,條件3為自定義過濾,併為自定義條件加上過濾邏輯(預設為所有條件AND)
新增表格
點選Add Chart按鈕,為Report新增表格
- 右邊選擇Chart展示的型別,Salesforce自帶有8中型別:Bar, Column, Stacked Bar, Stacked Column, Line, Donut, Funnel, Scatter plot,可根據需求自行設定不同格式圖示。
- X-Axis: 橫座標,對應Outline中Groups下的欄位。
- Y-Axis: 縱座標,對應Columns下的number或Currency型別的欄位(可計數字段,並且在欄位前會加上#符號)。
- Plot on Second Axis: 第二座標。
3. 建立Visualforce Page
Visualforce詳細內容:https://www.cnblogs.com/cloudman-open/p/11635346.html
Markup-檢視
<apex:page showHeader="false" controller="MeetingUsagePageController"> <apex:outputPanel > <div style="display:inline-block;width:100%;height:50%;overflow:hidden;padding-left:20%"> <analytics:reportChart reportId="00OK0000000mQaBMAU" rendered="true" showRefreshButton="true" size="huge" id="host_chart" cacheResults="true" filter="[ {column:'Web_Account__c.Id', operator:'equals',value:'{!webAccountId}' }, {column:'Site_Audio__c.Month__c', operator:'equals',value:'{!displayMonth}'}, {column:'Site_Audio__c.Site_Name__c', operator:'equals',value:'{!displaySite}'}]"> </analytics:reportChart> </div> </apex:outputPanel> </apex:page>
- Controller:繫結的類名稱。
- analytics:reportChart:該元件可將Salesforce報告圖表新增到Visualforce頁面。該元件在API版本29.0或更高版本中可用。
- reportId:Report的ID,找到對應表格並開啟,瀏覽器中URL為https://***.force.com/lightning/r/Report/00OK0000000mQaBMAU/view, Report後面的便是reportId。
- showRefreshButton: 是否展示重新整理按鈕,true表展示重新整理按鈕,false表不展示重新整理按鈕。
- Size:表格展示的尺寸,分為:tiny, small, medium, large, huge。
- cacheResults:顯示圖表時是否使用快取的資料。當該屬性設定為true時,資料將快取24小時,但是您可以使用cacheAge屬性修改時間長度。如果該屬性設定為false,則每次重新整理頁面時都會執行報告。
- filter:除報表中已有的欄位過濾器外,還按欄位過濾報表圖表以獲取特定資料。請注意,一個報告最多可以包含20個欄位過濾器。過濾器具有以下JSON字串形式的屬性:
- 列:您要過濾的欄位的API名稱。
- 運算子:您要用來過濾欄位的條件的API名稱。例如,要按“不等於”進行過濾,請使用API名稱“ notEqual”。
- 值:過濾條件。
Controller-控制類
public with sharing class MeetingUsagePageController { Id accountId = ApexPages.CurrentPage().getparameters().get('id'); Web_Account__c account = [select Display_Months__c, Display_Site__c from Web_Account__c where Id = :accountId limit 1]; public String webAccountId { get { if(webAccountId == null) { webAccountId = accountId; } return webAccountId; }set; } // filter chart with display month public String displayMonth { get { if(displayMonth == null) { displayMonth = account.Display_Months__c; } return displayMonth; }set; } // filter data with site name public String displaySite { get { if(displaySite == null) { displaySite = account.Display_Site__c; } return displaySite; }set; } }
結果如下
View Report:點選直接跳轉至對應的Report頁面。
Refresh: 點選右下角的重新整理按鈕會重新整理Visualforce Page中的圖表。
&n