Crystal Report 2008 指标排名

paidichina 2009-08-19 04:56:59
数据结构
columnA columnB
C1 100
C2 200
C3 200
C4 300
C5 150

需要的效果
sum 排名
A1 300 2
A2 200 3
A3 450 1

其中A1=C1+C2
A2=C3
A3=C4+C5
A1、A2、A3位置固定,

如何实现?
...全文
84 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿泰 2009-08-19
  • 打赏
  • 举报
回复
这个不是明显的就是不同指标吗,呵呵

你说的那个变量,case的含义,就是你要把同一列上不同行集转换成列啊
那其实一样
先用子查询行别列,然后再在子查询基础上排名就成了
paidichina 2009-08-19
  • 打赏
  • 举报
回复
你这个是否是不同指标内部的值的排序?
现在基本有思路了
1、自定义度量放在数据库做,不用CR去做自定义的变量
2、在CR中设置一个变量,将不同的数据库数量字段和关键字对应,这个是否可以通过Case语句实现,行变列
3、对一个变量进行排名
阿泰 2009-08-19
  • 打赏
  • 举报
回复
不同指标的排名,这个就是基本的sql语法了

下面是我最近写的一个类似的脚本的一部分,你可以参考下,Oracle

select
region_code,
branch_company_code,
region_name,
branch_company_name,
catname,
aa_number_ty amt1,
rank() over(partition by catname ORDER BY aa_number_ty DESC) amt2,
aa_premium_ty amt3,
rank() over( partition by catname ORDER BY aa_premium_ty DESC) amt4,
Decode(aa_premium_ly,0,0,aa_premium_ty /aa_premium_ly) amt5,
rank() over( partition by catname ORDER BY Decode(aa_premium_ly,0,0,aa_premium_ty /aa_premium_ly) DESC) amt6,
aa_number_tm amt7,
rank() over( partition by catname ORDER BY aa_number_tm DESC) amt8,
aa_premium_tm amt9,
rank() over( partition by catname ORDER BY aa_premium_tm DESC) amt10,
Decode(aa_premium_smly,0,0, aa_premium_tm /aa_premium_smly) amt11,
rank() over( partition by catname ORDER BY Decode(aa_premium_smly,0,0, aa_premium_tm /aa_premium_smly) DESC) amt12

from
mytable
where
R_DISPLAY=3
and
aa_date='20090719'
paidichina 2009-08-19
  • 打赏
  • 举报
回复
可以在数据库中获得A1A2A3的值,但必须是不同的变量,即将CR的求和放在数据库处理,在CR中还必须面对不同的度量如何进行排名的问题?
paidichina 2009-08-19
  • 打赏
  • 举报
回复
求和可以在数据库中做出来。
如此问题就变为:不同指标如何进行排名?当然排名要和其对应的度量在一行排列
阿泰 2009-08-19
  • 打赏
  • 举报
回复
行集数据,有多少个也无所谓
只是你的逻辑会相应的多一些,这个求和虽然可以放在水晶报表端,但是水晶报表做不出求和后的排名
所以你只能在你的库里算的

水晶报表本身对多维的展现能力有限,所以不管你的数据是怎样的,
你可能不得不组织成一个平面数据去操作
比如,先建立一个全维度的view,然后再用sql在这个view上去处理行集规则加和。如果可能的话就同时排名,不行的话还要另外一个中间结果集来处理。

paidichina 2009-08-19
  • 打赏
  • 举报
回复
谢谢大家的回复
首先,不止三个,我拿出三个是为了举例,实际上有几十个。
次,不是RSQL,是多维数据。
再,A是会计科目,C是最底的科目。
大家拿个会计利润表出来就明白了。要本年和去年的排名,
阿泰 2009-08-19
  • 打赏
  • 举报
回复
水晶报表里做不到排名效果,可以再SQL里做个排名字段的别名,然后再做报表

SQL Server里现在已经支持 rank() over 排名了,可以参考

http://www.cnblogs.com/minzhuhu/articles/1270114.html
llsen 2009-08-19
  • 打赏
  • 举报
回复
如果显示按顺序的话,好办,直接在数据源里面排序

select A,sum from table order by sum


然后用公式字段,累加1显示就好了,或者数据源里面处理下也好

不过要是你说的顺序显示,就不知道了

如果你就这三条数据,可以用参数处理

4,816

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧