Reporting Services 使用啥类型的对象将多行传递给自定义聚合函数?

Posted

技术标签:

【中文标题】Reporting Services 使用啥类型的对象将多行传递给自定义聚合函数?【英文标题】:What type of object does Reporting Services use to pass multiple rows to custom aggregate functions?Reporting Services 使用什么类型的对象将多行传递给自定义聚合函数? 【发布时间】:2013-10-30 17:00:04 【问题描述】:

假设以下数据集:


declare
    @datesTest table(dateId date, someValue int)
insert into
    @datesTest 
values
    ('01/01/2013', 15),
    ('01/01/2013', 15),
    ('02/01/2013', 0),
    ('03/01/2013', 27),
    ('03/01/2013', 27),
    ('03/01/2013', 27),
    ('04/01/2013', 44),
    ('04/01/2013', 44),
    ('05/01/2013', 0)

/* data is in this format with about 15 other fields that make distinct at this level not viable */
select
    *
from
    @datesTest;

/* not the average I want */
select
    avg(someValue) incorrectAvg
from
    @datesTest;

/* the average I do want (avg of distinct) */
select
    avg(_1.someValue) correctAvg
from
(
    select distinct
        *
    from
        @datesTest
)_1

还假设我无法更改数据集或操作 SQL 中的字段。

从 Reporting Services,我想创建一个自定义函数,以某种形式接受这些值,删除重复项,然后返回真正的平均值。

我遇到的问题是我不确定 s-s-rS 使用哪种类型的对象将多行传递给自定义函数。

【问题讨论】:

什么版本的s-s-rS? 【参考方案1】:

我相信您可以创建一个引用另一个数据集的数据集。

创建数据集父列表。这将是您的过滤器数据集。您应该只返回一个值列,并且应该能够从原始数据集(具有重复行的数据集)中提取此列表。您只需要拉取平均的值。 创建一个名为 ParentList 的新报表参数。将可用值和默认值设置为来自数据集 ParentList 的值列结果。将参数设置为隐藏。 创建第二个数据集 RealAverage(或其他)。将 ParentList 作为参数添加到数据集 RealAverage,称为 @ParentList。

在子查询中,使用如下参数:

SELECT DISTINCT(my column) WHERE valueColumn IN (@ParentList)

这将返回唯一行,然后您可以使用标准 s-s-rS Avg

它不是很干净,但应该可以解决问题。尝试从数据集创建参数,请记住,参数只能从一行数据集创建。

我希望这会有所帮助。

【讨论】:

这是个好建议。让我稍微修改一下,如果有效,我会将其标记为正确。

以上是关于Reporting Services 使用啥类型的对象将多行传递给自定义聚合函数?的主要内容,如果未能解决你的问题,请参考以下文章

Reporting Services 配置工具

Reporting Services 身份验证问题

使用 Reporting Services 学习图表的书籍/资源推荐 [关闭]

SQL Reporting Services ReportViewer 的多个版本

双轴图 - Reporting Services 2005

无法访问 Reporting Services 的报告管理器