【发布时间】:2021-04-15 08:16:18
【问题描述】:
在 SSRS 报告中,我有来自两个不同服务器的两个数据源。我对每个数据源都有一个数据集,并希望在 tablix 中返回数据集 1 中但不在数据集 2 中的 id。 因此,如果数据集 1 的 ID 为 1、2、3、4、5,而数据集 2 的 ID 为 1、2、3,则报告应显示 4 和 5。我无法链接服务器。谢谢。
【问题讨论】:
标签: reporting-services dataset
在 SSRS 报告中,我有来自两个不同服务器的两个数据源。我对每个数据源都有一个数据集,并希望在 tablix 中返回数据集 1 中但不在数据集 2 中的 id。 因此,如果数据集 1 的 ID 为 1、2、3、4、5,而数据集 2 的 ID 为 1、2、3,则报告应显示 4 和 5。我无法链接服务器。谢谢。
【问题讨论】:
标签: reporting-services dataset
有几种方法可以做到这一点。
这是大多数人可能会这样做的方式
使用Lookup() 函数。
将 tablix 行的 hidden 属性设置为类似
=ISNOTHING(
Lookup(Fields!IDa.Value,Fields!IDb.Value,Fields!IDb.Value,"Dataset2")
) = False
为清楚起见,上面假设 dataset1 中的 ID 列称为 IDa,dataset2 中的 ID 列称为 IDb。如果它们具有相同的名称(例如“ID”),它仍然可以工作
注意:数据集名称必须用引号括起来并且区分大小写。
使用此方法会返回所有行并简单地隐藏不符合您的条件的行。如果您要导出数据,这可能并不理想。如果没有,请参阅下面的替代版本。
对于相当小的数据集 - 参数方法 ...因为我认为这是一种有趣的方法...
第二种方法使用隐藏参数,并且很容易设置,假设您有合理的少量记录。
使用您的示例,创建一个名为 List2 的参数,并将其默认值和可用值都设置为您的 Dataset2 查询(来自上面的示例)。使参数多值。您可以在此参数工作后将其隐藏。
现在您的Dataset1 查询可以是这样的简单查询,
SELECT * FROM Table1 WHERE id NOT IN (@List2)
@List2 将包含来自 datset2(1,2 和 3)的值,因此查询将仅返回剩余的值。
注意我为数据集命名以匹配您的示例,但数据集必须按上述顺序创建。
【讨论】:
= False 部分。如果你用的是参数方式,把NOT IN改成IN