【问题标题】:SSRS 2012 using switch statement with LookupSet count in group footerSSRS 2012 在组页脚中使用带有 LookupSet 计数的 switch 语句
【发布时间】:2016-04-21 16:34:07
【问题描述】:

为长篇道歉。

我有一份 SSRS 2012 报告查看 2 个数据集,Dataset1Dataset2
Dataset2 可能返回 0、1 或 2 条记录,所以我使用 LookupSet 来执行此操作。从返回的记录中,我需要显示几个字段。

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

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

这很好用,我会根据需要得到 0、1 或 2。

在 Dataset2 中的字段:

HasIP 

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

我正在尝试使用 switch 语句来使用 LookupSet 数组的长度来返回正确的字段。

  • 如果没有记录(例如数组长度 = 0),则返回 2号
  • 如果有 1 条记录(例如数组长度 = 1),则返回 Record_Name
  • 如果有 2 条记录(例如数组长度 = 2),则 检查字段 HasIP。
  • 如果 HasIP = YesYes,则返回该匹配条目的 Record_Name
  • 如果 HasIP = YesNo,则返回该匹配条目的 Record_Name。
  • 如果一切都失败了,返回数字 2

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

=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 条记录返回了正确的记录,但为 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"))

这适用于我从 Dataset2 返回 1 条记录(对于任何其他组合,该字段为空白)。

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

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

非常感谢任何指导。

【问题讨论】:

    标签: reporting-services ssrs-2012


    【解决方案1】:

    解决了

    见:

    SSRS 2012. Replicate grouping results in report in Query Designer

    本质上它是向 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"
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      相关资源
      最近更新 更多