s-s-rs 报告报告过滤器,查询中不使用重复项

Posted

技术标签:

【中文标题】s-s-rs 报告报告过滤器,查询中不使用重复项【英文标题】:s-s-rs report report filter with no duplicates used in query 【发布时间】:2018-01-29 04:08:37 【问题描述】:

我遇到了问题,不知道如何解决。

我有一份从表格中提取的 s-s-rS 报告。我想要一个参数过滤器根据其中一列中的可用选项显示去重值。

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

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

然后我想要一个名为param 的参数,它从上述数据集中的col1 获取其可用值和默认值,并且我希望对它们进行重复数据删除。

通过阅读online,我了解到我必须创建一个虚拟参数并使用 VBA 代码对该列表进行重复数据删除。

所以我有这些参数:

param_dummy 从上述数据集中的 col1 获取其可用值和默认值 param 使用 Code.RemoveDuplicatesparam_dummy 获取去重列表

但是我遇到了循环逻辑的问题。 paramparam_default 获取其值,param_default 从使用 param 的数据集/查询获取其值。

我该如何解决这个问题?

一种想法是删除WHERE col1 IN (@param),而是在s-s-rS 报告中的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,我将availabledefault选项设为Get values from a query,我将使用上述数据集和col1

但这不起作用,因为查询/数据集依赖于col1options,它从查询/数据集获取其默认值。

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

【问题讨论】:

你能发布一些示例数据吗?显示之前和之后的结果。 我用更多细节更新了我的问题。 【参考方案1】:

我不确定我是否理解您的问题,所以这是一个猜测...

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

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

【讨论】:

这需要两次调用 SQL 服务器。如果不打多个电话就没有办法做我想做的事吗?我用更多细节更新了我的问题。 不,只有填充参数所需的数据集在显示报表之前执行,因此您无法访问主数据集的结果,直到报表运行并且到那时您已经需要要运行的报表参数数据集。 那是两个电话,对吧?一次调用填充参数,一次调用获取数据。这样,过滤器下拉列表中的值将是所有内容,并且不会根据来自dsMain 的其他条件进行过滤。 没错。也许你已经明确了你的要求。如果没有,请使用数据样本和预期的流程/输出更新您的问题。【参考方案2】:

找到了一个更简单的解决方案。

    按照this link 构建“虚拟”隐藏参数、可见参数和重复数据删除 VBA 代码 添加一个 tablix 属性过滤器,其中 paramin VBA 上方的 可见/非隐藏参数(仅供参考,双击添加参数) 双击添加会在末尾追加一个(0),去掉(0)

此时它应该可以按预期工作!您应该能够选择一个、部分或所有参数,并且您的报告应该相应更新。

【讨论】:

以上是关于s-s-rs 报告报告过滤器,查询中不使用重复项的主要内容,如果未能解决你的问题,请参考以下文章

s-s-rS 报告语法

如何在 s-s-rS 中创建下拉过滤器列表?

如何根据 2 个数据源过滤 s-s-rS 报告

s-s-rS 图表报告,带有用于过滤或更改数据集的滑块

s-s-rS 向下钻取报告未正确过滤参数

s-s-rS 13 (SQL 2016) 报告缓存问题