代码之家  ›  专栏  ›  技术社区  ›  Numan

通过存储过程或用户定义的函数填充SSRS报表参数(隐藏)

  •  1
  • Numan  · 技术社区  · 16 年前

    我的ssrs报告从我的数据仓库获取数据。

    我所使用的asp.net应用程序已连接到oltp数据库。

    我从我的asp.net应用程序调用ssrs报告,并为我的报告提供一个参数customerid(这是datawarehouse中的应用程序密钥)。

    因为我的报表连接到我的数据仓库,所以我不查询基于oltp的customerid的报表。相反,我使用数据仓库的代理密钥(customerdimkey)。 现在,在我的报告中,我需要为customerid参数找到正确的代理项密钥,该参数是我从asp.net应用程序中传递的!

    我的报表已经有一个参数@customerdimkey(这在所有报表存储过程中都使用)。我们使用它进行测试,但现在我们将隐藏它,因为我们已经将它与asp.net应用程序集成。

    我已经向报表添加了一个新参数@customerid(这将具有oltp的customerid),它现在将从asp.net获取一个值。

    我需要知道如何重用@customerdimkey report参数,该参数现在应该在请求报表后从sql语句或存储过程中获取值。 基于@customerid参数包含的值。

    2 回复  |  直到 16 年前
        1
  •  3
  •   JC Ford    16 年前

    听起来很简单。假设您有可以查找customerdimkey的sql或存储过程,只需使用@customerid参数添加一个这样做的数据集,然后选择该customerdimkey。假设它是一个名为lookupcustomerdimkey的存储过程,它接受@customerid和输出参数@customerdimkey。我会创建一个报表数据集,如下所示:

    declare @CustomerDimKey bigint
    
    exec LookUpCustomerDimKey @CustomerID, @CustomerDimKey out
    
    select @CustomerDimKey CustomerDimKey
    

    然后将customerdimkey report参数设置为internal,并从我刚刚创建的查询中获取其默认值。现在,报表将等待提供customerID,然后计算customerDimKey,然后再在其他报表数据集中使用它。

    当然,它不一定是一个存储过程。您只需确保数据集的主体生成包含键的单行结果集。它可以是一个简单的sql select或一系列tsql语句或存储过程调用。几乎任何可以放入存储过程的内容都可以进入数据集主体。它只需要最终产生一个行。

        2
  •  0
  •   Numan    16 年前

    在设计过程中,确保参数顺序正确。

    @CustomerID -- First parameter

    @CustomerDimKey -- Second parameter and depends on @CustomerID for its value.

    确保新数据集返回具有单个记录(值)的ResultSet

    declare @CustomerDimKey bigint

    SELECT @CustomerDimKey = CustomerDimKey FROM Datawarehouse.CustomersDimension WHERE CustomerID = @CustomerID

    select @CustomerDimKey AS CustomerDimKey

    推荐文章