SSRS 2012 在组页脚中使用带有 LookupSet 计数的 switch 语句
SSRS 2012 using switch statement with LookupSet count in group footer
很抱歉post。
我有一份 SSRS 2012 报告查看 2 个数据集,Dataset1 和 Dataset2.
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 正确的字段。
- 如果没有记录(例如数组长度 = 0)则 return
数字 2
- 如果有1条记录(例如数组长度=1),那么return
Record_Name
- 如果有2条记录(如数组长度=2),则
检查字段 HasIP。
- 如果 HasIP = YesYes,则 return 该匹配条目的 Record_Name
- 如果 HasIP = YesNo,则 return 该匹配条目的 Record_Name。
- 如果一切都失败了,return 数字 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 条记录得到了正确的 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"
)
很抱歉post。
我有一份 SSRS 2012 报告查看 2 个数据集,Dataset1 和 Dataset2.
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 正确的字段。
- 如果没有记录(例如数组长度 = 0)则 return 数字 2
- 如果有1条记录(例如数组长度=1),那么return Record_Name
- 如果有2条记录(如数组长度=2),则 检查字段 HasIP。
- 如果 HasIP = YesYes,则 return 该匹配条目的 Record_Name
- 如果 HasIP = YesNo,则 return 该匹配条目的 Record_Name。
- 如果一切都失败了,return 数字 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 条记录得到了正确的 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"
)