ssrs 中 switch 中的不同数据集

different dataset in switch in ssrs

我在一个报告中有 2 个数据集,在 5 列中,2 列来自数据集 1,3 列来自数据集 2(数据集 2 是主要数据集)。现在,当我尝试使用下面的 switch 命令时,它不会给我任何错误,但不会显示任何结果。 dataset1为分享点列表

=SWITCH(First(Fields!xyz.Value, "dataset1")="Platinum",25,First(Fields!xyz.Value, "dataset1")="",0,First(Fields!xyz.Value, "dataset1")="Gold",15)

tablix 中的所有其他列都来自 dataset2,报告运行良好,只是此列中没有数据

First() 表达式可能是问题所在,也是当您更改 IIF 条件时它起作用的原因。 First() 只是从字面上从目标数据集中获取命名字段中的第一个值,所以如果它不是 "Platinum"、空字符串或 "Gold",它只会 return 什么都没有。另一方面,如果 abc 的第一个值是 1 或 3,它总是 return "Platinum" 或 "Gold"

重要的是要意识到这将 return table 的每一行上的数据完全相同,因为您只会查看数据集 1 的第一行。

我认为您可能在寻找 LookUp() 函数,该函数将使用主键来匹配数据集,并根据数据集 2 当前行中的数据从数据集 1 中获取不同的数据。

希望这样说得通?

编辑回复评论:

那么你可以通过两种方式做到这一点。例如,您可以使用用于填充 switch 语句中的列的相同 LookUp() 公式来获取点;

=Switch(LookUp(Fields!application_name.Value, Fields!application_name.Value, Fields!service_level.Value, "dataset1") = "Platinum", 25, LookUp(Fields!application_name.Value, Fields!application_name.Value, Fields!service_level.Value, "dataset1") = "Gold", 15)

其次,您可以直接引用已经在获取"Gold"或"Platinum"的列。例如,如果该文本框称为 Textbox10(检查属性面板的右上角以查看名称),那么您可以使用:

=Switch(ReportItems!Textbox10.Value = "Platinum", 25, ReportItems!Textbox10.Value = "Gold", 15)

这两种方法都应该可以正常工作。基本上你在那里做的是确保你始终检查该应用程序的正确服务级别,而不仅仅是数据集 1

中的第一个