目前正在努力通过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技巧来容纳图表专家,我当然愿意尝试...而不是上面使用子报告;)
答案 0 :(得分:2)
您最好的解决方案是更改传入的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中的图表变得更加容易,当然可以处理变量的开始/结束日期。