sql – Crystal Reports;图表专家:创建一个在X轴上有两个日期范围的图表

目前正在努力通过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中的图表变得更加容易,当然可以处理变量的开始/结束日期.

点赞