【发布时间】:2018-01-29 04:08:37
【问题描述】:
我遇到了问题,不知道如何解决。
我有一份从表格中提取的 SSRS 报告。我想要一个参数过滤器根据其中一列中的可用选项显示去重值。
所以我的数据集带有如下查询:
SELECT * FROM table1 WITH (NOLOCK) WHERE col1 IN (@param)
然后我想要一个名为param 的参数,它从上述数据集中的col1 获取其可用值和默认值,并且我希望对它们进行重复数据删除。
通过阅读online,我了解到我必须创建一个虚拟参数并使用 VBA 代码对该列表进行重复数据删除。
所以我有这些参数:
-
param_dummy从上述数据集中的col1获取其可用值和默认值 -
param使用Code.RemoveDuplicates从param_dummy获取去重列表
但是我遇到了循环逻辑的问题。 param 从 param_default 获取其值,param_default 从使用 param 的数据集/查询获取其值。
我该如何解决这个问题?
一种想法是删除WHERE col1 IN (@param),而是在SSRS 报告中的Tablix 表上使用过滤器。这行得通,但我想知道它的效率如何。
和/或如果有人有任何其他建议,我会全力以赴。
已更新以添加更多详细信息...
假设我的数据库中有一个表,如下所示:
| id | col1 | col2 |
|----|------|--------|
| 1 | a | hello |
| 2 | b | how |
| 3 | a | are |
| 4 | c | you |
| 5 | d | on |
| 6 | a | this |
| 7 | b | lovely |
| 8 | c | day |
我想要的是:
- 用于显示表中所有字段的 Tablix
- 一个过滤器,用户可以在其中选择
col1中的可用下拉菜单(去重) - 一个文本过滤器,允许用户可以在
col2上过滤的空值 - 参数将具有默认值,因此表格将在页面加载时加载
所以我有一个像这样查询的数据集:
SELECT
*
FROM dbo.table1
WHERE col1 IN (@col1options) AND (@col2value IS NULL OR col2 = @col2value)
那么对于col1options,我将available和default选项设为Get values from a query,我将使用上述数据集和col1。
但这不起作用,因为查询/数据集依赖于col1options,它从查询/数据集获取其默认值。
我可以使用第二个数据集,但这意味着要多次调用 SQL 服务器,我想避免这种情况。
【问题讨论】:
-
你能发布一些示例数据吗?显示之前和之后的结果。
-
我用更多细节更新了我的问题。
标签: sql sql-server reporting-services sql-server-2014 ssrs-2014