MSChart - 强制折线图从Origin绘制

时间:2012-01-04 10:30:55

标签: c# sql-server data-binding mschart

我有一个数据绑定图表从以下MSSQL查询运行 -

"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查询以为每个日期提供一个值,即使数据不存在于所有日期?或任何其他方法?

感谢。

1 个答案:

答案 0 :(得分:0)

根据评论中的建议,我认为如果您可以将系列设置为Column类型而不是Line会更容易,因为所有日子都不需要有与之关联的记录。< / p>

如果您希望所有这些日期都可用,那么输出所有日期的查询将会很好,然后您可以将其加入所需的集合以获取这些值。用零代替你没有的值。

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