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

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扩展出来的所有单元格

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值