Crystal reports 使用按月份分组的特定类型的记录创建图表,并使用移动余额

Crystal reports 使用按月份分组的特定类型的记录创建图表,并使用移动余额,crystal-reports,sage-crm,Crystal Reports,Sage Crm,我正试图从我的数据库(Sage CRM)中的一个表中创建一个水晶图表(条形图或线条图) 记录如下: CustomerId Date Invoice Amount 1234 3/4/2013 Cust Invoice 3322.00 1234 3/4/2013 Payment 2445.00 1234

我正试图从我的数据库(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 
因此,我希望有一份符合以下标准的报告

  • 仅过去12个月的记录按月份分组
  • 仅发票类型的付款、发票和利息
  • 计算所有发票金额的移动余额
  • (显示2012年7月的信息时,移动余额将是该日期之前所有发票的总和。 如果没有此字段,我可以使用select expert创建图表(没有问题,但我现在不确定该怎么办)


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

    在报告中创建日期参数,以便在运行所需数据的报告时,立即提取时过滤掉记录

    现在,您可以使用公式字段在报表中手动输入数据


    对我来说,编写存储过程是一项有点繁忙的任务,因为您可以在报表中手工处理数据。我无意不尊重任何人的意见,但坦率地说,这是我的意见。

    在报告中创建日期参数,以便在您现在运行报告时,在提取时过滤掉记录,同时保留所需的数据

    现在,您可以使用公式字段在报表中手动输入数据


    对我来说,编写存储过程是一项有点繁忙的任务,因为您可以在报表中手工处理数据。我无意不尊重任何人的意见,但坦率地说,这是我的意见。

    如果是这样的话,我建议瑞秋·雪莉:

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

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

     IF {YourInvoiceField} IN ["Payment", "Invoice", "Interest] THEN FALSE ELSE TRUE
    
    对于您的日期要求,您需要使用选择公式。。。代码应该是这样的

     {YourDateHere} > DateAdd ("yyyy", -1, CurrentDate) AND {YourDateHere} < CurrentDate
    
    {YourDateHere}>DateAdd(“yyyy”、-1,CurrentDate)和{YourDateHere}
    上面的代码基本上查看运行报表的日期和一年前的日期

    对于你的移动平衡,你应该能够通过向导实现


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

    ,在这种情况下,我推荐以下内容

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

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

     IF {YourInvoiceField} IN ["Payment", "Invoice", "Interest] THEN FALSE ELSE TRUE
    
    对于您的日期要求,您需要使用选择公式。。。代码应该是这样的

     {YourDateHere} > DateAdd ("yyyy", -1, CurrentDate) AND {YourDateHere} < CurrentDate
    
    {YourDateHere}>DateAdd(“yyyy”、-1,CurrentDate)和{YourDateHere}
    上面的代码基本上查看运行报表的日期和一年前的日期

    对于你的移动平衡,你应该能够通过向导实现


    编辑-另一种方法是使用参数字段(我个人不喜欢),这只是意味着每次刷新报告时都必须输入参数,这些参数是不言自明的,但在花了将近一周的时间解决这个问题后,您可以找到一个指南,在一位专家的大力帮助下,我终于找到了解决办法

    为了创建一个金额,即自时间开始以来公司、月份和发票类型的所有记录的总和,同时只显示去年的记录,我创建了一个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}
    
    选择
    //报告的所有字段,
    动结余
    从myInvoiceTable作为mit
    左连接(
    选择customerID,总和(金额)作为金额
    从myInvoiceTable
    其中记录\输入(‘付款’、‘发票’、‘利息’)
    和日期<{?报告开始日期}
    按客户分组(ID)移动余额
    在mit.customerID=movingBalance.customerID上
    其中mit.RecordType输入('付款','发票','利息')
    和mit.Date>={?报告开始日期}
    
    和mit.Date在这个问题上花了将近一周的时间,在一位专家的大力帮助下,我终于找到了解决办法

    为了创建一个金额,即自时间开始以来公司、月份和发票类型的所有记录的总和,同时只显示去年的记录,我创建了一个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}
    
    选择
    //报告的所有字段,
    动结余
    从myInvoiceTable作为mit
    左连接(
    选择customerID,总和(金额)作为金额
    从myInvoiceTable
    其中记录\输入(‘付款’、‘发票’、‘利息’)
    和日期<{?报告开始日期}
    按客户分组(ID)移动余额
    在mit.customerID=movingBalance.customerID上
    其中mit.RecordType输入('付款','发票','利息')
    和mit.Date>={?报告开始日期}
    
    还有麻省理工学院。你能就你的设置多提一点建议吗?您是否能够在数据库上创建存储的进程?如果是这样,我建议创建一个带有一些@parameters的存储过程。这样,您可以在crystal中刷新报告时设置日期和发票类型。移动平衡可以很容易地创建使用运行的总字段。。。如果你能提供更多信息,我很乐意提供帮助。嗨,亚历克,情况是我有13周的工作经验,我是3周前开始工作的,没有人指导我,因为没有其他it人员(只有会计师知道得很少)。我正在安装wampserver以便