SSRS Report Builder IIF错误,汇总

时间:2015-12-01 18:40:20

标签: reporting-services report ssrs-tablix reportbuilder

在尝试创建变量聚合时,我一直在努力解决IIF错误。

我正在使用Report Builder 3.0

我有一个报告,用户可以确定报告中的字段。这些字段作为多值参数传递。我使用来自不同数据集的查找来确定它在报表中的位置,并使用相同的订单数据集来确定该字段是否为数字(意味着我想根据行级别分组对值进行求和)。标题使用相同的字段查找拉入,这很好。在行级别,我试图返回基于行分组的字段值的总和,或者如果是非数字,则返回该值。根据类似的帖子,我了解到真假部分都经过处理。我试图通过嵌套另一个IIF来抵消这个错误。如果我删除sum函数,数据将返回非数字数据。但是,如果我包含sum函数,则数字数据处理正常,但非数字数据返回#error。

我错过了什么?

以下是我在下面引用的数据的定义:

lookupvalue :根据存储过程中的预定义顺序返回用户选择的字段。

Fieldisnumeric :表示所选字段是否为数字,0表示false,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)))

****编辑12/1/2015 **** 为了更加清晰,我提供了更多细节。下面是'dtsSelectedFields'数据集。

FieldItem _____的 LookupValue _____的 FieldIsNumeric
Item1Desc__________1__________________0
Item1Total__________2__________________1
Item2Desc__________3__________________0
Item2Total__________4__________________1

假设我有一列数据,此列首先会查找LookupValue为1.这将返回FieldItem,'Item1Desc'。因为这个字段不是数字,我想返回Item1Desc的值。但是我们假设我的第一个选择实际上是'Item1Total'而我不想返回非数字Item1Desc字段。在这种情况下,因为'FieldIsNumeric'= 1表示数字字段,我想取这个字段的总和。

  1. 是否可以仅在IIF语句的一部分上将聚合函数嵌套在IIF语句中?即真实的部分还是错误的部分?
  2. 如果是的话,我做错了什么?
  3. Tablix的一个例子:

    示例布局
    第1列标题 ____________ 第2列标题 ___________ 第3列标题
    第1栏数据____________第2栏数据____________第3栏数据

    示例数据

    产品 ___________________ 原产国 _________________ 单位
    ABC信封____________________China______________________15
    LMN Packets_____________________India_______________________30

    在上面的示例中,用户选择3列,“产品”,“原产国”和“单位”。如果我在存储过程中按它们分组(例如获取价格),还有其他可用字段会导致多行。根据查找,我将列描述作为标题返回。行级详细信息如上所述(例如,返回产品名称和原产国,但总结单位)。

1 个答案:

答案 0 :(得分:0)

作为上述问题的解决方法,我找到了一个(丑陋?)解决方案。

如上所述,用户可以选择任意数量的列,并且报告根据存储过程基于预定义的顺序将它们组织在列中。 (例如,如果选择了这两个列,则产品描述将在单位总和之前出现,但产品ID可能出现在产品描述之前,但仅在选择了ID时。)

对于用户可以选择的每个可能的列数,我在报告中添加了两列(即每个字段两列)。

前两列将引用lookupvalue = 1。然后,我将细节中每个字段的表达式设置为1)值的总和,或2)值本身。然后,我将列可见性设置为“FieldIsNumeric”列的结果。因此,当FieldIsNumeric = 0时,将隐藏将返回非数字数据错误的总和数字列,并且将显示引用查找值= 1的非数字列,反之亦然。

毋庸置疑,其他列将遵循两个集合中的相同逻辑,每个列都引用顺序查找值(例如,第3列和第4列将引用lookupvalue = 2,第5列和第6列将引用lookupvalue = 3,依此类推。匹配对中的每个列将根据同一查找数据集中FieldIsNumeric的返回值显示或隐藏。

我绝对乐于接受建议,但我认为我会发布这个解决方案。