【问题标题】:SSRS Calculations with multiple datasets using clng function使用 clng 函数对多个数据集进行 SSRS 计算
【发布时间】:2020-09-23 15:45:15
【问题描述】:

我有一份包含 3 个数据集的报告。每个数据集都从不同的数据仓库中提取数据,但都提取相同的数据。在我的报告末尾,我有一个表格,它从每个数据集中获取总计,并且我已经成功地为普通总计字段完成了此操作。但是,有些字段是百分比。下面是我在文本框中的表达式示例。

我正在使用一个数据集从表中获取现有表达式,并尝试从每个数据集中添加值,以便获得总百分比。

使用 1 个数据集的字段

=Code.SafeDivideVariance(Sum(CLng(Fields!TP_Sales_Retail.Value)), 
Sum(CLng(Fields!LY_Sales_Retail.Value)))

结合所有数据集的字段

=Code.SafeDivideVariance(
Sum(CLng(Fields!Field1.Value, "Dataset1")) +
Sum(CLng(Fields!Field1.Value, "Dataset2")) +
Sum(CLng(Fields!Field1.Value, "Dataset3")) +
, 
Sum(CLng(Fields!Field2.Value, "Dataset1")) +
Sum(CLng(Fields!Field2.Value, "Dataset2")) +
Sum(CLng(Fields!Field2.Value, "Dataset3"))
)

但是,当我尝试此操作时,我收到以下错误。 "textrun 的值表达式包含错误:[BC30198]) 预期。

Error

更新我添加了两个字段,一个是代码

=Sum(CLng(Fields!TP_Sales_Retail.Value), "Dataset1") + 
Sum(CLng(Fields!TP_Sales_Retail.Value), "Dataset2") +  
Sum(CLng(Fields!TP_Sales_Retail.Value), "Dataset3")

和其他的

=Sum(CLng(Fields!LY_Sales_Retail.Value), "Dataset1") + 
Sum(CLng(Fields!LY_Sales_Retail.Value), "Dataset2") + 
Sum(CLng(Fields!LY_Sales_Retail.Value), "Dataset3")

我收到以下错误

文本框“Textbox11”的值表达式具有对聚合函数无效的范围参数。范围参数必须设置为字符串常量,该常量等于包含组的名称、包含数据区域的名称或数据集的名称。

即使我只是尝试,我也会遇到同样的错误

=Sum(CLng(Fields!TP_Sales_Retail.Value), "Dataset2")

更新 2.0

这是报表设计,数据集 2 和 3 与数据集 1 相同,但它们查看各自的数据源。

Report design 1

Report design 2

Report Design 3

前 3 个表正在查看单个数据源。最后一张表看起来像 dataset1,但我将每个字段中所有 3 个的总数相加。

Report Layout

【问题讨论】:

  • 您能否发布一份报告设计的屏幕截图,包括显示数据集和字段名称的报告数据面板,以及显示行和列组(如果有)的分组面板。

标签: ssrs-2008


【解决方案1】:

我现在无法对此进行测试,但请尝试以下操作

=Code.SafeDivideVariance(
Sum(CLng(Fields!Field1.Value), "Dataset1") +
Sum(CLng(Fields!Field1.Value), "Dataset2") +
Sum(CLng(Fields!Field1.Value), "Dataset3") +
, 
Sum(CLng(Fields!Field2.Value), "Dataset1") +
Sum(CLng(Fields!Field2.Value), "Dataset2") +
Sum(CLng(Fields!Field2.Value), "Dataset3")
)

我认为需要指定范围的是 out 聚合函数(在您的情况下为 SUM)。您的原始代码的范围是 CLng 函数的一部分

更新 我实际上看不出有什么不妥。我已经用一些示例数据进行了测试,它按预期工作。

我建议您添加 2 个文本框来显示您传递给自定义函数的每个值的结果。那里可能有问题。例如第一个文本框将 vaule 表达式设置为

=Sum(CLng(Fields!TP_Sales_Retail.Value), "Dataset1") + Sum(CLng(Fields!TP_Sales_Retail.Value), "Dataset2") +  Sum(CLng(Fields!TP_Sales_Retail.Value), "Dataset3")

确保您在此处看到的值是您所期望的。

如果这不起作用,请编辑您的问题并显示一些示例数据,以便我可以重现该问题。就目前而言,它按预期工作。

【讨论】:

  • 当我尝试得到以下错误 “文本框的值表达式具有对聚合函数无效的范围参数。范围参数必须设置为字符串常量,等于包含组的名称、包含数据区域的名称或数据集的名称。"
  • 你需要把safedevidevariance代码贴出来,我明天去看看(这里已经快半夜了)
  • 这是代码,这里只有早上 =) =Code.SafeDivideVariance( Sum(CLng(Fields!TP_Sales_Retail.Value), "Dataset1") + Sum(CLng(Fields!TP_Sales_Retail.Value), "Dataset2") + Sum(CLng(Fields!TP_Sales_Retail.Value), "Dataset3") , Sum(CLng(Fields!LY_Sales_Retail.Value), "Dataset1") + Sum(CLng(Fields!LY_Sales_Retail.Value), "Dataset2") + Sum(CLng(Fields!LY_Sales_Retail.Value), "Dataset3") )
  • 我需要查看您正在使用的 SafeDivideVariance 函数的自定义代码,而不是您使用它的表达式。
  • 对不起,我是新手。 Public Function SafeDivideVariance(Numerator as String, Denominator as String) as String Try If Numerator = "" or Denominator = "" then Return "-" End if If Numerator = "-" or Denominator = "-" then Return "-" End If If CDbl(Numerator) =0 or CDbl(Denominator) = 0 then Return "-" End if If (IsNothing(Numerator)) Or (IsNothing(Denominator)) Then Return "-" End If Return String.format(((Numerator/ Denominator )-1).ToString("0.0%")) Catch ex as exception Return ex.message End Try End Function
【解决方案2】:

数据集输入错误,与我的实际数据集名称不匹配。集合中的 S 必须是大写字母。

=Code.SafeDivideVariance(
Sum(CLng(Fields!Field1.Value), "DataSet1") +
Sum(CLng(Fields!Field1.Value), "DataSet2") +
Sum(CLng(Fields!Field1.Value), "DataSet3") +
, 
Sum(CLng(Fields!Field2.Value), "DataSet1") +
Sum(CLng(Fields!Field2.Value), "DataSet2") +
Sum(CLng(Fields!Field2.Value), "DataSet3")
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多