本篇参考:

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. vue入门第一坑:Eslint

    Eslint是语法检查插件,它会严格要求你的代码,就你本身代码没错,但是一运行,Eslint就跳出来报错了.它会自动检查你的代码是否符合规范.所以,建议新手入门Vue创建项目的时候可以关掉Eslint ...

  2. ET介绍—— 一切皆实体的设计

    一切皆实体 目前十分流行ECS设计,主要是守望先锋的成功,引爆了这种技术.守望先锋采用了状态帧这种网络技术,客户端会进行预测,预测不准需要进行回滚,由于组件式的设计,回滚可以只回滚某些组件即可.ECS ...

  3. 批处理bat and 汇编小技巧

    来自远古时期的汇编软件MASM是没有像现在一样的exe程序的(汇编萌新的认知),所以为了快捷,写一些bat来方便操作.([表情包]奇怪的知识增加了)哈哈哈 我现在是MASM的路径是D:\Masm64\ ...

  4. CreateProcess error=2, 系统找不到指定的文件。

    遇到一个android 配置.gradle时提示CreateProcess error=2, 系统找不到指定的文件 于是百度有很多这类答案,如:干掉NDK 我按照这么做了,最后顽固的bug 并没有理睬 ...

  5. 新版idea快捷键总结学习----(用于java开发模式)

    选择代码区 ctrl w 如果放到以if开头的语句,可以选择if判断条件所在的代码片段 游标在单个单词下时 选择单词 在选中多个单词时,选择整个字符串 三次点击时,如果不在字符串单词下,用于选择{}内 ...

  6. Vagrant 学习笔记:搭建 K8s 集群

    Vagrant学习笔记:搭建K8s集群 通常情况下,我们在使用VMware.VirtualBox这一类虚拟机软件创建虚拟开发环境时,往往需要经历寻找并下载操作系统的安装镜像文件,然后根据该镜像文件启动 ...

  7. windows10环境下安装RabbitMQ以及延时插件(图文)

    安装转载:https://www.cnblogs.com/saryli/p/9729591.html 插件转载:https://blog.csdn.net/nbdclw/article/details ...

  8. Galaxy 生信平台(三):xlsx 上传与识别

    我在<Firefox Quantum 向左,Google Chrome 向右>中,曾经吐槽过在 Firefox 中使用 Galaxy 上传本地的 Excel 文件时,会出现 xlsx 无法 ...

  9. Java如何实现去重?这是在炫技吗?

    大家好,我3y啊.由于去重逻辑重构了几次,好多股东直呼看不懂,于是我今天再安排一波对代码的解析吧.austin支持两种去重的类型:N分钟相同内容达到N次去重和一天内N次相同渠道频次去重. Java开源 ...

  10. API全场景零码测试机器人,华为云发布ATGen in CodeArts TestPlan

    摘要:华为云ATGen现开放对外邀测,欢迎预约. 本文分享自华为云社区<API全场景零码测试机器人,华为云发布ATGen in CodeArts TestPlan>,作者:华为云头条 . ...