水晶报表的多条件统计。

小可丁儿 2009-07-21 02:54:51
已有的表结构如下:
---------------------
年份月份 机构 金额A 金额B
0901 一部 300 300
0902 一部 200 400
0903 一部 400 200
0904 一部 200 200
0901 二部 300 200
0902 二部 100 200
0903 二部 200 200
0904 二部 100 100
-----------------------------
报表的最后要求是 显示每个部门的当月的统计以及这个月以前的所有金额的和的统计
例如:报表显示结果应该如下(1列 机构名 2列:相同机构下 金额A和金额B的4月以前的金额和,3列为相同机构下当月金额和。)以4月份为例:
--------------
机构 金额以往 金额当月
一部 1800 400
二部 1200 200
---------------
请问
水晶报表如何做到呢??请给我个思路 谢谢

...全文
188 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaozhijun0207 2009-07-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 butterzz2000 的回复:]
如果 分析放在水晶报表里 好不好呢?执行效率怎么样呢?
[/Quote]
先让报表显示出想要的数据效果,
最后再考虑执行效率,优化代码,这样比较好吧
小可丁儿 2009-07-21
  • 打赏
  • 举报
回复
这样的话 我只要以 日期 为搜索条件
获得数据集
然后 在以部门分组
就能获得逾期的数据了吧??
小可丁儿 2009-07-21
  • 打赏
  • 举报
回复
例如: 表名为A
列名:部门 Apart
金额A ChargeA
金额B chargeB
然后:
在预期的显示的结构:机构 金额以往 金额当月 中
新建一个参数:{?month}
[金额以往] 写个函数:if {A.MONTH}>{?month}
then Sum([{A.ChargeA},{A.ChargeB}])
[金额当月] 写个函数:if {A.MONTH}={?month}
then then Sum([{A.ChargeA},{A.ChargeB}])
-------------------

这些数据 是要分组吧。我就是对水晶报表的分组感念 怎么也理解不了
请 指教以下

小可丁儿 2009-07-21
  • 打赏
  • 举报
回复
我有个想法不知道对不对
既然用水晶报表 是不是 最好能够在水晶报表里 通过它已有的公式 对数据进行筛选呢?
如果 都是 通过数据库来对数据进行筛选
那水晶报表 不就知是成为了一个展现方式 而失去了他分析数据的意义了吗?

如果 分析放在水晶报表里 好不好呢?执行效率怎么样呢?
多谢 llsen给的代码
yanm7788 2009-07-21
  • 打赏
  • 举报
回复
直接在CR里头有个Running Total Fields里加个count应该也可以达到同样效果.
llsen 2009-07-21
  • 打赏
  • 举报
回复
我写的有点麻烦,应该,sql应该可以简化,不过功能是实现了
llsen 2009-07-21
  • 打赏
  • 举报
回复
创建表
CREATE TABLE [dbo].[Charge](
[Month] [datetime] NULL,
[Dept] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[ChargeOne] [int] NULL,
[ChargeTwo] [int] NULL
) ON [PRIMARY]


测试数据

/******************************************
2009-1-1 0:00:00 一部 300 300
2009-2-1 0:00:00 一部 200 400
2009-3-1 0:00:00 一部 400 200
2009-4-1 0:00:00 一部 200 200
2009-1-1 0:00:00 二部 300 200
2009-2-1 0:00:00 二部 100 200
2009-3-1 0:00:00 二部 200 200
2009-4-1 0:00:00 二部 100 100
******************************************/


检索sql语句
SELECT C.Dept AS '部门',C.Charge AS '金额以往',D.Charge AS '金额当月'
FROM (SELECT A.Dept,SUM(A.Charge) AS Charge
FROM (SELECT DEPT,ChargeOne + ChargeTwo AS Charge
FROM dbo.Charge
WHERE Month < '2009-04-01') AS A
GROUP BY A.Dept) AS C,
(SELECT DEPT,ChargeOne + ChargeTwo AS Charge
FROM dbo.Charge
WHERE Month = '2009-04-01') AS D
WHERE C.Dept = D.Dept



测试结果

/******************
二部 1200 200
一部 1800 400
******************/

然后报表上加散列,将数据填充上去就好了
小可丁儿 2009-07-21
  • 打赏
  • 举报
回复
多谢楼上 给我点思路 谢谢 如果实现起来不麻烦 最好能多给些点 呵呵
llsen 2009-07-21
  • 打赏
  • 举报
回复
你这个应该sql就能搞定
等下我试试

4,818

社区成员

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

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