目前正在努力通过Crystal Reports中的图表实现我想要的功能.
我有一个开始和结束日期的参数,所以图表是动态的
在X轴中,我希望能够指定两个日期……一个是已收到,另一个是已完成.
因此,我们将在图表专家中看到一个条形图
"On Change of"
with the Recieved date (for each month) and Completed date (for each month)
"Show Value(s):"
DistinctCount(ItemsToCount)
此图表的目的是显示每月比较任何给定月份中接收和完成的ItemsToCount的月份.
我认为我面临的问题是有时候同一个月内的收到日期和完成日期可能会导致问题.或者可能是在上个月收到了ItemToCount但尚未完成…
在问这个之前,我创建了一个非常静态的图表,有逻辑可言,
if the month(received)=1 THEN ItemsToCount ELSE {@Null}
在完成的几个月里,我有12个这样的公式加上另外12个公式.
但现在终端用户要求更长的时间……所以我不认为静态方法适用于此图表!
任何帮助是极大的赞赏.如果有任何SQL技巧来容纳图表专家,我当然愿意尝试…而不是上面使用子报告;)
最佳答案 您最好的解决方案是更改传入的SQL以与要在图表中显示的数据紧密匹配. (在改变SQL方面你有更多的灵活性/能力,而不是试图破坏Crystal Charting).因此,如果您还没有,请切换报表数据源以使用SQL命令并使用类似于以下内容的命令:
select
ISNULL(tbl1.MNTH, tbl2.MNTH) as RptMonth,
ISNULL(tbl1.CNT,0) as ReceivedCount,
ISNULL(tbl2.CNT,0) as CompletedCount
from
(select dateadd(month, datediff(month, 0, R.RCV_DT),0) as MNTH, COUNT(*) as CNT
from T_YOUR_SOURCE_TABLE R
GROUP BY dateadd(month, datediff(month, 0, R.RCV_DT),0)
) tbl1
FULL OUTER JOIN
(select dateadd(month, datediff(month, 0, R.INV_DT),0) as MNTH, COUNT(*) as CNT
from T_YOUR_SOURCE_TABLE R
GROUP BY dateadd(month, datediff(month, 0, R.INV_DT),0) ) tbl2
on tbl1.MNTH = tbl2.MNTH
where ISNULL(tbl1.MNTH, tbl2.MNTH) between '{CrystalStartDateParam}' and '{CrystalEndDateParam}'
order by tbl1.MNTH
这样,您就可以使用如下格式将数据提取到报表中:
RptMonth ReceivedCount CompletedCount
2005-01-01 00:00:00.000 1465 1269
2005-02-01 00:00:00.000 1264 1163
2005-03-01 00:00:00.000 1466 1561
2005-04-01 00:00:00.000 1505 1504
2005-05-01 00:00:00.000 1329 1416
2005-06-01 00:00:00.000 1540 1529
2005-07-01 00:00:00.000 1263 1216
2005-08-01 00:00:00.000 1249 1316
2005-09-01 00:00:00.000 1520 1460
2005-10-01 00:00:00.000 1448 1240
2005-11-01 00:00:00.000 1321 1239
2005-12-01 00:00:00.000 1421 1302
然后,这使得Crystal中的图表变得更加容易,当然可以处理变量的开始/结束日期.