ssrs报告过滤器,查询中没有使用重复项

时间:2018-01-29 04:08:38

标签: sql sql-server reporting-services sql-server-2014 ssrs-2014

我遇到了问题,我不确定如何解决。

我有一张来自桌子的SSRS报告。我希望参数过滤器根据其中一列中的可用选项显示重复数据删除的值。

所以我的数据集的查询如下:

SELECT * FROM table1 WITH (NOLOCK) WHERE col1 IN (@param)

然后我想要一个名为param的参数,它在上面的数据集中从col1获取其可用和默认值,我希望它们能够重复数据删除。

从阅读online我了解到我必须创建一个虚拟参数并使用VBA代码来重复删除该列表。

所以我有这些参数:

  • param_dummy从上述数据集中的col1获取其可用和默认值
  • param使用param_dummy
  • Code.RemoveDuplicates获取重复删除列表

但是我遇到循环逻辑问题。 paramparam_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我会将可用默认选项设为Get values from a query,我会使用上面的数据集和col1

但由于查询/数据集依赖col1options从查询/数据集中获取其默认值,因此无法工作。

我可以使用第二个数据集,但这意味着要多次调用SQL服务器,我想避免这种情况。

1 个答案:

答案 0 :(得分:1)

我不确定我理解你的问题所以这是猜测...

如果您的意思是希望能够通过从表中的特定列中选择一个或多个条目来过滤数据,但是此列有重复项并且您希望参数列表不显示重复项,那么这就是做什么的

  1. 创建新报告
  2. 将数据集dsMain添加为SELECT * FROM myTable WHERE myColumn IN (@myParam)
  3. 将数据集dsParamValues添加为SELECT DISTINCT myColumn FROM myTable ORDER BY myColumn
  4. 编辑@myParam参数属性并将可用和默认值设置为查询,然后选择dsParamValues
  5. 添加表/矩阵控件并将其数据集属性设置为dsMain