MSChart - 强制从原点绘制折线图

Posted

技术标签:

【中文标题】MSChart - 强制从原点绘制折线图【英文标题】:MSChart - Forcing a line chart to draw from the Origin 【发布时间】:2012-02-02 06:19:15 【问题描述】:

我有一个从以下 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 查询,以便为每个日期提供一个值,即使并非所有数据都存在?还是其他方法?

谢谢。

【问题讨论】:

有多少系列?还显示了哪些其他内容? 整个图表使用 2 个系列,但就问题而言,就我所见,它也可能是独立的,但我可能错了。该图表有 1 个系列显示所描述的线,另一个显示从原点到当月最后一天的每月目标值(例如,50,000 英镑)的直线。 你可以尝试设置EmptyPointStyle.Color = 你的系列线的颜色 恐怕不行......我想它会填充第一个和最后一个数据点之间的空点,但它无法猜测之前或之后的点数据。不过,我还没有想到,所以谢谢你的建议。 是的,你是对的,它是用来填充的,但如果你把它作为一列而不是一行会更好,因为它不需要在所有日子都发生吗? 【参考方案1】:

正如评论中所建议的那样,我相信如果您可以将系列设置为 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

【讨论】:

太好了,我会试试 SQL 建议。感谢所有的帮助。

以上是关于MSChart - 强制从原点绘制折线图的主要内容,如果未能解决你的问题,请参考以下文章

vb6.0 MSChart 折线图

将 Google 可视化折线图 hAxis 原点设置为其初始值

用VB做数据折线图

如何从 Pandas 数据框中绘制多个折线图

echarts itemStyle 折线图原点样式调整

从数据的数据组中分别绘制折线图[重复]