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 学习图表的书籍/资源推荐 [关闭]