帆软关于排名公式、分组排名问题开窗函数

本文介绍了报表中的排序和排名方法,包括FR自带排序函数、组内分组排名公式、SQL实现排序及分类排名前10名的方法。同时,还探讨了如何通过报表内置的rank()函数实现动态排名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.FR自带排序函数SORT(B2) // B2为排序字段;此函数等同于count(B2[!0]{B2 > $B2}) + 1  

此函数排名如下 1 2  2   4  5,相同明次无法处理

2.FR组内分组排名公式如下:count(C3[!0;!0]{A3=$A3&&C3>$C3})+1 ;    A为组别 ;  C 为排序值列

c2[!0]:表示c2竖向扩展的所有值!

a2=$a2:表示条件过滤当前组内的值!

c2>$c2:表示条件过滤比当前c2单元格的值大的值!

count():表示计算c2竖向扩展的组内的比当前单元格的大的值的数目,最大的则为0,依次为1……n ,+1后就是排名(从1开始)!

3.分类排名前10名建议用SQL实践 groupby 类别 limited 10  或直接FR结果集筛选

4.SQL实现排序    

  1. SELECT  
  2.     t_time,  
  3.     code,  
  4.     name,  
  5.     CL,  
  6.     row_number () OVER (partition BY t_time ORDER BY cl) AS 组内排名1,  
  7. --T_time组内,cl排名  
  8.     row_number () OVER (ORDER BY cl) AS 排名1_1,  
  9. --所有cl的排名  
  10.     rank () OVER (partition BY t_time ORDER BY cl) AS 组内排名2,  
  11. --T_time组内,cl排名  
  12.     rank () OVER (ORDER BY cl) AS 排名2_1,  
  13. --所有cl的排名  
  14.     dense_rank () OVER (partition BY t_time ORDER BY cl) AS 组内排名3,  
  15. --T_time组内,cl排名  
  16.     dense_rank () OVER (ORDER BY cl) AS 排名3_1  
  17. --所有cl的排名  
  18.       
  19. FROM  
  20.     zsh_0220  
  21. ORDER BY  
  22.     t_time,code;  

排名如下:1 2 2  3 4 5 ,同名次后相连

 CUME_DIST ()  解决以下问题

有时候,一些特殊的数据分析,我们很难通过报表单元格界面设计出来!比如我手里有一张企业的薪资表,现在想分析某个人薪资在本部门或全公司处于一个什么水平,就很难实现。在本部门,比他薪资高的人占多少?比他薪资低的又占多少?在本部门……等等。

select  name  , fengshu, class,
  CUME_DIST ()  over (order by fengshu) c1 ,
  CUME_DIST ()  over (partition by class order by fengshu) c2 from fengshu  order by fengshu

其他条件的分析函数有:

row_number() over(partition by … order by …) 

rank() over(partition by … order by …) 

dense_rank() over(partition by … order by …) 

count() over(partition by … order by …) 

max() over(partition by … order by …) 

 select  distinct class, max(fengshu) over(partition by class order by fengshu desc ) from fengshu

min() over(partition by … order by …) 

  select  distinct class, min(fengshu) over(partition by class order by fengshu ) from fengshu

sum() over(partition by … order by …) 

avg() over(partition by … order by …) 

first_value() over(partition by … order by …) 

last_value() over(partition by … order by …) 

lag() over(partition by … order by …) 

lead() over(partition by … order by …) 

 部分解释:

 count() over(partition by ... order by ...):求分组后的总数。
  max() over(partition by ... order by ...):求分组后的最大值。
  min() over(partition by ... order by ...):求分组后的最小值。
  avg() over(partition by ... order by ...):求分组后的平均值。
  lag() over(partition by ... order by ...):取出前n行数据。  

  lead() over(partition by ... order by ...):取出后n行数据。

  ratio_to_report() over(partition by ... order by ...):Ratio_to_report() 括号中就是分子,over() 括号中就是分母。

  percent_rank() over(partition by ... order by ...):

--------------------------------- 

 over partition by与group by的区别:

  group by是对检索结果的保留行进行单纯分组,一般和聚合函数一起使用例如max、min、sum、avg、count等一块用。partition by虽然也具有分组功能,但同时也具有其他的高级功能。

5.填报动态排名

通过报表内置的rank()函数来变换实现。

RANK(A,B,C)返回一个数在一个数组中的秩(如果把这个数组排序,该数的秩即为它在数组中的序号

参数说明:

A:所求秩的数(可以是Boolean型,true=1,false=0

B:可以是数组,引用,或一系列数,非实数的值被忽略处理(接受Boolean型,true=1,false=0

C:指定求秩的参数,非零为升序,零为降序

3.1 内置数据集

新建模板,添加内置数据集,如下所示:

222

3.2 模板设置

将字段拖入对应的单元格中,模板设置如下:

222

给C2单元格添加“数字控件”

D2单元格输入公式:B2+C2

E2单元格输入公式:rank(D2, D2[!0], 0),其中D2[!0]表示D2扩展出来的所有单元格

 

<think>嗯,用户想了解如何在CPT文件中实现公式的使用方法。首先,我需要回忆一下报表中公式的应用场景和具体操作步骤。根据提供的引用内容,特别是引用[4]提到的“报表填报属性对更新人、更新日期的设置要写成公式而不能引用单元格”,这说明在填报属性中,直接使用公式是必要的,而不能依赖单元格引用。这可能是因为某些情况下,前端单元格的值不会被传递到后端处理,导致数据更新失败。 接下来,用户可能需要的是在CPT模板中添加公式的具体步骤。首先,公式通常可以在单元格中直接输入,或者通过表达式编辑器来设置。例如,用户可能需要在单元格中输入类似`=SUM(A1:A10)`的公式来进行求和计算。此外,参数的处理也很重要,引用[3]提到参数为空时选择全部数据的方法,这可能涉及到公式中处理参数是否为空的逻辑,比如使用条件判断函数。 然后,考虑到用户可能需要一些示例来更好地理解,我应该提供几个常见的公式应用场景,比如数据汇总、条件判断、参数处理等。同时,结合引用[2]中提到的类Excel设计界面和复杂运算功能,说明支持类似Excel的公式语法,但可能有一些特定的函数或写法需要注意。 另外,关于填报属性中的公式设置,引用[4]指出必须使用公式而非单元格引用,所以需要指导用户在填报属性的设置中直接编写公式,例如使用`=now()`来获取当前时间作为更新时间,或者`=$fine_username`来获取当前用户名称。这部分需要详细说明如何进入填报属性设置,并正确输入公式。 用户可能还会遇到公式错误的问题,因此需要提醒常见的注意事项,比如函数名称的正确性、参数的正确使用,以及如何利用的调试工具检查公式结果。引用[5]提供的链接可能包含更多具体案例,但链接内容不可见,所以可能需要依赖现有的引用内容来构建答案。 最后,生成的相关问题需要覆盖用户可能进一步感兴趣的方面,如参数与公式的结合使用、常见错误处理、性能优化等,确保用户能够全面了解公式的应用和问题排查方法。</think>### 如何在CPT文件中实现公式 #### 1. **公式的基本语法** 公式语法与Excel类似,但需遵循其特定规则: - **运算符**:支持`+`、`-`、`*`、`/`等基础运算符,例如:`$$A1 + B1 * 0.2$$`[^2]。 - **函数**:内置函数如`SUM`、`IF`、`NOW`等,例如:`$$SUM(D2:D10)$$`用于求和[^4]。 - **单元格引用**:通过`$`符号引用单元格,例如`$$$A1$$`表示绝对引用A1单元格。 --- #### 2. **公式应用场景** - **数据计算**:在单元格中直接输入公式,如`$$=SUM(A1:A10)$$`实现区域求和。 - **条件判断**:使用`IF`函数,例如根据条件显示不同内容: ```plaintext $$=IF(C1 > 100, "达标", "未达标")$$ ``` - **动态参数
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值