Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL Server报表中创建报表文本框聚合表达式?_Sql_Sql Server_Reporting Services - Fatal编程技术网

如何在SQL Server报表中创建报表文本框聚合表达式?

如何在SQL Server报表中创建报表文本框聚合表达式?,sql,sql-server,reporting-services,Sql,Sql Server,Reporting Services,我有一个SQL Server Reporting Services报告,其中有一个包含大量字段的表,然后是一个文本框,我想在其中显示总权重。现在,总重量由一个巨大的表达式决定: =Sum(Round(Code.ConvertWgt(Switch(Parameters!OrderLength.Value = "T",Fields!TotalTheorWeight.Value ,Parameters!OrderLength.Value = "C",Fields!TotalCutWeight

我有一个SQL Server Reporting Services报告,其中有一个包含大量字段的表,然后是一个文本框,我想在其中显示总权重。现在,总重量由一个巨大的表达式决定:

=Sum(Round(Code.ConvertWgt(Switch(Parameters!OrderLength.Value = 
"T",Fields!TotalTheorWeight.Value
    ,Parameters!OrderLength.Value = "C",Fields!TotalCutWeight.Value
    ,Parameters!OrderLength.Value = "P",Fields!TotalPayWeight.Value
    ,Parameters!OrderLength.Value = 
"OD",Switch(Fields!Calculate_Weight_Using_ID.Value = 
"T",Fields!TotalTheorWeight.Value                                    
,Fields!Calculate_Weight_Using_ID.Value = "C",Fields!TotalCutWeight.Value
,Fields!Calculate_Weight_Using_ID.Value = "P",Fields!TotalPayWeight.Value
)
),Switch(Parameters!WeightUnit.Value = "orderdflt"
,Fields!Default_Weight.Value,True,Parameters!WeightUnit.Value))
,CInt(IIF(Parameters!WeightPrecision.Value="uomdefault",Fields!Weight_Precision.Value,Parameters!WeightPrecision.Value))))
但是,我在尝试预览报告时看到以下错误:

文本框“TotalWeight”的值表达式使用不带范围的聚合表达式。除非报表仅包含一个数据集,否则数据区域之外使用的所有聚合都需要一个作用域

因此,我尝试将其更改为:

=Sum(IiF(Round(Code.ConvertWgt(Switch(Parameters!OrderLength.Value = 
"T",Fields!TotalTheorWeight.Value
    ,Parameters!OrderLength.Value = "C",Fields!TotalCutWeight.Value
    ,Parameters!OrderLength.Value = "P",Fields!TotalPayWeight.Value
,Parameters!OrderLength.Value = "OD",Switch(Fields!Calculate_Weight_Using_ID.Value = "T",Fields!TotalTheorWeight.Value
                                            ,Fields!Calculate_Weight_Using_ID.Value = "C",Fields!TotalCutWeight.Value
                                            ,Fields!Calculate_Weight_Using_ID.Value = "P",Fields!TotalPayWeight.Value
    )
),Switch(Parameters!WeightUnit.Value = "orderdflt"
    ,Fields!Default_Weight.Value,True,Parameters!WeightUnit.Value))
    ,CInt(IIF(Parameters!WeightPrecision.Value="uomdefault",Fields!Weight_Precision.Value,Parameters!WeightPrecision.Value)))), "Order")
Order是我要使用的数据集的名称。但是,我看到了这个错误:

textrun“TotalWeight.段落[0].TextRuns[0]”的值表达式包含错误:[BC30516]重载解析失败,因为没有可访问的“IIf”接受此数量的参数


我该如何着手解决这个问题?谢谢

IIF类似于Excel中的IF-where=IF[某些测试],[如果为true,则执行此操作],[如果为false,则执行此操作]。。。因此,根据括号和逗号,基本上省略了[if true do this]和[if false do this],这就是为什么会出现第二个错误消息,即没有足够的参数

对于原始错误消息,您是否可以不使用文本框,而是在一个包含一行和一列的空白表中输入并将其连接到数据集

或者您是否考虑过在数据集中设置该值,然后将该数据集设置为参数值,然后使用文本框中的参数

您还可以深入阅读本文:


或者这个交叉发布的问题-我认为这是您需要做的:

因此,要解决每个表达式,第一个错误指示您需要指定总和聚合的范围。这就像添加数据集的名称一样简单,数据来自最后一个括号内。您需要添加…,YourDatasetName,这样下面的代码就可以工作了——尽管如此复杂的表达式肯定会有其他问题。例如,如果不知道参数需要什么,我们就不可能知道ConvertWgt是否能够正常工作

=Sum(Round(
    Code.ConvertWgt(
    Switch(
        Parameters!OrderLength.Value = "T", Fields!TotalTheorWeight.Value
        ,Parameters!OrderLength.Value = "C",Fields!TotalCutWeight.Value
        ,Parameters!OrderLength.Value = "P",Fields!TotalPayWeight.Value
        ,Parameters!OrderLength.Value = "OD",
            Switch( Fields!Calculate_Weight_Using_ID.Value = "T",Fields!TotalTheorWeight.Value                                    
                    ,Fields!Calculate_Weight_Using_ID.Value = "C",Fields!TotalCutWeight.Value
                    ,Fields!Calculate_Weight_Using_ID.Value = "P",Fields!TotalPayWeight.Value
                  )
          ),Switch(Parameters!WeightUnit.Value = "orderdflt"
    ,Fields!Default_Weight.Value,True,Parameters!WeightUnit.Value))
    ,CInt(IIF(Parameters!WeightPrecision.Value="uomdefault",
              Fields!Weight_Precision.Value,
              Parameters!WeightPrecision.Value)))
    , "Order")
不幸的是,第二个表达是一团糟,我不确定它是否可以挽救。你试图添加一个IIF,但根据我的判断,没有条件语句可以计算。基本上,您只需舍入一个巨大的switch语句,没有真或假部分,表达式的计算方式也不能提供真或假结果


我知道您已经接受了一个答案,但我已经回答了一半,所以我将发布它,因为另一个答案没有解释如何修复这些表达式。

我甚至没有考虑创建另一个表并将其连接到数据集。这就是我最后做的,因为这是最简单的解决方案,谢谢!