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实现排序
- SELECT
- t_time,
- code,
- name,
- CL,
- row_number () OVER (partition BY t_time ORDER BY cl) AS 组内排名1,
- --T_time组内,cl排名
- row_number () OVER (ORDER BY cl) AS 排名1_1,
- --所有cl的排名
- rank () OVER (partition BY t_time ORDER BY cl) AS 组内排名2,
- --T_time组内,cl排名
- rank () OVER (ORDER BY cl) AS 排名2_1,
- --所有cl的排名
- dense_rank () OVER (partition BY t_time ORDER BY cl) AS 组内排名3,
- --T_time组内,cl排名
- dense_rank () OVER (ORDER BY cl) AS 排名3_1
- --所有cl的排名
- FROM
- zsh_0220
- ORDER BY
- 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 内置数据集
新建模板,添加内置数据集,如下所示:
3.2 模板设置
将字段拖入对应的单元格中,模板设置如下:
给C2单元格添加“数字控件”
D2单元格输入公式:B2+C2
E2单元格输入公式:rank(D2, D2[!0], 0),其中D2[!0]表示D2扩展出来的所有单元格