选择全部作为多值参数的默认值

Posted

技术标签:

【中文标题】选择全部作为多值参数的默认值【英文标题】:Select All as default value for Multivalue parameter 【发布时间】:2011-01-31 07:44:09 【问题描述】:

我正在 Visual Studio 2008 中构建一个包含大量 multivalue parameters 的报告,它运行良好,但我希望在打开报告时将“(全选)”选项作为默认值。

我可以使用某种表达式或 SQL 代码来实现这一点吗?还是每次要运行报表时,在每个参数中,每次都需要选择“(全选)”?

【问题讨论】:

【参考方案1】:

尝试设置参数的“默认值”以使用与“可用值”相同的查询。实际上,它提供了每个“可用值”作为“默认值”,并自动选中“全选”选项。

【讨论】:

非常感谢。唯一要补充的是;如果您用于“可用值”的查询返回任何空值,则不能将默认值设置为“(全选”),可能是因为多值函数不允许空值。无论如何,非常感谢您的回答。 仍然看到 s-s-rS 2008 R2 的一个错误,如果在 2 、 3 轮检查和取消检查后检查了所有值,则级联下拉列表不会检查所有值。 @iljitj NULL 值的事情让我很着急,让我难过——感谢这个金块! 我确定我没有空值,并且几乎继续研究这个,但仔细检查,果然,有时我有空值,这取决于以前的参数选择。在这里提到它,希望它可以为下一个人节省几分钟的挫败感。在对结果的一致性做出假设之前,请始终尝试几种不同的查询组合。谢谢@iljitj。 太好了,@jcford。谢谢!只是想补充一点,通过将业务规则嵌入源数据集的克隆中来实现“一些而不是全部作为默认值”很简单,该克隆只返回您想要选择的值。例如如果完整的可能性列表包含 A、B 和 C,并且数据集称为 AvailOptions,您可以添加一个名为 [Default] 的布尔列,然后有一个名为 AvailOptionsJustDefault 的第二个数据集,其中包含 Default = 1 的 Where 子句。 【参考方案2】:

如果您有空值,则不起作用。

您可以通过修改您的 select 语句以将某些内容放入 null 来解决此问题:

phonenumber = CASE
  WHEN (isnull(phonenumber, '')='') THEN '(blank)'
  ELSE phonenumber
END

【讨论】:

这个符号是什么意思还是你输出的是一张悲伤的脸 s-s-rs 总是让我输出一张悲伤的脸【参考方案3】:

通过使用这样的文本查询创建数据集很容易实现:

SELECT 'Item1'
UNION
SELECT 'Item2'
UNION
SELECT 'Item3'
UNION
SELECT 'Item4'
UNION
SELECT 'ItemN'

查询应该返回所有可以选择的项目。

【讨论】:

【参考方案4】:

接受的答案是正确,但不完整。 为了使 Select All 成为默认选项,可用值数据集必须至少包含 2 列:值和标签。它们可以返回相同的数据,但它们的名称必须不同。然后,默认值数据集将使用值列,然后 Select All 将成为默认值。如果数据集只返回 1 列,则参数下拉列表中只会选择最后一条记录的值。

【讨论】:

【参考方案5】:

使用具有默认值的数据集是一种方法,但您必须对可用值和默认值使用查询,如果值在可用值选项卡中硬编码,则必须将默认值定义为表达式。图片应该说明一切

创建参数(如果没有自动创建)

定义值 - 错误方式示例

定义值 - 正确方式示例

设置默认值 - 您必须定义所有反映可用值的默认值,以使“全选”默认为“全选”,如果您不定义所有,则默认情况下将选择那些已定义的。

结果

数据类型的一张图片:Int

【讨论】:

图片变小了,抱歉,希望你能看懂他们的cmets。 您提到“那么您必须将默认值定义为表达式”,但您没有解释为什么应该这样做。我很好奇为什么这是必要的? 那时是自我发现。不太清楚,但我怀疑表达式(在这种情况下)是编程值,所以引擎知道它们是什么类型。如果你只输入 Value,它不知道它是 string 还是 int,并且不能进行多选。但除此之外,我不知道原因,我只知道它是这样工作的。随意研究:) 引擎知道您在General 属性屏幕上的Data Type: 选项中选择的数据类型。无论您作为表达式输入什么,该参数都只能保存该数据类型的值。 我试图做出最好的猜测。任何类似的事情都可以随意打电话给微软,他们到处都有错误,我什至不得不修复报告引擎才能在 Chrome 中正确呈现。他们是一群使用 IE 的蹩脚的人,用他们一切皆有可能【参考方案6】:

补充 E_8 的答案。 如果您有空字符串,这将不起作用。

您可以通过修改 SQL 中的 select 语句或修改 s-s-rS 数据集中的查询来解决此问题。

 Select distinct phonenumber
from YourTable
where phonenumber <> ''
Order by Phonenumber

【讨论】:

【参考方案7】:

效果更好

CREATE TABLE [dbo].[T_Status](
   [Status] [nvarchar](20) NULL
) ON [PRIMARY]

GO
INSERT [dbo].[T_Status] ([Status]) VALUES (N'Active')
GO
INSERT [dbo].[T_Status] ([Status]) VALUES (N'notActive')
GO
INSERT [dbo].[T_Status] ([Status]) VALUES (N'Active')
GO

DECLARE @GetStatus nvarchar(20) = null
--DECLARE @GetStatus nvarchar(20) = 'Active'
SELECT [Status]
FROM [T_Status]
WHERE  [Status] = CASE WHEN (isnull(@GetStatus, '')='') THEN [Status]
ELSE @GetStatus END

【讨论】:

以上是关于选择全部作为多值参数的默认值的主要内容,如果未能解决你的问题,请参考以下文章

显示多值参数

使用 s-s-rS 表达式查看用户从多值参数中选择了哪些选项?

在多值参数中选择两个选项但传递一个值

当对基于声明的模型使用多值插入时,不会为每一行单独调用 Python 端默认值

可选命令行参数的默认值

用于测试的硬编码SSRS多值参数