You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSRS报表如何基于日期参数展示历史销售汇总数据?

SSRS销售报表:日期范围汇总与动态标签实现方案

一、SQL查询调整(获取汇总数据)

你的现有SQL用于提取指定日期范围的销售明细,我们可以通过新增汇总数据集或扩展现有查询来获取三个核心指标:

方案1:独立汇总数据集(推荐)

创建名为ds_SalesSummary的数据集,复用@ItemNo、@StartDate参数,SQL如下:

WITH CTE_SalesHeaderData (DocN, NoSeries, PostingDate)       
AS (
    SELECT [No_], [No_ Series], [Posting Date] FROM [Sales Invoice Header]
    UNION ALL           
    SELECT [No_], [No_ Series], [Posting Date] FROM [Sales Cr_Memo Header]
    UNION ALL           
    SELECT [No_], [No_ Series], [Posting Date] FROM [Service Invoice Header]
    UNION ALL           
    SELECT [No_], [No_ Series], [Posting Date] FROM [Service Cr_Memo Header]
),
CTE_SalesLinesData (DocNo2, ItemNo, Qty)  
AS (
    SELECT [Document No_], [No_], [Quantity] FROM [Sales Invoice Line] WHERE [Type] <> '1'
    UNION ALL
    SELECT [Document No_], [No_], [Quantity] FROM [Sales Cr_Memo Line] WHERE [Type] <> '1'
    UNION ALL
    SELECT [Document No_], [No_], [Quantity] FROM [Service Invoice Line] WHERE [Type] IN ('1','2')
    UNION ALL
    SELECT [Document No_], [No_], [Quantity] FROM [Service Cr_Memo Line] WHERE [Type] IN ('1','2')
),
CTE_AllSales AS (
    SELECT
        SLD.ItemNo,
        SHD.PostingDate,
        CASE
            WHEN SHD.NoSeries IN ('SI','PSI') THEN SLD.Qty
            WHEN SHD.NoSeries IN ('SC','PSC') THEN SLD.Qty * (-1)
            ELSE 0
        END AS AdjustedQty
    FROM CTE_SalesHeaderData SHD
    LEFT JOIN CTE_SalesLinesData SLD ON SLD.DocNo2 = SHD.DocN
    WHERE SLD.ItemNo = @ItemNo AND SLD.Qty > 0
)
SELECT
    SUM(CASE WHEN PostingDate BETWEEN DATEADD(MONTH, -6, @StartDate) AND @StartDate THEN AdjustedQty ELSE 0 END) AS QtyLast6Months,
    SUM(CASE WHEN YEAR(PostingDate) = YEAR(@StartDate) THEN AdjustedQty ELSE 0 END) AS QtyThisYear,
    SUM(CASE WHEN YEAR(PostingDate) = YEAR(@StartDate) - 1 THEN AdjustedQty ELSE 0 END) AS QtyLastYear,
    YEAR(@StartDate) - 1 AS LastYear
FROM CTE_AllSales

方案2:扩展现有明细查询

若不想新增数据集,可在现有SELECT中加入窗口函数,每条明细会重复汇总值(适合小数据量):

-- 在现有SELECT语句末尾添加
SUM(CASE WHEN SHD.PostingDate BETWEEN DATEADD(MONTH, -6, @StartDate) AND @StartDate THEN [Qty.] ELSE 0 END) OVER () AS QtyLast6Months,
SUM(CASE WHEN YEAR(SHD.PostingDate) = YEAR(@StartDate) THEN [Qty.] ELSE 0 END) OVER () AS QtyThisYear,
SUM(CASE WHEN YEAR(SHD.PostingDate) = YEAR(@StartDate) - 1 THEN [Qty.] ELSE 0 END) OVER () AS QtyLastYear,
YEAR(@StartDate) - 1 AS LastYear

二、SSRS报表配置

1. 动态上年销量标签

选中上年销量的标签文本框,设置表达式:

="Qty. Sold in " & First(Fields!LastYear.Value, "ds_SalesSummary")

(使用方案2时,替换数据集名为你的明细数据集名称)

2. 汇总值文本框配置

三个汇总文本框的值表达式分别为:

  • 近6个月销量:=First(Fields!QtyLast6Months.Value, "ds_SalesSummary")
  • 本年销量:=First(Fields!QtyThisYear.Value, "ds_SalesSummary")
  • 上年销量:=First(Fields!QtyLastYear.Value, "ds_SalesSummary")

3. 关键注意点

  • 确保@StartDate参数类型为Date/Time,避免年份计算错误
  • 如需更精准的年份范围,可替换YEAR()逻辑为DATEFROMPARTS,例如本年范围:PostingDate BETWEEN DATEFROMPARTS(YEAR(@StartDate),1,1) AND DATEFROMPARTS(YEAR(@StartDate),12,31)
  • 验证信用备忘录的负数量调整逻辑是否匹配业务规则,确保销量统计准确

内容的提问来源于stack exchange,提问作者adhocEY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 02:45:00