【发布时间】:2016-04-21 16:34:07
【问题描述】:
为长篇道歉。
我有一份 SSRS 2012 报告查看 2 个数据集,Dataset1 和 Dataset2。
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