【问题标题】:crystal reports - formula field conditional statement on what records to sumCrystal 报告 - 关于要汇总的记录的公式字段条件语句
【发布时间】:2011-11-11 11:38:44
【问题描述】:

水晶报表公式字段 再会, 我正在制作水晶报表的销售报告 - VS2010 c#

我在 MS SQL 中有这个视图

vSales

OrderNo

OrderDate

Amount

PaymentType

付款方式可以是现金或支票 我执行全选因为我需要在同一个报告中

那么我如何获得 PaymentType 等于现金的 Amount 的总和?

我在公式研讨会中使用 Sum 作为我的总金额,包括支票和现金

Sum ({vDailySales.Amount})

我无法修改我的 SELECT 语句,因为我需要现金和支票付款的所有记录

【问题讨论】:

    标签: c# crystal-reports


    【解决方案1】:

    创建两个公式 - CashAmount 和 CheckAmount,例如第二个:

    if {vDailySales.PaymentType}="cheque" 
    then {vDailySales.Amount}
    else 0
    

    在报告时,使用上述公式的聚合 - 例如 Sum({@CashAmount})。

    【讨论】:

    • +1 不知道为什么我忘了提及这项技术。该字段的总和也可以用于标题部分(运行总计字段不能)。此外,如果您将此公式更改为 if {vDailySales.PaymentType}="cheque" then {vDailySales.Amount}(删除公式的 else 部分),您可以使用汇总字段轻松计算平均值。由缺少的 else 部分创建的空值将从计算中排除。
    • 这行得通。为什么不能将两个功能合二为一,减少编码量
    • @GoldenLion 您需要在报告中显示两个不同的总计 - 您不能从单个公式返回两个值。顺便说一句,你有什么反对编码的? :)
    【解决方案2】:

    第三种选择是使用运行总计字段。由于它们的计算方式,它们需要位于页脚部分。

    要创建一个,请按照下列步骤操作:

    1. 选择画布上的 {vDailySales.Amount} 字段,右键单击,然后选择插入、运行总计..​​.
    2. 根据需要设置 Running Total Name 字段,可能是“Sum of Cash”。
    3. 确保摘要类型为“总和”。
    4. 选择“使用公式”选项,单击条件公式按钮,然后输入以下内容作为公式文本: {vDailySales.PaymentType}="现金"
    5. 如果此 RT 字段将按组计算数量,请选择“从不”作为重置选项或“更改组”(选择适当的组)。
    6. 在报表页脚部分放置字段。

    对汇总支票的第二个运行总计字段重复该过程(将第 4 步更改为引用“支票”而不是“现金”。

    【讨论】:

      【解决方案3】:

      我会使用两种方法;取决于我想要的输出。

      第一种方式,也是最简单的方式是按付款类型分组。然后在组的页脚中创建一个总和。您可以使用“Running Total”工具或使用下面的代码。

      SUM({vDailySales.Amount}, {vDailySales.PaymentType})
      

      这将显示每种付款类型的结果,因此在您的情况下显示两次,一次是现金,一次是支票。

      我认为通过这里您可以在总计的“评估”部分中使用公式;您将在其中使用真/假陈述来表示您想要显示的内容。例如,“现金”的陈述是:

      if {vDailySales.PaymentType}="Cash" then true else false
      

      如果您想要总计,另一种方法会更简单,那就是使用条件总和。

      在头部定义变量:

      SHARED numbervar sumcash;
      SHARED numbervar sumcheque;
      sumcheque:=0;
      sumcash:=0;
      

      然后对于报告中的每一行;添加一个字段以有条件地汇总金额;使用如下公式:

      SHARED numbervar sumcash;
      SHARED numbervar sumcheque;
      
      if {vDailySales.PaymentType}="cheque" then
           sumcheque = sumcheque + {vDailySales.Amount};
      else
           sumcash = sumcash + {vDailySales.Amount};
      

      然后在报表的底部,制作一个公式,分别显示每个变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        相关资源
        最近更新 更多