Reporting services SSRS报告参数-从列表中选择后填充其他参数

Reporting services SSRS报告参数-从列表中选择后填充其他参数,reporting-services,Reporting Services,我有一个菜单页面,其中有一个查询,用于检索给定日期范围内的项目记录列表 查询返回项目ID、开始日期和结束日期 线圈ID填充一个列表。用户将从该列表中选择一个项目并进行报告选择 需要做的是,当用户选择要运行的报表时,需要将所选项目的开始日期和结束日期传递给所选报表 我设置了两个额外的参数,它们指向一个查询,该查询使用所选项目id检索该项目的开始和结束时间。这种方法有效,但没有检索到正确的开始和结束时间 我觉得我应该能够从原始查询中获取所选项目的开始和结束时间,因为它们在结果集中返回 我想用用户从列

我有一个菜单页面,其中有一个查询,用于检索给定日期范围内的项目记录列表

查询返回项目ID、开始日期和结束日期

线圈ID填充一个列表。用户将从该列表中选择一个项目并进行报告选择

需要做的是,当用户选择要运行的报表时,需要将所选项目的开始日期和结束日期传递给所选报表

我设置了两个额外的参数,它们指向一个查询,该查询使用所选项目id检索该项目的开始和结束时间。这种方法有效,但没有检索到正确的开始和结束时间

我觉得我应该能够从原始查询中获取所选项目的开始和结束时间,因为它们在结果集中返回

我想用用户从列表中选择的项目的值填充开始日期和结束日期参数

我是SSRS新手,不确定最好的方法是什么

======================================================= 更新

不知道我能说清楚多少

我将对日期使用不同的术语,因为主查询和返回的项目都包含开始日期和结束日期可能会造成混淆

我有一个查询,它根据用户选择的日期范围检索数据。此日期范围仅用于限制主查询的结果

结果集包括以下字段:ItemID、ProcessStart、ProcessEnd

itemID表示我们希望从单独的系统获取性能数据的内容。每个项目都有一个开始处理的日期和一个结束处理的日期

我使用ItemID字段填充列表。用户将从此列表中选择要运行附加报告的项目。但是,附加报告需要所选特定项目的日期范围(即ProcessStart、ProcessEnd)。ProcessStart和ProcessEnd需要传递给这些报告

我需要知道如何获取用户所选项目的ProcessStart和ProcessEnd

由于这些信息是在初始查询中返回的,所以我认为一旦用户做出选择,就很容易访问这些信息。我没有看到从列表中直接访问该数据的方法。该列表仅包含ItemID。我认为该列表将添加所有隐藏值以将结果列绑定到

我设置了第二个查询,该查询使用list参数中的值来获取所选项的ProcessStart和ProcessEnd,并添加了两个名为ProcessStart和ProcessEnd的参数来保存这些值。我的第一次尝试确实填充了这些参数,但无论我从列表中选择了什么,它们总是来自第一项。然后,我在第二个查询中添加了一个过滤器,以使用列表中的选定值限制结果。这也总是从列表中的第一个项目返回值,无论列表中选择了哪个项目

我尝试在参数中使用lookup函数,但出现的错误使您在从参数执行查找时无法使用字段。我可能会尝试在填充参数时使用查找函数来调用另一个报告,但我认为我会得到相同的错误

============================================================================= 再举一个例子:

我有以下参数:

以下数据集:

GetCoilList数据集查询:

SELECT 
      [CoilId]
      ,[StartTimestamp]
      ,[FinishTimestamp]
  FROM SomeTable

WHERE StartTimestamp BETWEEN @StartDate AND @EndDate
SELECT 
    [CoilID]
      ,[StartTimestamp]
      ,[FinishTimestamp]
  FROM SomeTable

WHERE CoilID = @CoilID
@StartDate和@EndDate来自前两个参数。这两个参数用于获取给定时间范围内的项目列表

GetCoTimes记录集查询:

SELECT 
      [CoilId]
      ,[StartTimestamp]
      ,[FinishTimestamp]
  FROM SomeTable

WHERE StartTimestamp BETWEEN @StartDate AND @EndDate
SELECT 
    [CoilID]
      ,[StartTimestamp]
      ,[FinishTimestamp]
  FROM SomeTable

WHERE CoilID = @CoilID
@CoilID是用户从Coil参数中选择的值

线圈参数默认值:

线圈列表填充正确,我可以从列表中选择一个ID

开始参数默认值:(结束参数设置类似)


“开始”和“结束”确实会被填充,但它们总是被列表中第一项的日期填充。

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

我创建了一些测试数据作为示例

 CREATE TABLE so.ItemData (ItemID INT, ProcessStart date, ProcessEnd date)
 CREATE TABLE so.SomeOtherData (ItemID INT, SomeActionCode varchar(10), SomeDate date)

INSERT INTO so.ItemData VALUES
    (1, '2020-01-01', '2020-01-31'),
    (2, '2020-02-01', '2020-02-28'),
    (3, '2020-03-01', '2020-03-31'),
    (4, '2020-04-01', '2020-04-30'),
    (5, '2020-05-01', '2020-05-31'),
    (6, '2020-06-01', '2020-06-30')

INSERT INTO so.SomeOtherData VALUES
    (1, 'A', '2019-12-31'),
    (1, 'B', '2020-01-15'),
    (1, 'C', '2020-01-16'),
    (1, 'D', '2020-01-25'),
    (1, 'E', '2020-02-01'),
    (1, 'F', '2020-02-02'),
    (2, 'G', '2020-04-01'),
    (3, 'H', '2020-05-01'),
    (4, 'I', '2020-06-01')
首先。最明显的方法是在数据集查询中简单地连接两组数据,这样您只需要传递ItemID

因此,为秒数据集设置的datset查询如下所示

SELECT b.*
    FROM
        (SELECT * FROM so.ItemData WHERE ItemID = @pItemID) a
        JOIN (SELECT * FROM so.SomeOtherData) b 
            on a.ItemID = b.ItemID and b.SomeDate BETWEEN a.ProcessStart AND a.ProcessEnd
SELECT * FROM so.ItemData WHERE ItemID = @pItemID
另一种方法是向报表中添加隐藏参数

添加两个参数,一个用于startdate,另一个用于enddate。称它们为
sDate
eDate
。将参数类型设置为
Date/Time

创建一个名为“dsItemDetail”的数据集,并使用如下查询

SELECT b.*
    FROM
        (SELECT * FROM so.ItemData WHERE ItemID = @pItemID) a
        JOIN (SELECT * FROM so.SomeOtherData) b 
            on a.ItemID = b.ItemID and b.SomeDate BETWEEN a.ProcessStart AND a.ProcessEnd
SELECT * FROM so.ItemData WHERE ItemID = @pItemID
@pItemID
是包含itemid的报表参数的名称

设置
dsitemdail
作为两个参数的
默认值的查询
属性,将每个参数的
值字段
属性设置为
dsitemdail
中的相应字段

可选:将两个参数都设置为隐藏(一旦工作)

创建名为
dsMain

将数据集查询设置为

SELECT * 
FROM so.SomeOtherData
WHERE ItemID = @pItemID
AND SomeDate BETWEEN @sDate AND @eDate
添加一个表格以显示来自
dsMain

在这个快速报告中,我使用上面的示例数据添加了两个表。一个显示来自第一个查询的数据,另一个显示来自第二个查询的数据(
dsMain
)。如果查看样本数据,则不在范围内的值将被排除


欢迎来到SO。现在还不清楚你到底想做什么。你可以编辑你的问题,或者添加一些你希望每个步骤看起来像什么的屏幕截图,并用每个阶段的数据值样本(包括来自相关数据库的样本数据)写出事件序列吗