SSRS 2012 在组页脚中使用带有 LookupSet 计数的 switch 语句

SSRS 2012 using switch statement with LookupSet count in group footer

很抱歉post。

我有一份 SSRS 2012 报告查看 2 个数据集,Dataset1Dataset2.
Dataset2 可能 return 0、1 或 2 条记录,因此我使用 LookupSet 来执行此操作。根据记录 returned,我需要显示几个字段。

报告按 Main_ID 分组。在 Main_ID 的页脚中,我正在计算 Dataset2 中 returned 记录的数量。

=LookupSet(Fields!MainID.Value, Fields!MainID.Value, Fields!Record_Name.Value, "Dataset2").Length

这很好用,我得到了 0、1 或 2。

Dataset2 中的字段:

HasIP 

将用于确定我显示的数组中的哪条记录(因为我需要测试 Dataset2 中的字段值)。

我正在尝试使用 switch 语句将 LookupSet 数组的长度用于 return 正确的字段。

这就是我目前正在做的事情。

=Switch(
'if no returns returned, display the numeral 2
LookupSet(Fields!Main_ID.Value, Fields!Main_ID.Value, Fields!Record_Name.Value, "Dataset2").Length=0, 2, 


'if one return returned, then display Record Name
LookupSet(Fields!Main_ID.Value, Fields!Main_ID.Value, Fields!Record_Name.Value, "Dataset2").Length=1, 
LookUp(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Record_Name.Value,"Dataset2"),


'if two records returned, check the HasIP field.  If HasIP = YesYes, then use this combination first.  
LookupSet(Fields!Main_ID.Value, Fields!Main_ID.Value, Fields!Record_Name.Value, "Dataset2").Length=2 AND
    LookUpSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!HasIP.Value,"Dataset2")(0)="YesYes", 
LookUpSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Record_Name.Value,"Dataset2")(0), 

LookupSet(Fields!Main_ID.Value, Fields!Main_ID.Value, Fields!Record_Name.Value, "Dataset2").Length=2 AND 
    LookUpSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!HasIP.Value,"Dataset2")(1)="YesYes", 
 LookUpSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Record_Name.Value,"Dataset2")(1), 


'if two records returned, check the HasIP field.  If HasIP = YesNo, then use this combination second.  
LookupSet(Fields!Main_ID.Value, Fields!Main_ID.Value, Fields!Record_Name.Value, "Dataset2").Length=2 AND 
    LookUpSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!HasIP.Value,"Dataset2")(0)="YesNo", 
LookUpSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Record_Name.Value,"Dataset2")(0), 

LookupSet(Fields!Main_ID.Value, Fields!Main_ID.Value, Fields!Record_Name.Value, "Dataset2").Length=2 AND 
     LookUpSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!HasIP.Value,"Dataset2")(1)="YesNo", 
LookUpSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Record_Name.Value,"Dataset2")(1),


'If all else fails, display the number 2
True, 2)

我为 2 条记录得到了正确的 returned,但是对于 0 条记录和 1 条记录得到了#ERROR。如果我将公式分解为各个部分:

=SWITCH(
LookupSet(Fields!MainID.Value, Fields!MainID.Value, Fields!Record_Name.Value, "Dataset2").Length=0, 
2)

这行得通。数字 2 显示在我的报告中,其中 Dataset2 中没有条目(对于任何其他组合,该字段为空白)。

如果我使用:

=SWITCH(LookupSet(Fields!MainID.Value, Fields!MainID.Value, Fields!Record_Name.Value, "Dataset2").Length=1, LookUp(Fields!MainID.Value,Fields!MainID.Value,Fields!Record_Name.Value,"Dataset2"))

当我从数据集 2 return 中编辑了 1 条记录(对于任何其他组合,该字段为空白)时,这很好用。

无论我对第三部分(处理 2 条记录)做了什么尝试,我都会遇到问题。我可以获得正确的记录名称 returned,但我收到 0 或 1 条记录的#ERROR。 我试过将第三部分嵌套在 IIF 语句中,将其翻转以先查看长度等,但没有成功。

我无法编辑任一数据集的基础查询。

非常感谢任何指导。

已解决

参见:

本质上是在HasIP中添加一个数值,同时添加第二个数据集的主键。 然后对LookupSet数组进行排序,得到你想要的值。

在表达式中,您可以使用它来分配默认值,即使 LookupSet 没有返回结果也是如此:

=iif(
    LookupSet(
        Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Main_ID.Value,"Dataset2"
   ).Length>0, 
    Mid(
        Split(
            Join(
                Code.JoinSorted(
                    LookupSet(
                        Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Q12b.Value,"Dataset2")
                    )
           ,";")
      ,";").GetValue(0)
    ,  'start point of mid
        InStr(
           Join(
                Code.JoinSorted(
                    LookupSet(
                       Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Q12b.Value,"Dataset2"
                   )
                )
           ,";")
       ,"$")
     +1, 
 1), 
"2"
)