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中的图表。
Salesforce学习之路-developer篇(四)Visualforce结合Reports展示图表的更多相关文章
- Salesforce学习之路(七)Visualforce结合Reports展示图表
Salesforce作为一款CRM系统,个人觉得最重要的环境便是在于数据的展示和联动,而Salesforce也本身提供了相当强大的功能,Report在展示图表的方面十分强大,前段时间更是宣布以157亿 ...
- Salesforce学习之路-developer篇(三)利用Visualforce Page实现页面的动态刷新案例学习
Visualforce是一个Web开发框架,允许开发人员构建可以在Lightning平台上本地托管的自定义用户界面.其框架包含:前端的界面设计,使用的类似于HTML的标记语言:以及后端的控制器,使用类 ...
- Salesforce学习之路-developer篇(五)Aura组件原理及常用属性
很喜欢曾经看到的一句话:以输出倒逼输入.以输出的形式强制自己学习,确实是高效的学习方式,真的很棒.以下仅为个人学习理解,如有错误,欢迎指出,共同学习. 1. 什么是Lightning Componen ...
- Salesforce学习之路-developer篇(五)一文读懂Aura原理及实战案例分析
1. 什么是Lightning Component框架? Lightning Component框架是一个UI框架,用于为移动和台式设备开发Web应用程序.这是一个单页面Web应用框架,用于为Ligh ...
- Salesforce学习之路-developer篇(二)利用Jenkins和Bitbucket实现Salesforce的CI/CD功能
上文提到,基于CRM的二次开发是必不可少的,但是在实际项目中CI/CD是不可忽略的一个重要部分,与传统的Java,Python项目不同,如果对Salesforce进行持续集成和持续部署呢? 结合找到的 ...
- Salesforce学习之路-developer篇(一)利用VS Code结合Git开发Salesforce
Part 1: 从Git中克隆代码到本地 git clone https://github.com/git/git Part 2: 在VS Code中安装Salesforce和Git插件 在VS Co ...
- Salesforce学习之路-admin篇
Salesforce是一款非常强大的CRM(Customer Relationship Management)系统,国外企业使用十分频繁,而国内目前仅有几家在使用(当然,国内外企使用的依旧较多),因此 ...
- Salesforce学习之路-admin篇(三)role hierarchy & sharing
1. Role Hierarchy 在私有或者混合模型中,如果在organization-wide defaults设置某个对象为Private,那么对象的记录只有拥有者可以查看.但是,role hi ...
- STM32学习之路入门篇之指令集及cortex——m3的存储系统
STM32学习之路入门篇之指令集及cortex——m3的存储系统 一.汇编语言基础 一).汇编语言:基本语法 1.汇编指令最典型的书写模式: 标号 操作码 操作数1, 操作数2,... ...
随机推荐
- android端 版本升级
由于项目中要求实现版本升级,特写此代码,有因为这段代码基本都是通用,所以记录下来,以便下次直接拷贝... public class ApkVersionUpdate { /** apk文件下载状态:正 ...
- Python编程常见报错解决(一)
1.报错一: SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xca in position 0: invalid cont ...
- windows任务计划定时备份sqlserver数据库
使用windows的任务计划新建一个sqlserver数据库的定时备份任务 一. (我是以sqlserver2008r2数据库版本测试的)在G盘下新建文集夹Database_backup,首 ...
- Java 内存溢出分析
原文地址:Java 内存溢出分析 博客地址:http://www.moonxy.com 一.前言 Java 的 JVM 的内存一般可分为 3 个区:堆(heap).栈(stack)和方法区(metho ...
- js-数据交互--AJAX
一:介绍 今天跟下大家简单的介绍一下,在前端开发中,前后端数据交互的一种手段,我们都知道,在前端往后端传送数据的话,利用get,post方法即可向后端发送数据,后端将数据接受,链接到数据库,进行数据库 ...
- .netCore部署在IIS上遇到的问题(500.19,500.21错误)
1.确保IIS功能都安装上了. 2.确保.netcore 的最新sdk已安装. 3.应用程序池改成无托管代码 4.500.19错误 错误原因,没有安装 DotNetCore.2.0.5-Windows ...
- 第八届蓝桥杯java b组第三题
标题:承压计算 X星球的高科技实验室中整齐地堆放着某批珍贵金属原料. 每块金属原料的外形.尺寸完全一致,但重量不同.金属材料被严格地堆放成金字塔形. 7 ...
- SpringBoot定时任务,总有一款适合你
title: SpringBoot定时任务,总有一款适合你 date: 2019-09-28 16:19:10 tags: - springboot - 定时任务 categories: java - ...
- CentOS7 64位下MySQL安装与配置(YUM)
安装环境:腾讯云CentOS7 64位安装MySQL5.7 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum ...
- CDH 5.9.3 集群配置
-----------------------------------------集群规划------------------------------------------ hostname ip ...