首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SSRS -如何格式化SQL数据以生成时间序列折线图?

SSRS -如何格式化SQL数据以生成时间序列折线图?
EN

Stack Overflow用户
提问于 2018-12-05 05:56:21
回答 2查看 261关注 0票数 0

我有一张桌子,它是这样设置的

代码语言:javascript
复制
SELECT [EntryDate]        --Date
      ,[StoreId]          --Nvarchar
      ,[PassFailElement]  --Int, 1 or 0

并且为用户设置SSRS报告以输入@StartDate和@EndDate来添加他们想要查看的EntryDates。

有没有办法创建一个折线图,将从@StartDate到@EndDate的PassFailElement的值显示为第一个系列,将第二个系列的DateAdd(DateInterval.Year,-1,@StartDate)显示为DateAdd(DateInterval.Year,-1,@EndDate),然后将两年前的第三个系列的值显示出来?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-05 08:59:55

我相信有一百万种更优雅的方法可以做到这一点,但以下是我可能采用的方法……

下面是基于微软提供的NorthWind数据库,所以如果你真的想要,你可以重建它。

我在这里设置了实际的开始和结束日期值,但是您可以注释掉前几行,然后应用您的SSRS参数。

因此,首先使用orders表,因为它有一些日期,并连接到一些基本的订单数据,以便我可以看到结果看起来很好,大多数列都没有使用。

我的数据集是这样的.

代码语言:javascript
复制
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语句检查日期是否属于以下三个组之一

开始日期和结束日期之间的时间间隔相同的日期范围,但减去相同日期范围之间的一年,但减去两年

计算出的OrderMonthOrderDay在那里,因为我假设您会想要‘堆叠’这些线,因此,假设6月1日,所有三个组在图表上处于相同的水平位置。**请参阅后面的备注以更改此设置。

WHERE子句执行类似的测试,以确保我们只返回所需范围内的数据。

我所做的只是简单地添加一个折线图并设置

将系列分组添加到[YearGroup]字段中,并将[OrderMonth]和OrderDay添加到CategoryGroup

  • 中,我使用OrderID的和作为值。

**如果要将时间范围表示为一个连续时间,请从类别组中移除OrderMonth和OrderDay,并替换为OrderDate

得到的图表看起来很糟糕,但这只是数据的问题。

票数 1
EN

Stack Overflow用户

发布于 2018-12-05 08:58:43

我将在您的数据集中创建两个计算字段,以分解数据并将其添加到图表中。

第一个字段用于确定数据是当前年份、上一年还是上一年。也许只有0、1或2?此字段将用作图表系列。叫它ENTRY_YEAR吧。

第二个是日期字段,年份都设置为当前年份。您可以只将第一个字段中的整数相加。这将使您的所有数据标准化为一年时间线。实际上,您不会使用年份--这只是为了在年假时分隔数据。

=DATEADD("y", ENTRY_YEAR, Fields!EntryDate.Value)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53622039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档