当我进行逐月查询时,如何在ssrs 2005中表示年度数据

时间:2015-02-09 05:53:28

标签: sql-server reporting-services reportingservices-2005

我有一个这样的数据集,其中查询参数是月份名称。

enter image description here

现在我必须以这种方式代表年度报告,其中qty将是月份的总数,而值将是TotalValue。

enter image description here

我该怎么办?我是否需要在ssrs中使用矩阵或编写新查询。我不熟悉使用矩阵。 我当前的查询是,

ALTER PROCEDURE [dbo].[spRPTMonthlyProductionSummaryFORATL]
    @MonthName  Varchar(50)
-- Exec spRPTMonthlyProductionSummaryFORATL 'Sep,2014'
AS BEGIN
Declare @FromDate datetime, @ToDate datetime
Select @FromDate = Convert(Datetime,@MonthName), @ToDate = DateAdd(d,-1,DateAdd(m,1,Convert(Datetime,@MonthName)))
Declare @SQL nVarchar (4000)
SET @SQL = '
WITH
    allocations AS (
        SELECT SC.Name AS BUYER, 
        CASE WHEN PPC.FactoryName = ''ANANTA'' THEN OM.OrderQty END AS Unit1_Qty,
        CASE WHEN PPC.FactoryName = ''ACWL'' THEN OM.OrderQty END AS Unit2_Qty,
        CASE WHEN PPC.FactoryName = ''DNV'' THEN OM.OrderQty END AS Unit3_Qty,
        CASE WHEN PPC.FactoryName = ''ANANTA'' THEN OM.OrderQty * FR.Rate END AS Unit1_Value, 
        CASE WHEN PPC.FactoryName = ''ACWL'' THEN OM.OrderQty * FR.Rate END AS Unit2_Value, 
        CASE WHEN PPC.FactoryName = ''DNV'' THEN OM.OrderQty * FR.Rate END AS Unit3_Value
    FROM LineAllocation LA
    INNER JOIN OrderMaster OM ON LA.OrderRef= OM.OrderRefID
    INNER JOIN AmanOTS..FileRef FR ON FR.FileRefID = OM.FileRefID
    INNER JOIN SystemManager..Contacts SC ON SC.Code=OM.BuyerCode
    INNER JOIN SystemManager..ProductionProcessCostCenter PPC ON PPC.CostCenter= LA.Line
    INNER JOIN OrderMasterCostBreakdown OCB ON OCB.OrderRefID= OM.OrderRefID
    INNER JOIN SystemManager..ProductionProcess PP ON PP.ProcessID = PPC.ProcessId
    where UseDate = @MonthName AND ProcessName =''Sewing'' 
    )
SELECT 
    BUYER, 
Unit1_Qty,
Unit2_Qty,
Unit3_Qty,
Unit1_Value, 
Unit2_Value, 
Unit3_Value,
(ISNULL(Unit1_Qty,0) + ISNULL(Unit2_Qty,0) + ISNULL(Unit3_Qty,0)) as TotalQty,
(ISNULL(Unit1_Value,0) + ISNULL(Unit2_Value,0) + ISNULL(Unit3_Value,0)) as TotalValue
FROM allocations;'

EXEC sp_executesql
@sql
,N'@MonthName varchar(30)'
,@MonthName = @MonthName;
End

1 个答案:

答案 0 :(得分:1)

我假设您要从JanDec

开始显示一年的报告
WITH
allocations AS (
    SELECT SC.Name AS BUYER, 
    CASE WHEN PPC.FactoryName = ''ANANTA'' THEN OM.OrderQty END AS Unit1_Qty,
    CASE WHEN PPC.FactoryName = ''ACWL'' THEN OM.OrderQty END AS Unit2_Qty,
    CASE WHEN PPC.FactoryName = ''DNV'' THEN OM.OrderQty END AS Unit3_Qty,
    CASE WHEN PPC.FactoryName = ''ANANTA'' THEN OM.OrderQty * FR.Rate END AS Unit1_Value, 
    CASE WHEN PPC.FactoryName = ''ACWL'' THEN OM.OrderQty * FR.Rate END AS Unit2_Value, 
    CASE WHEN PPC.FactoryName = ''DNV'' THEN OM.OrderQty * FR.Rate END AS Unit3_Value,
    UseDate
FROM LineAllocation LA
INNER JOIN OrderMaster OM ON LA.OrderRef= OM.OrderRefID
INNER JOIN AmanOTS..FileRef FR ON FR.FileRefID = OM.FileRefID
INNER JOIN SystemManager..Contacts SC ON SC.Code=OM.BuyerCode
INNER JOIN SystemManager..ProductionProcessCostCenter PPC ON PPC.CostCenter= LA.Line
INNER JOIN OrderMasterCostBreakdown OCB ON OCB.OrderRefID= OM.OrderRefID
INNER JOIN SystemManager..ProductionProcess PP ON PP.ProcessID = PPC.ProcessId
where YEAR(UseDate) = @YearToShow AND ProcessName =''Sewing'' 
)
SELECT 
  BUYER, 
  Month(UseDate) AS Month,
  SUM(COALESCE(Unit1_Qty,0)) Unit1Quantiry,
  SUM(COALESCE(Unit2_Qty,0)) Unit2Qunatity,
  SUM(COALESCE(Unit3_Qty,0)) Unit3Quantity,
  SUM(COALESCE(Unit1_Value,0)) Unit1Value, 
  SUM(COALESCE(Unit2_Value,0)) Unit2Value, 
  SUM(COALESCE(Unit3_Value,0)) Unit3Value,
  SUM(COALESCE((ISNULL(Unit1_Qty,0) + ISNULL(Unit2_Qty,0) + ISNULL(Unit3_Qty,0)),0)) as TotalQty,
  SUM(COALESCE((ISNULL(Unit1_Value,0) + ISNULL(Unit2_Value,0) + ISNULL(Unit3_Value,0)),0)) as TotalValue
FROM allocations
GROUP BY
    Month(UseDate),Buyer;

这将为您提供全年的一些月份。您将作为@YearToShow参数传递的内容。

此查询未经过测试