如何修改 s-s-rS 矩阵报表以显示总计的平均值?

Posted

技术标签:

【中文标题】如何修改 s-s-rS 矩阵报表以显示总计的平均值?【英文标题】:How to Modify an s-s-rS Matrix Report to Display Averages of Totals? 【发布时间】:2021-09-30 03:28:36 【问题描述】:

我正在使用 s-s-rS 2016 构建一个涉及矩阵的报表对象。我希望我的行在最右边求和,但我的列需要是给定组中值的平均值。我想在 s-s-rS 中执行此操作,而不是在 TSQL 中进行聚合。到目前为止,我的报告如下所示:

预期结果是第一列数据平均为 2,接下来的 2 列平均为 1。

驱动报表的SQL如下:

DECLARE @year int = 2021
DECLARE @hpcode varchar(200) = 'BB'

/*Internal variables*/
DECLARE @month int = 1
DECLARE @monthend int = 12
DECLARE @table table (MEMB_KEYID UNIQUEIDENTIFIER, MEMBID varchar(50), RLSHIP varchar(2),
RELATIONSHIP varchar(50), HPCODE VARCHAR(10), OPT VARCHAR(25), EMPGROUP VARCHAR(40), 
COMPANY_ID VARCHAR(10), MONTHDATE date)

/*If current year is selected, only grab up to current month*/
IF (YEAR(GETDATE()) = @year)
   BEGIN
          SET @monthend = MONTH(GETDATE())
   END

WHILE @month<=@monthend
BEGIN
   INSERT INTO @table (MEMB_KEYID, MEMBID, RLSHIP, RELATIONSHIP, HPCODE, OPT, EMPGROUP, COMPANY_ID, MONTHDATE)
   SELECT MHP.MEMB_KEYID, MMV.MembID, mmv.rlship,
   CASE 
   when mmv.RLSHIP = '18' then  'Subscriber'
   when mmv.RLSHIP in ('01','53') then 'Spouse'
   else 'Child/Other Dependent' end as RELATIONSHIP,
   MHP.HPCODE, MHP.OPT, EMPGROUP, MHP.COMPANY_ID, DATEFROMPARTS(@year,@month,1)
   FROM MEMB_HPHISTS MHP
   INNER JOIN MEMB_MASTER_V MMV on MMV.MEMB_KEYID = MHP.MEMB_KEYID

   WHERE ISNULL(MHP.OPTHRUDT, DATEFROMPARTS(@year,@month,1) ) >= DATEFROMPARTS(@year,@month,1)
          and MHP.OPFROMDT <= EOMONTH(DATEFROMPARTS(@year,@month,1))
   AND MHP.HPCODE in (@hpcode)
   and mmv.MembID NOT LIKE 'TEMP%'
   

   /*Increment @month*/
   SET @month = @month+1
END
 /*Grab data*/
 SELECT Memb_KEYID, MembID, RLSHIP, RELATIONSHIP, HPCode, OPT, EMPGROUP, COMPANY_ID, MonthDate 
 from @Table

我的报告布局是 当我尝试运行报告时,会抛出错误:

The value expression for the text box txtOPTAverageCount has a scope parameter that is not valid for an aggregate function.  

我如何完成这种类型的总结?

【问题讨论】:

是你想在示例中显示为 2,1,1 的总行吗?另外,主单元格中的表达式是什么(例如第一行中的 2) 总数将是 2, 1, 1, 4,它们是计数的平均值。每个单元格都是一个聚合 = Count(MembID) 我刚刚修改了我的答案,使其基于平均计数 你在外部表达式中有范围名称,它应该在内部表达式中。 =AVG(COUNT(Fields!MembID.Value, "grpMonthDate")) 【参考方案1】:

没有看到报表设计很难判断,但假设您有一个按日期分组的行组,我们还假设这个行组称为grpDate

最后我假设主要数据单元格有一个类似=COUNT(Fields!MembID.Value)的表达式

您需要做的是获取每个行组的总和并对结果进行平均,就像这样......

=AVG(COUNT(Fields!MembID.Value, "grpDate"))

请注意,行组名称必须用引号括起来并且区分大小写

【讨论】:

如果这不能回答您的问题,请发布您的报告设计 我刚刚更新了我的问题以包含布局的 sn-p 和当前错误消息。 你把作用域名放在了外层表达式里,这是错误的,应该在内层表达式里。 =AVG(COUNT(Fields!MembID.Value, "grpMonthDate"))如果你看我的回答,那就应该这样做。

以上是关于如何修改 s-s-rS 矩阵报表以显示总计的平均值?的主要内容,如果未能解决你的问题,请参考以下文章

s-s-rS 2008 - 如何将小计添加到矩阵

将组总计添加到 s-s-rS 报告的不同部分

如何在 s-s-rS 2008 的矩阵中做加权平均(sumproduct/total)

s-s-rS 2012 平均值和中位数

生成数字以在 s-s-rs 报告中显示序列时出现问题

部署报表和子报表后,s-s-rS 无法呈现子报表