水晶报告;图表专家:创建一个在X轴上有两个日期范围的图表

时间:2015-12-23 14:32:46

标签: sql charts crystal-reports

目前正在努力通过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技巧来容纳图表专家,我当然愿意尝试...而不是上面使用子报告;)

1 个答案:

答案 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中的图表变得更加容易,当然可以处理变量的开始/结束日期。