本帖最后由 图客 于 2015-12-31 09:38 编辑 这是上海张兄出的一道题:销售业绩用填表公式填写后,要求用一个业务公式给业绩排名次,相同业绩同一名次,名次连续不跳号。 这看起来很简单,就是把业绩从大到小排列,再把名次编上去,相同业绩的编成同一名次。可真的实现起来就也是一个考验业务公式水平的题目。 先看一下准备的数据:
这是模版结构,下面是手工录入的数据(数据可以用表间公式填充,这里测试就没有写了):
为了测试方便,定义了一个状态字段:
准备工作完成了,下面就开始按要求写业务公式了: 先介绍一下我自已的做法(我的做法复杂执行效率差,唉差距啊!): 1、数据接口:
这里的业绩表达式用的是:最大值(本模板.明细.业绩)
这里的业绩表达式用的是:最大值(本模板.明细.业绩)
注:这里的过滤条件是业绩小于自定义参数业绩。
2、业务公式如下:
这条公式就是给业绩最大的赋值名次:1
这条公式就是依次根据前一名次的业绩查找下一名次的业绩,并给赋值名次。 数据源解释:如序号列表为1, 名次业绩为:30000, 业绩单条记录:
找到这两条记录,给名次赋值:1+1即2。 下面介绍上海张兄的实现方式(他的实现方法简便多了): 1、张兄用的数据接口:
名次表达式为:最大值( 空值替换(本模板.明细.名次,0) ),用空值替换函数原因:因为最初时名次为空,需要给名次给个最初的数值。
这个数据接口中要“重复数据只显示一次”勾选上,并且排序为从大到小降序排列。 2、张兄用的业务公式: 清空名次公式:
排名次公式
数据源理解:业绩去重排序数据接口的数值为:30000时,名次最大号为:0,公式赋值名次为0+1=1。依次业绩为:20000时,名次最大号为1,公式赋值名次为1+1=2.……
公式执行后,填表公式刷新,就得到结果:
|
图客 发表于 2015-12-30 21:03 非常感谢楼主,特别的实用并且简单,通过这个教程又学习到了关于复杂接口的使用,特别感谢!很有帮助。。。 ![]() |
这个排名好像不好实现,还是这个版本实现有问题了 ,你这个版本好像是以前的 |
本帖最后由 1黄剑华 于 2019-4-16 15:53 编辑 排序也可以用填表公式完成: 1. 定义一个按钮,通过按钮触发触发排序事件 ![]() ![]() 2. 计算本次需要排序的人数(可通过值变化事件合计人数)---本次合计通过明细表中的业绩数据项合计 a. 合计前先初始化【总人数】
![]() b.开始计算
![]() 3. 知道排序的最大值后开始进行赋值 a. 通过使用全局数据接口中的序号列表进行循环赋值 ![]() ![]() b. 因为上面是赋值名次号,所以通过值变化-名次号即可实现循环操作
![]() c. 在循环时,找出尚未排序的业绩的最大值
![]() d. 找到最大值后,通过匹配条件,将最大值的值与业绩匹配后,赋值名次
![]() e. 赋值完后,需要清空最大值,以便于下次循环时,清除当前最大值
![]() 效果图 |