我确信还有一百万种更优雅的方法可以做到这一点,但这是我可能会采用的方法......
以下内容基于 Microsoft 提供的 NorthWind 数据库,因此如果您真的想重新创建它...
我在这里设置了实际的开始和结束日期值,但您可以注释掉前几行,然后您的 SSRS 参数将被应用。
所以从一个订单表开始,因为它有一些日期并加入了一些基本订单数据,这样我就可以看到结果看起来不错,大部分列都没有使用。
我的数据集看起来像这样...
SET DATEFORMAT YMD
DECLARE @startDate date = '1998/04/01'
DECLARE @endDate date = '1998/07/30'
SELECT
e.EmployeeID, e.FirstName, e.LastName, e.Title
, o.OrderID, o.OrderDate
, c.CustomerID, c.CompanyName
, CASE
WHEN (OrderDate between @startDate and @endDate ) THEN 'This Year'
WHEN (OrderDate between dateadd(YYYY,-1,@startDate) and dateadd(YYYY,-1,@endDate )) THEN 'Last Year'
WHEN (OrderDate between dateadd(YYYY,-2,@startDate) and dateadd(YYYY,-2,@endDate )) THEN '2 Years ago'
END as YearGroup
, MONTH(OrderDate) AS OrderMonth
, Day(OrderDate) AS OrderDay
FROM Employees e
join Orders o on e.EmployeeID = o.EmployeeID
join Customers c on o.CustomerID = c.CustomerID
WHERE
(OrderDate between @startDate and @endDate ) OR
(OrderDate between dateadd(YYYY,-1,@startDate) and dateadd(YYYY,-1,@endDate )) OR
(OrderDate between dateadd(YYYY,-2,@startDate) and dateadd(YYYY,-2,@endDate ))
SELECT 子句中的 Case 语句检查日期是否属于三个组之一
- 在提供的开始日期和结束日期之间
- 在同一日期范围内但减去一年
- 在相同的日期范围内但减去两年
计算出的OrderMonth 和OrderDay 在那里,因为我假设你会想要“堆叠”这些线,比如说,6 月 1 日,所有三个组在图表上处于相同的水平位置。 ** 请参阅后面的注释以更改此设置。
WHERE 子句执行类似的测试,以确保我们只返回所需范围内的数据。
我所做的只是添加一个折线图并设置
-
[YearGroup] 字段的系列组
-
[OrderMonth] 和 [OrderDay] 到 CategoryGroup
- 并且(没有其他原因,除了我没有太多要显示的内容之外)我使用 OrderID 的总和作为值。
** 如果要将时间范围表示为一个连续时间,则从类别组中删除 OrderMonth 和 OrderDay 并替换为 OrderDate
生成的图表看起来很糟糕,但这取决于数据。