如何实现一个支持分级数据统计的增强型透视图
文/明道云销售部顾问 文静编辑/麦壁瑜
一个常见的企业需求
在企业的日常管理中,我们经常遇到需要对工作任务或者项目进行成本核算的任务,比如:统计员工在不同任务上的工时投入,并且按客户、产品、部门等多个维度进行分析。
让我们让问题更加复杂一点
如果只是简单按某个维度进行汇总,那么在明道云里设计好统计明细表,并配合相应的统计图表(饼状图、柱状体、透视图)就可以轻松实现。而我们今天要分享的是一个相对复杂的分层统计需求:按照数据的层级结构分层进行数据统计。
例如:在将工作任务逐级分解执行后,需要再根据员工的日报逐级进行工时汇总,一项工作任务可以关联到任何一级任务。下图这个任务工时统计,就将从总任务到二级子任务的各级任务都逐级进行数据汇总。
然而目前,这样分层汇总的报表统计在明道云还无法直接支持。难道只能找产品经理提需求吗?当然不是,明道云自身的自定义能力给我们提供了无限的发挥空间。下面我们就来利用明道现有的基础功能,改装出一个具备分层汇总能力的增强型透视图。
将大问题拆解成小问题,逐一解决
首先明确,我们最终需要的是一个统计数据表,并且按不同的层级进行汇总,因此在所有的报表类型中,“透视图”是最合适的。
透视图可以添加多个行统计维度,报表会把内容相同的行维度自动进行合并展示。如果按照数据的范围大小进行维度排序,就可以实现逐层展开的效果。如果还不太熟悉透视图,可以先参考一个包含行政区划的简单例子:工作表记录中每个地址都包含“省—市—(区)县”3 个字段,如果严格按照这个顺序来设置,即可按照地区范围的大小逐级展示。
按照省—市—县顺序展示
当然,不按照特定的顺序来排序也不会影响报表呈现,只是无法更好的展示数据本身的层级或者分组关系。在本文的需求中,我们自然会选择按照工作任务本身的层级关系来统计。
按照市—区(县)—省顺序展示
确定了最终的报表呈现形式,下一步就是要为报表提供数据源。通过刚才对透视表的特点分析,我们看到目前透视表本身不具备的功能:
展现形式上,要想实现具备相同的上层数据自动合并展示,必须要让上层数据有完全相同的内容才行(任务名称+汇总结果)
透视表虽然可以按维度合并数据,但本身无法分层进行数据统计,因此需要我们在数据源表中先计算好各层的汇总数据
明确了这两个目标,下一步就要基于当前基本的功能来改造数据结构,以满足要求。
解决问题
1.建立分层统计的数据结构(月度/分类汇总表)
各层有唯一的一条记录,用于累计本层工作的汇总数据。记录通过日报提交的事件自动创建即可。
2.建立透视图的数据源表,用于分层显示的各级汇总字段
注意:这里还是需要根据业务需求确定一个最大层级,因为透视表的行维度在配置时就固定下来。
字段格式设置为“任务名称-本层工时汇总”,里面需要按层级分别关联上一步的分类统计数据。也就是说,每条数据除了要保存自身的工时以外,也要保存所属所有上层任务的汇总工时,并通过“文本组合”统一格式。
3.逐层统计
一旦有新的数据提交,工作流自动根据提交所在的层级向上追溯,并将本层新增的工时累加到上层各级的汇总字段。由于这些字段已经和统计源数据建立关联,所以可以让所有相关数据都同步更新。
当有日报增加时,通过工作流直接创建一个步骤(2)对应的工时数据汇总记录,此时该数据中只有当前日报本身的工时数,还没有建立和(1)的汇总数据关联。
然后按照层级关系逐级累加,并且将各级汇总数据关联到当前记录。在逐层累加的设计中我们使用了 A、B 子流程循环调用的模式,子流程中封装了累加当前层级汇总数据和关联数据源表记录的逻辑。一个子流程处理完成后,只需要判断当前计算的层级是否还有上级,如有就调用另一个相同结构的子流程 B 继续进行累加,循环往复。
完成这些配置和数据录入后,各个日报的数据里就会分别显示上面各级的汇总信息,并且实现一个增强版本的透视图效果。
最终自动累加出来的数据源表
自动生成的增强型透视图
结束语
通过一个小案例,我们就实现了一个产品本身没有的功能,这就是明道云的魅力所在——只要掌握所有基本组件的特性,在充分分析业务需求的基础上,我们可以一定程度上突破产品本身的边界,总结一句话:
“使用明道云产品最大的困难可能不是产品目前还没有什么功能,而是你缺乏想象力!”
评论