如果为参数返回一个值,则设置为default,如果返回多个值,则不选择默认值

时间:2013-10-09 16:41:29

标签: reporting-services ssrs-2008

我们有一系列报告,它们根据userID返回一组参数值。这有效,我们对其工作方式感到满意。

现在我们需要实现默认参数设置。

的逻辑

如果参数可用数据集中只有一个值,则将其设置为默认值。

如果参数可用数据集中有多个值,则将参数留空。

这是我到目前为止 - 我知道我有以下问题:

- 参数无法读取字段,因此我需要使用表达式来查看整个数据集。

- 我不确定我的声明应该是什么,以允许用户在不选择它们的情况下查看所有可用值。

=IIf(CountDistinct(Fields!storekey.Value, "UserStoreVerification")) = 1, First(Fields!storekey.Value, "UserStoreVerification")," ")

2 个答案:

答案 0 :(得分:1)

您可以创建单独的数据集来填充参数的“默认值”。在此数据集中,您可以添加逻辑来计算将提供参数值的其他数据集返回的行数。如果第一个查询返回的值大于1,则第二个数据集只返回NULL(即没有选择默认值)。

示例

如果参数值的原始数据集(例如“dsParamProduct”)使用了这样的查询:

SELECT ProductNumber 
FROM dbo.Product
WHERE Available = 'Yes'

然后,默认值的数据集查询(例如“dsParamProductDefault”)可能是这样的:

 DECLARE @ValueCount INT

 SELECT @ValueCount = COUNT(*)
 FROM
 (
    SELECT ProductNumber 
    FROM dbo.Product
    WHERE Available = 'Yes'
 ) vals

 IF @ValueCount = 1
    SELECT ProductNumber 
    FROM dbo.Product
    WHERE Available = 'Yes'
 ELSE 
    SELECT NULL

当有多个值时,提供“NULL”作为默认值将意味着没有选择任何可用值,因此用户必须手动选择它们(假设NULL不是参数的有效值 - 如果是,那么确保默认查询将返回其他绝对无效的内容)。如果只有一个可能的值,则默认值查询只返回与参数值数据集相同的结果,这意味着将选择参数值。

答案 1 :(得分:0)

  1. 设置另一个依赖于第一个相同类型但名称略有不同的参数,并在底部执行一个建议更改的代码:在括号结束之前将“”更改为“NOTHING”。我相信这被SQL解释为NULL,这就是你想要的。

  2. 现在你应该得到参数的填充因此我会调试并通过将其拖放到设计图面来检查它,如果你有多个默认值它应该是黑色。一旦确认无效,您可以选择将此参数设为“隐藏”。

  3. 现在你用一个漂亮的谓词欺骗你的主数据集(或者如果它更适合你,可以使用其他逻辑)

    Where value = isnull(@DependentParam, value)
    
  4. 基本上这是说明“如果参数不为null,则使用它,否则将该子句等同为所有内容,因为它将假设value = value”。