4

レポートは次のとおりです。レポートテーブル

これは、列「最近の %Change」のパーセンテージを取得する方法です。

=((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

ここに画像の説明を入力

4

1 に答える 1

0

これは、問題を解決する最も簡単な方法です。クエリでは、別の列で最新の期間の合計を特定します (クエリを 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

于 2012-10-19T09:19:09.750 に答える