【问题标题】:Create a chart using the records of certain type grouped by month, with a moving balance使用按月分组的特定类型的记录创建图表,余额移动
【发布时间】:2013-07-30 08:58:57
【问题描述】:

我正在尝试从我的数据库 (Sage CRM) 中的一个表中创建一个水晶图表(条形或线形)。

记录如下

CustomerId      Date            Invoice              Amount

1234           3/4/2013        Cust Invoice           3322.00   
1234           3/4/2013        Payment                2445.00  
1234           4/5/2013        A/c transaction         322.00  
1234           5/6/2013        interest                 32.00 
1234           6/6/2013        payment                 643.00 

所以我想要一份符合以下条件的报告

  1. 仅按月份分组的过去 12 个月的记录
  2. 仅限付款、发票和利息的发票类型
  3. 计算所有发票金额的移动余额,即

(当显示 2012 年 7 月的信息时,移动余额将是该日期之前所有发票的总和。 如果没有这个字段,我可以使用选择专家创建图表没有问题,但我现在不知道该怎么做)

我应该使用交叉表吗?如果是这样,我将如何选择仅显示我想要的发票和我想要的日期范围?

【问题讨论】:

  • 您能提供更多关于您的设置的建议吗?你有能力在数据库上创建存储过程吗?如果是这样,我建议使用一些 @ 参数创建一个存储过程。这样,您可以在刷新水晶报表时设置日期和发票类型。可以使用运行总计字段轻松创建移动余额...如果您提供更多信息,我很乐意提供帮助。
  • 嗨 Alec,情况是我有 13 周的工作经验,我是 3 周前开始的,没有人指导我,因为没有其他 IT 人(只有会计非常了解小的)。我正在安装 wampserver,以便我可以创建一个存储过程。还有什么你想知道的吗?

标签: crystal-reports sage-crm


【解决方案1】:

在这个问题上花了将近一周的时间,在专家的大力帮助下,我终于找到了解决方案。

为了创建一个金额,该金额是自一开始以来公司、月份和发票类型的所有记录的总和,同时只显示去年的记录,我创建了一个 SQL 命令

Select 
  //All of the fields for the report,
  movingBalance.Amount
from myInvoiceTable as mit
  <join to any other tables for the report>
  left join (
    select customerID, sum(amount) as Amount
    from myInvoiceTable
    where Record_Type in ('Payment', 'Invoice','Interest')
      and Date < {?Report Start Date}
    group by customerID) movingBalance
   on mit.customerID = movingBalance.customerID
where mit.RecordType in ('Payment', 'Invoice','Interest')
  and mit.Date >= {?Report Start Date}
  and mit.Date <= {?Report End Date}

使用命令有几个技巧:

  1. 出于性能原因,您通常希望在单个命令中包含报告的所有数据。避免连接多个命令或将一个或多个表连接到一个命令。
  2. 在命令中过滤数据,而不是在报告的 Select Expert 中。
  3. 在命令编辑器中创建任何参数,而不是在主报告中。在报告中创建的参数在命令编辑器中不起作用。

这已经成功了。

【讨论】:

    【解决方案2】:

    在报告中创建日期参数以过滤掉现在获取时的记录,当您运行报告时留下您需要的数据。

    现在您可以使用公式字段来处理报表内的数据。

    在我看来,编写存储过程有点繁琐,因为您可以操作报表中的数据。我无意不尊重任何人的意见,但坦率地说这是我的意见。

    【讨论】:

      【解决方案3】:

      在这种情况下,我会推荐以下 Rachsherry。

      对于标准第 1 部分和第 2 部分,我认为使用公式可能更容易,而不是使用存储过程。

      对于发票,右键单击发票字段,然后在常用选项卡中的“格式字段”,在 Suppress 选项旁边有一个公式按钮,输入以下...

       IF {YourInvoiceField} IN ["Payment", "Invoice", "Interest] THEN FALSE ELSE TRUE
      

      对于您的日期要求,您需要使用选择公式...该代码应如下所示

       {YourDateHere} > DateAdd ("yyyy", -1, CurrentDate) AND {YourDateHere} < CurrentDate
      

      上面的代码基本上是查看报告运行之日和一年前之间的日期。

      对于您的移动平衡,您应该能够通过指南here 实现这一目标

      编辑 - 另一种方法是使用参数字段(我个人不喜欢),这意味着每次刷新报告时都必须输入参数,它们是不言自明的,但您可以找到指导here

      【讨论】:

      • 嗨,Alec,我尝试了您上面的建议,但限制图表的数据是不够的,虽然它停止在报告中显示记录,但它们仍然出现在图表中。
      猜你喜欢
      • 1970-01-01
      • 2014-12-26
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多