1

我们有一系列报告,它们根据用户 ID 返回一组参数值。这很有效,我们对它的工作方式很满意。

现在我们需要实现一个默认参数设置。逻辑是

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

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

到目前为止,这就是我所拥有的-我知道我有以下问题:

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

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

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

2 回答 2

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 不是您的参数的有效值 - 如果它然后确保默认查询将返回绝对无效的其他内容)。如果只有一个可能的值,则默认值查询只返回与参数值数据集相同的结果,这意味着将选择参数值。

于 2013-10-09T22:17:43.693 回答
0
  1. 设置另一个依赖于第一个相同类型但名称略有不同的参数,并在底部执行您的代码并建议更改:。将括号结尾前末尾的“”改为“NOTHING”。我相信这被 SQL 解释为你想要的 NULL。

  2. 现在你应该得到参数的填充,所以我只需将它拖放到设计图面就可以调试和检查它,如果你有多个默认值,它应该是黑色的。一旦您确认它有效,您可以选择将此参数设置为“隐藏”。

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

    Where value = isnull(@DependentParam, value)
    

基本上这是在说明“如果参数不为空,则使用它,否则将子句等同于一切,因为它将假定 value = value”。

于 2013-10-09T17:09:20.253 回答