本篇参考:

https://help.salesforce.com/s/articleView?id=sf.reports_summary_functions_about.htm&type=5

https://www.youtube.com/watch?v=bjgZTgYe_84

Salesforce Admin篇(二) Report中,我们讲过report的一些基础知识,实际工作中往往有些场景比这些复杂很多,接下来根据实际工作中的部分场景进行知识扩展。本篇主要讲解3个内容: PARENTGROUPVAL and PREVGROUPVAL & Power Of 1.

引言: 在salesforce的report中,官方封装了很多的函数,基于不同的函数来进行不同的场景处理。有一些我们比较熟悉的类似formula的函数IF等,用起来很方便,除此以外还有两个特殊的函数:PARENTGROUPVAL and PREVGROUPVAL,使用 PARENTGROUPVAL 计算相对于一个父分组的值,使用 PREVGROUPVAL 计算相对于同级分组的值。接下来对这两者进行展开。

一. PARENTGROUPVAL

此函数返回指定父分组的值。父 "分组是指包含公式的分组之上的任何层级。

针对Summary Report以及Join Report,我们使用这个函数包含两个参数:PARENTGROUPVAL(summary_field, grouping_level)

针对Matrix Report,我们使用这个函数包含三个参数:PARENTGROUPVAL(summary_field, parent_row_grouping, parent_column_grouping)

我们对这三个参数进行一下解释:

  • summary_field:汇总的字段的值。举个例子: 第一个参数使用TOTAL_PRICE:SUM代表我们返回指定父分组的值,分组的值基于 TOTAL_PRICE字段进行SUM汇总。再举一个例子: 第一个参数使用RowCount,这个是report的字段,代表对指定分组进行计数操作,返回的结果将是某个指定分组的数据的数量。
  • parent_row_grouping:针对Summary Report以及Join Report,第二个参数即row_grouping。row_grouping可以有两个值: GRAND_SUMMARY以及分组字段的API NAME。 其中GRAND_SUMMARY代表着整体数量,即Report下方的Grand Total选项勾选的数量效果。指定分组字段的API Name代表着某个子分组的范围。
  • parent_column_grouping用法和parent_row_grouping用法相同并且参数值也相同。

其实这样说起来很绕,并且很难去理解,我们不妨以一个例子进行更好的理解。我们的原始需求是制作一个Case Report,Case Report基于Case Owner以及Case Status进行分组查看每个owner每个组的数量。这个需求很简单,我们可以基于两种方式实现,一个是summary report设置两层分组,一个是matrix report。

基于Summary Report的demo: 两个user,每个user都各拥有一部分数据。

基于Matrix Report的Demo。

现在需求进行了变更,显示每个阶段的数量固然很好,但是每个owner所处理的case数量不同,直接看每个阶段的数量参考意义不大,更希望看到每个阶段所占每个人所拥有的总数的百分比。我们对这两个report进行一下优化从而满足需求。

针对Summary Report,正确操作举例如下图gif所示。接下来我们对这个report进行详细的剖析。首先我们需要创建一个summary formula。基于需求,我们需要了解每个Status所占每个owner的总比,所以函数使用的是 PARENTGROUPVAL(RowCount, OWNER),其中OWNER代表的是我们report中的主group:Owner,即获取基于Owner级别的总数量。

还有一个重要的内容是Display,代表当前的formula显示在哪里。针对Summary Report主要有以下几个值:

  • All Summary Levels:所有的group字段,当前的demo相当于显示在Owner以及Status的subtotal中。
  • Grand Total Only:显示在Grand Total级别,通常这种函数为金额或者数量多一些,比如当前记录总数或者当前report的总金额等。
  • Specific Groups:显示在指定的group的subtotal,当前demo选择了此种方式,并且字段选择了Status,代表只会显示在Status的subtotal位置。

接下来展示几个错误的示范

1. 函数中选错基于某个字段分组。我们可以看到下方gif中,函数选择基于Status分组永远是100%,基于GRAND_SUMMARY分组则把两个user的总数都作为计算,这个是不正确的,我们在使用此函数时,首先需要确定计数范围。

2. 显示错误的位置。我们可以看到此函数仅支持summary函数,如果放在grand total以及All Summary Level则报错,放在不正确的字段的subtotal则展示的结果不符合我们的需求的预期。

这两个点在实际工作中使用此函数一定要重点思考。

基于matrix report正确操作如下:这个demo中,我们看到函数有三个参数,其中第二个参数很好理解,我们使用了Case Owner进行分组。第三个参数我们选择了GRAND_SUMMARY,因为当前column只有一个分组,所以使用这种也代表获取当前这个owner的total。

二. PREVGROUPVAL

使用 PREVGROUPVAL 计算相对于同级分组的值,他用来获取分组的前一刻的值。我们直接以一个demo进行展开,这样理解会更方便。

我们想要了解一下第二条记录和前一条记录的差值,即每个月的amount的变化,是增长的,还是减少的。这种情况我们便可以使用PREVGROUPVAL函数。

从下方的gif中我们可以看到使用PREVGROUPVAL的效果,这个函数拥有三个参数:

  • summary_field:记录哪个汇总字段,demo中我们使用的是 Amount:Sum即获取Amount的汇总数据。
  • grouping_level:记录基于哪个字段进行分组来获取summary_field。
  • increment:记录增量,默认是1,即获取前一条数据的值,如果隔条获取,可以设置为2, demo中有一个简单的UI效果。

我们对UI进行简单修改,即可了解每个月相对上个月是增长还是下降了,仅需简单的计算以及颜色渲染,便可直观显示。 

 三. Power Of 1

我们以一个简单的demo来引出Power Of 1.

下方的gif中我们可以看到,针对Opportunity Report,我们可以在 Account Name列使用Unique,从而获取Account Name去重以后的数量,这个很方便也很好用。然而如果我们基于Account Name去进行Group以后,这个字段将不再支持 Unique去查看总共有多少个Unique Account,标准的report的record count也指向的是Opportunity有多少条数据,所以这时我们仅需要简单的在Account表中创建一个formula字段,并且将value设置一个hard code等于1即可。这种方式适用于针对关联列表或者字表查询,想要在字表查询到父表唯一的数量(Opportunity report查询Account去重以后的数量),可以使用Power Of 1。

当然, Power Of 1 所能做的远不止如此。以这个功能做一下引申,我们有时候的需求需要比较相同字段级别的不同阶段的转换率。举个例子,Opportunity有不同的Stage,我们有时需要计算 某个Stage在某几个Stage中所占的比例。这种需求可以使用Power Of 1进行快速实现。这里我们模拟一个需求: 我们的Opportunity Stage有Prospecting,Needs Analysis, Negotiation/Review, Closed Won。

我们需要计算Closed Won的数量针对每个其他阶段的比率。即 Closed Won Record Count / Prospecting => 28 / 12; Closed Won Record Count / Needs Analysis => 28 / 18; Closed Won Record Count / Negotiation/Review =>15 28 / 。那么如何实现这种需求呢? 可以使用Power Of 1的神奇之处。我们以Closed Won Record Count / Prospecting为例。

根据下方的gif我们可以看出来,新建两个formula字段,如果当前的Stage为指定的值,设置为1,否则设置为0. 之后在report中只需要创建一个 report formula字段即可实现需求。

总结:篇中主要介绍了一下Report的两个函数以及Power Of 1简单用法,更多好玩的用法等待你的发掘,本篇仅抛砖引玉。篇中有错误地方欢迎指出,有不懂欢迎留言。

salesforce零基础学习(一百三十)Report 学习进阶篇的更多相关文章

  1. Python学习日记(三十六) Mysql数据库篇 四

    MySQL作业分析 五张表的增删改查: 完成所有表的关系创建 创建教师表(tid为这张表教师ID,tname为这张表教师的姓名) create table teacherTable( tid int ...

  2. Python学习日记(三十四) Mysql数据库篇 二

    外键(Foreign Key) 如果今天有一张表上面有很多职务的信息 我们可以通过使用外键的方式去将两张表产生关联 这样的好处能够节省空间,比方说你今天的职务名称很长,在一张表中就要重复的去写这个职务 ...

  3. Python学习日记(三十八) Mysql数据库篇 六

    Mysql视图 假设执行100条SQL语句时,里面都存在一条相同的语句,那我们可以把这条语句单独拿出来变成一个'临时表',也就是视图可以用来查询. 创建视图: CREATE VIEW passtvie ...

  4. Python学习日记(三十九) Mysql数据库篇 七

    Mysql函数 高级函数 1.BIN(N) 返回N的二进制编码 ); 执行结果: 2.BINARY(str) 将字符串str转换为二进制字符串 select BINARY('ASCII'); 执行结果 ...

  5. Python学习日记(三十五) Mysql数据库篇 三

    使用Navicate 创建一个连接去使用Mysql的数据库,连接名可以取任意字符但是要有意义 新增一个数据库 填写新数据库名,设置它的字符集和排序规则 新建一个表 增加表中的信息 点击保存再去输入表名 ...

  6. 【转】零基础写Java知乎爬虫之进阶篇

    转自:脚本之家 说到爬虫,使用Java本身自带的URLConnection可以实现一些基本的抓取页面的功能,但是对于一些比较高级的功能,比如重定向的处理,HTML标记的去除,仅仅使用URLConnec ...

  7. Membership三步曲之进阶篇 - 深入剖析Provider Model

    Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...

  8. salesforce零基础学习(一百二十四)Postman 使用

    本篇参考: Salesforce 集成篇零基础学习(一)Connected App salesforce 零基础学习(三十三)通过REST方式访问外部数据以及JAVA通过rest方式访问salesfo ...

  9. salesforce零基础学习(一百二十八)Durable Id获取以及相关概念浅入浅出

    本篇参考: salesforce 零基础开发入门学习(十一)sObject及Schema深入 https://developer.salesforce.com/docs/atlas.en-us.api ...

  10. salesforce零基础学习(一百二十五)零基础学习SF路径

    本篇参考: https://boulder-bard-27f.notion.site/Salesforce-Learning-e990864695674f07b99a5f8955770bd4 本篇背景 ...

随机推荐

  1. 2022-07-08:以下go语言代码输出什么?A:3;B:+Inf;C:true;D:编译错误。 package main import “fmt“ func main() { var

    2022-07-08:以下go语言代码输出什么?A:3:B:+Inf:C:true:D:编译错误. package main import "fmt" func main() { ...

  2. 2022-05-12:小歪每次会给你两个字符串: 笔记s1和关键词s2,请你写一个函数, 判断s2的排列之一是否是s1的子串。 如果是,返回true; 否则,返回false。 来自字节飞书团队。

    2022-05-12:小歪每次会给你两个字符串: 笔记s1和关键词s2,请你写一个函数, 判断s2的排列之一是否是s1的子串. 如果是,返回true: 否则,返回false. 来自字节飞书团队. 答案 ...

  3. 2021-05-05:一个数组中只有两种字符‘G‘和‘B‘,可以让所有的G都放在左侧,所有的B都放在右侧。或者可以让所有的G都放在右侧,所有的B都放在左侧。但是只能在相邻字符之间进行交换操作。返回至少

    2021-05-05:一个数组中只有两种字符'G'和'B',可以让所有的G都放在左侧,所有的B都放在右侧.或者可以让所有的G都放在右侧,所有的B都放在左侧.但是只能在相邻字符之间进行交换操作.返回至少 ...

  4. mysql 新建数据库 排序规则

    utf8_unicode_ci和utf8_general_ci对中.英文来说没有实质的差别.utf8_general_ci校对速度快,但准确度稍差.utf8_unicode_ci准确度高,但校对速度稍 ...

  5. Java二维数组以及多维数组的定义及应用

    一.二维数组以及多维数组 1.二维数组的定义: ​ 在一维数组中定义每一个元素也是一个数组元素,这样的数组称为"二维数组" ​ 多维数组就是在一维数组上再次定义二维数组或三位数组等 ...

  6. 驱动开发:内核解析PE结构节表

    在笔者上一篇文章<驱动开发:内核解析PE结构导出表>介绍了如何解析内存导出表结构,本章将继续延申实现解析PE结构的PE头,PE节表等数据,总体而言内核中解析PE结构与应用层没什么不同,在上 ...

  7. 从零玩转系列之微信支付实战PC端接口搭建

    一.前言 halo各位大佬很久没更新了最近在搞微信支付,因商户号审核了我半个月和小程序认证也找了资料并且将商户号和小程序进行关联,至此微信支付Native支付完成.此篇文章过长我将分几个阶段的文章发布 ...

  8. 基于MQTT的弱网环境应用

    MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,设计用于低带宽和不稳定网络环境下的物联网设备之间的通信. 以下是MQTT的一些关键特点和常 ...

  9. LLE算法在自然语言处理中的应用:从文本到实体识别和关系抽取

    目录 文章介绍: 自然语言处理(Natural Language Processing,NLP)是人工智能领域的重要分支,它研究如何将人类语言转化为计算机可理解的格式.NLP的应用非常广泛,从语言翻译 ...

  10. Pinot2的无人机创新和发展

    目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2 核心模块实现 3.3 集成 ...