2012-01-04 38 views
0

我有一个数据绑定图表运行从以下MSSQL查询画 -的MSChart - 强制线图,从产地

"SELECT dateinvoiced AS Date, (SELECT SUM(value) FROM jobs WHERE dateinvoiced >= '" + 
new DateTime(year, month, 1).ToString("yyyy-MM-dd") + "' AND dateinvoiced <= 
j.dateinvoiced)/100 AS Revenue FROM jobs j WHERE dateinvoiced >= '" + new 
DateTime(year, month, 1).ToString("yyyy-MM-dd") + "' AND dateinvoiced <= '" + new 
DateTime(year, month, daysInMonth).ToString("yyyy-MM-dd") + "' GROUP BY dateinvoiced" 

(请原谅我想象空间的处理日期,一言难尽一种奇怪的方式,但我很快就会改变它们。)

该查询获取用户业务在日历月中每天完成的工作所累积的金额。图表本身将该数据与当月的目标数值进行比较,因此用户可以看到每月目标的进展情况。事情的这一面都工作正常,查询也是如此。问题出现在月初。

从上面的查询绘制的线显然是从第一个数据点开始的。如果一个用户在一个月的中途没有拿到任何钱,然后获得一个大的值,那么由于只有一个点存在,因此在图表上不会绘制任何线。它会一直保持这样的状态,直到用户晚些时候拿到钱,然后他们才能看到一条线。

我想要的是确保始终有一行可以从原始图上看到图表,即使用户只有一天的数据。

我自己能够做到这一点的唯一方法是检查数据绑定之前第1天是否有数据,以及是否没有简单地将零价值销售记录插入表中。我相信你可以看到为什么这是不可接受的。有没有办法将一个点手动添加到数据绑定表上?我试过了,似乎无法做到这一点。如果没有,那么是否有某种方法可以改变SQL查询,以便为每个日期赋予一个值,尽管数据对于它们都不存在?或者任何其他方法呢?

谢谢。

+0

多少个系列?显示了什么其他的东西? – V4Vendetta 2012-01-04 10:36:15

+0

整个图表使用了2个系列,但就目前的问题而言,它可能是独立的,只要我能看到,但我可能是错的。该图表有一个系列显示了所描述的行,另一个系列显示了该月的最后一天从原点到月度目标值(例如50,000英镑)的直线。 – Hecksa 2012-01-04 10:49:14

+0

好,你可以尝试设置'EmptyPointStyle.Color' =你的系列线的颜色 – V4Vendetta 2012-01-04 11:00:02

回答

0

正如评论中所建议的那样,如果您可以将系列设置为Column类型而不是Line,我相信会更容易,因为所有日期都不需要记录相关记录。

如果你想让所有这些日期变得可用,那么一个会输出所有日子的查询将会很好,然后你可以在你需要的集合上加入它来获得这些值。用零代替没有的值。

WITH AllDays 
AS 
(
    SELECT CAST('20120101' as datetime) AS DAYS 
    UNION ALL 
    SELECT DATEADD(dd, 1, DAYS) 
    FROM AllDays 
    WHERE DATEADD(dd, 1, DAYS) < cast('20120201' as datetime) 
) 
SELECT DAYS 
FROM AllDays -- consider making the join here as you need 
+0

太棒了,我会给SQL提示一下。感谢所有的帮助。 – Hecksa 2012-01-04 12:18:01