【问题标题】:SSRS Compare Two Datasets For Missing IdsSSRS 比较两个数据集的缺失 ID
【发布时间】: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


    【解决方案1】:

    有几种方法可以做到这一点。


    常用查找方法

    这是大多数人可能会这样做的方式


    使用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)的值,因此查询将仅返回剩余的值。

    注意我为数据集命名以匹配您的示例,但数据集必须按上述顺序创建。

    【讨论】:

    • 我想显示没有匹配项,而不是隐藏它们。如果 dataset1 有 1,2,3,4,5 而 dataset2 有 1,2,3 我想显示 4,5 并隐藏 1,2,3
    • 如果您使用查找方法,只需删除= False 部分。如果你用的是参数方式,把NOT IN改成IN
    • 除非我遗漏了一些似乎不起作用的东西,否则它会一直显示 1,2 和 3。这就是我在文本框中的可见性 =IsNothing(Lookup(Fields!id.Value ,Fields!id2.Value,Fields!id2.Value,"DataSet2"))
    • 当我尝试使用参数方法时,我可以使用默认和可用的 dataset2 创建参数,该部分工作正常。当我将其输入 dataset1 查询时,从 dbo.tbl_data_source_1 中选择 *,其中 id not in (@List2) 我收到以下错误:必须声明标量变量“@List2”
    • 我想我用参数方法让它工作了,需要做更多的测试。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    相关资源
    最近更新 更多