【问题标题】:Crystal Reports; Chart Expert: creating a chart with two date ranges in X axis水晶报表;图表专家:在 X 轴上创建具有两个日期范围的图表
【发布时间】:2015-12-24 00:08:39
【问题描述】:

目前正在努力在 Crystal Reports 中实现我想要的图表。

我有开始和结束日期的参数,所以图表是动态的 在 X 轴上,我希望能够指定两个日期...一个是 Received,另一个是 Completed

所以我们会在图表专家中看到一个具有

的条形图
"On Change of" 
    with the Recieved date (for each month) and Completed date (for each month)

"Show Value(s):"
    DistinctCount(ItemsToCount)

此图表的目的是显示在任何给定月份中已收到已完成的 ItemsToCount 的逐月比较。

我认为我面临的问题是有时 Received 日期和 Completed 日期在同一个月内,这可能会导致问题。或者可能是 ItemToCount 在上个月已收到,但尚未完成...

在问这个之前,我创建了一个漂亮的静态图表,有逻辑可以说,

if the month(received)=1 THEN ItemsToCount ELSE {@Null} 

我有 12 个这些公式,再加上 已完成个月的另外 12 个。

但现在最终用户要求更长的时间段...所以我认为静态方法不适用于此图表!

非常感谢任何帮助。如果有任何 SQL 技巧来适应图表专家,我当然愿意尝试……不超过使用子报表;)

【问题讨论】:

    标签: sql charts crystal-reports


    【解决方案1】:

    您最好的解决方案是更改传入的 SQL 以紧密匹配您希望在图表中显示的数据。 (与试图硬塞水晶图表相比,您在更改 SQL 方面拥有更大的灵活性/能力)。因此,如果您还没有,请将您的报表数据源切换为使用 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 中的图表更容易,当然可以处理可变的开始/结束日期。

    【讨论】:

    • 我要试一试。感谢您的快速回复!
    • 好人。我没有考虑完全使用 ISNULL 函数以及 FULL OUTER JOIN。我认为我之前的错误是我有一个开始日期和结束日期的连接,说接收日期或完成日期在日期范围内......它不够具体,这是真正执行完整 SQL 命令的地方闪耀。非常感谢@Douglas!
    猜你喜欢
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    相关资源
    最近更新 更多