Salesforce學習之路-developer篇(四)Visualforce結合Reports展現圖表

Salesforce做爲一款CRM系統,我的以爲最重要的環境即是在於數據的展現和聯動,而Salesforce也自己提供了至關強大的功能,Report在展現圖表的方面十分強大,前段時間更是宣佈以157億美圓收購tableau以後更是如虎添翼。雖然,其自己標準組件很強大,可是在實際項目上依舊捉襟見肘。html

話很少說,這裏提一提本人在展現圖表的心歷路程。web


 

1. 什麼是報告?

以最簡單的形式,報告是知足您定義的條件的記錄(如機會或賬戶)的列表。可是報告不只僅是簡單的列表。要獲取所需的數據,能夠對記錄進行過濾,分組和數學運算。您甚至能夠在圖表中以圖形方式顯示它們!瀏覽器

每一個報告都存儲在一個文件夾中。報告文件夾肯定如何訪問報告,以及誰能夠訪問它們以查看,編輯或管理。文件夾能夠是公共的,隱藏的或共享的。您能夠根據角色,權限,公共組,區域和許可證類型來控制誰有權訪問文件夾的內容。您能夠將文件夾提供給整個組織使用,也能夠將其設置爲私有,以便只有全部者才能訪問。緩存

2. 建立新的報告

建立Reprot Tyep

Report Type就像一個模版,肯定建立Reports時可使用哪些字段和記錄。spa

  • 點擊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。  

添加過濾條件

過濾類型:code

過濾類型 描述
標準過濾 默認狀況下, 標準過濾應用於大多數對象。不一樣的對象具備不一樣的標準過濾器,可是大多數對象都包括標準過濾器Show Me和Date Field。Show Me過濾器:可根據常見分組(例如「個人帳號」或「全部帳號」)過濾對象。 Date Field過濾器:根據日期字段進行過濾(如建立日期,上次活動)和日期範圍(如「全部時間」或「上個月」)
字段過濾 字段過濾器可用於報告,列表視圖,工做流規則以及應用程序的其餘區域。對於每一個過濾器,設置字段,運算符和值。
過濾邏輯 添加Boolean條件來控制字段過濾器。在使用過濾邏輯以前,至少得有一個字段過濾。
交叉過濾 使用WITH或WITHOUT條件按子對象過濾報告。添加子過濾器進一步按照子對象上的字段進行過濾。例如:若是有交叉過濾器Account with Opportunity,點擊Add filter並建立子過濾器Opportunity Name Equals ACME
行數過濾 對於表格報告,選擇要顯示的最大行數,而後選擇要做爲排序依據的字段和排序順序。若是限制返回的行數,則能夠將表格報告用做儀表盤或統計組件的源報表。

 過濾邏輯:htm

操做 定義
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個過濾條件。blog

    • 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詳細內容:http://www.javashuo.com/article/p-tljwxadv-gn.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中的圖表。

相關文章
相關標籤/搜索