reporting-services - SSRS 矩阵百分比

标签 reporting-services matrix percentage

这是报告:report table

这就是我如何获得“最近一年的变化百分比”列的百分比。

=((Last(Fields!Quantity.Value,"Child")  -  First(Fields!Quantity.Value)) / First(Fields!Quantity.Value))`

= ((54675 - 55968)/55968 ) = -2.31%'
= ((54675 - 57849)/57849)  = -5.49%'

在这种情况下,将始终采用第一年 '2012' 并获得相对于其他年份的百分比。如果我输入 2005、2004、2003、2002、2001 年,它将始终采用第一年,并且每增加一年就计算一个百分比。 2005年至2004年、2005年至2003年、2005年至2002年等。我可以有多达 2 列(年份)到许多列。

我需要为总计和小计执行此操作,但它不起作用,因为它在不同的范围内。
data is     = row Child group
Sub Total:  = row Parent group
Total:      = row Total group
Year        = Column Period group

查询用于获取结果。
 SELECT     MEMBERSHIP_CODE
, PERIOD, COUNT(DISTINCT ID) AS Distinct_ID
, SUM(QUANTITY) AS Quantity
, '01-Personal' AS Child
, '01-Overall' AS Parent
, 'Total' as Total
  FROM         vf_Sshot AS vfs
INNER JOIN vProd AS vP ON vfs.PRODUCT_CODE = vP.PRODUCT_CODE
INNER JOIN vMem_Type vMT on vMT.Member_Type = vfs.Member_Type
  WHERE  (PERIOD IN ( (SELECT Val from dbo.fn_String_To_Table(@Periods,',',1))))                  
      AND (vMT.MEMBER_TYPE NOT IN ('a','b','c')) 
      AND (vfs.STATUS IN ( 'A', 'D', 'C')) 
      AND (MEMBERSHIP_CODE NOT IN ('ABC', 'DEF' ))
      and vP.PROD_TYPE in ('DUE','MC','SC')
  and vMT.Member_Record = '1'
 GROUP BY MEMBERSHIP_CODE, PERIOD

有任何想法吗?

我将如何产生这个输出?

总计:57,573 58,941 57,573 61,188 57,573 61,175 57,175

enter image description here

最佳答案

这是解决您的问题的最简单方法。在您的查询中,在单独的列中确定最新时期的总和(您可以将您的查询转换为 CTE,这样您就不必大量更改您的基本查询):

WITH query AS (
   SELECT     MEMBERSHIP_CODE
     , PERIOD, COUNT(DISTINCT ID) AS Distinct_ID
     , SUM(QUANTITY) AS Quantity
     , '01-Personal' AS Child
     , '01-Overall' AS Parent
     , 'Total' as Total
  ...
UNION
   SELECT
  ...
)
SELECT
   A.MEMBERSHIP_CODE,
   A.PERIOD,
   A.Distinct_ID,
   A.Child,
   A.Parent,
   A.Total,
   A.Quantity,
   B.Quantity AS LastPeriodQuantity
FROM
   query A INNER JOIN
(SELECT *, ROW_NUMBER() OVER(PARTITION BY MEMBERSHIP_CODE, Distinct_ID, Child, Parent ORDER BY PERIOD DESC) as periodOrder FROM query) B ON
A.MEMBERSHIP_CODE = B.MEMBERSHIP_CODE AND
A.DISTINCT_ID = B.DISTINCT_ID AND
A.Parent = B.Parent AND
A.Child = B.Child AND
A.Total = B.Total AND
B.PeriodOrder = 1

然后在所有总计/小计/列上,您将访问按与分母相同的规则分组/过滤的列。对于所有单元格,您的表达式可以保持如下:=(Fields!LastPeriodQuantity.Value - Fields!Quantity.Value) / Fields!Quantity.Value

关于reporting-services - SSRS 矩阵百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12864258/

相关文章:

reporting-services - 如何获取文件名中的当前日期?

reporting-services - 在 SSRS 中显示这种类型的数据?

matlab - 矩阵反转时间

jquery动画位置百分比

vb.net - 是否可以将命名空间导入 SSRS 自定义代码

vb.net - 报告服务 - 处理空日期?

r - 选择单行矩阵作为矩阵

c - 二维数组不打印正确的输出

html - 用 <div> 和百分比制作一个标志

r - 如何在 tableone 包中的 createtableone 命令中按行报告百分比?