【发布时间】:2016-03-05 19:19:46
【问题描述】:
我在尝试创建变量聚合时遇到了 IIF 错误。
我使用的是报表生成器 3.0
我有一份报告,用户可以在其中确定报告中包含哪些字段。这些字段作为多值参数传递。我使用来自不同数据集的查找来确定其在报表中的位置,并使用相同的顺序数据集来确定该字段是否为数字(这意味着我想根据行级分组对值求和)。标题使用相同的字段查找拉入,效果很好。在行级别,我尝试返回基于行分组的字段值的总和,或者如果不是数字,则返回该值。根据类似的帖子,我了解到对真假部分都进行了处理。我试图通过嵌套另一个IIF 来抵消这个错误。如果我删除 sum 函数,数据将返回非数字数据。但是,如果我包含 sum 函数,数字数据处理得很好,但非数字数据返回 #error。
我错过了什么?
这是我在下面引用的数据的定义:
lookupvalue:返回用户在存储过程中按照预定义的顺序选择的字段。
Fieldisnumeric:表示选择的字段是否为数字,0为假,1为真
Fielditem:tablix 中被引用的字段项
dtsselectedfields:我正在查找字段的列顺序和数值属性的数据集。
数字 1 表示用户选择的字段变量计数中的第一个位置。附加字段根据参数中传递的字段计数隐藏,并且是递增的(例如 1-n)。
=iif(Lookup(1, Fields!LookupValue.Value,
Fields!FieldIsNumeric.Value,"dtsSelectedFields")=0,
Fields(Lookup(1, Fields!LookupValue.Value, Fields!FieldItem.Value,
"dtsSelectedFields")).Value,iif(Lookup(1, Fields!LookupValue.Value,
Fields!FieldIsNumeric.Value, "dtsSelectedFields")=0,
Fields!MV.Value,sum(Fields(Lookup(1, Fields!LookupValue.Value,
Fields!FieldItem.Value, "dtsSelectedFields")).Value)))
****编辑 2015 年 12 月 1 日**** 为了更清楚起见,我提供了更多详细信息。下面是“dtsSelectedFields”数据集。
FieldItem_____LookupValue____FieldIsNumeric
项目1描述__________1__________________0
项目1总计__________2__________________1
项目 2 描述__________3__________________0
项目2总计__________4__________________1
假设我有一列数据,该列将首先查找 LookupValue 为 1。这将返回 FieldItem,“Item1Desc”。因为这个字段不是数字,所以我想返回 Item1Desc 的值。但是,假设我的第一个选择实际上是“Item1Total”,并且我不想返回非数字 Item1Desc 字段。在这种情况下,因为 'FieldIsNumeric'=1 表示一个数字字段,所以我想取这个字段的总和。
- 是否可以在 IIF 语句中仅在
IIF语句的一部分上嵌套聚合函数? IE。是真还是假? - 如果是这样,我做错了什么?
tablix 的一个例子:
示例布局
第 1 列标题____________第 2 列标题___________第 3 列标题
第 1 列数据______________第 2 列数据_____________第 3 列数据
样本数据
产品___________________原产国_________________单位
ABC 信封________________________中国______________________15
LMN 数据包_____________________印度_______________________30
在上面的示例中,用户选择了 3 列,“产品”、“原产国”和“单位”。如果我在存储过程中按它们分组,还有其他可用字段会导致多行(例如收购价格)。根据查找,我将列描述作为标题返回。行级详细信息如上所述(例如,返回产品名称和原产国,但总结单位)。
【问题讨论】:
-
谢谢亚历杭德罗。表达式为
Fields(Lookup(1, Fields!LookupValue.Value, Fields!FieldItem.Value, "dtsSelectedFields")).Value,这实际上返回了查找中指定的字段。例如,如果我要查找 LookupValue=1,我会返回字段项,例如 'Product' 或类似的东西。因此查找将返回“产品”,而真正的语句将返回 Fields("Product").Value。这确实返回了我正在寻找的值。问题是当我想返回数字列的总和或返回非数字列的值时。 -
@alejandrozuleta Fields() 是一个集合 - 您可以使用语法 Fields!Fieldname 或 Fields("Fieldname") 引用集合中的项目,因此第 6 行中的代码在这方面是正确的.
-
是的,@RyanL 指出了这一点。
-
@RyanL,将
Fields!MV.Value添加到问题数据集中,以便重现您的问题。此外,预期的 tablix 的屏幕截图也会很有用,因为可能有不同的方法可以获得您需要的结果。 -
感谢@alejandrozuleta,我已经更新了我的帖子以包含数据样本。请原谅没有截取数据,因为报告中的所有内容都将显示为
<<expr>>
标签: reporting-services report ssrs-tablix reportbuilder