You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用DAX在折线图时间轴创建线性投影线(含计算表方案)

生成线性投影数据的解决方案(计算表+日历表方案)

1. 先搞定通用日历表

首先需要一个覆盖所有项目时间范围的日历表,用DAX直接生成(以Power BI为例,Excel可通过序列功能生成后加载):

通用日历 = 
ADDCOLUMNS (
    CALENDAR ( MIN('项目表'[开始日期]), MAX('项目表'[结束日期]) ),
    "年份", YEAR([Date]),
    "月份", MONTH([Date]),
    "日", DAY([Date])
)

这个表会自动包含所有项目的最早开始日到最晚结束日的所有日期,后续用来匹配每日数据。

2. 创建项目每日投影计算表

用DAX生成关联项目、日期和每日/累计目标的计算表,实现线性拆分:

项目每日投影表 = 
GENERATE (
    '项目表',
    VAR 项目总天数 = DATEDIFF('项目表'[开始日期], '项目表'[结束日期], DAY) + 1
    VAR 项目日期区间 = CALENDAR('项目表'[开始日期], '项目表'[结束日期])
    RETURN
    ADDCOLUMNS (
        项目日期区间,
        "每日目标值", '项目表'[目标值] / 项目总天数,
        "累计投影目标", 
            VAR 当前日期 = [Date]
            VAR 已度过天数 = DATEDIFF('项目表'[开始日期], 当前日期, DAY) + 1
            RETURN 已度过天数 * ('项目表'[目标值] / 项目总天数)
    )
)

关键逻辑说明:

  • GENERATE:把每个项目和它的完整日期区间做匹配,生成逐行的日期-项目对应关系
  • 项目总天数:含首尾当天的总周期天数,避免拆分目标时少算一天
  • 累计投影目标:用来绘制线性投影线的核心值,计算到当前日期的累计应完成目标

3. 建立表间关系

在模型视图中:

  • 连接通用日历[Date]和项目每日投影表[Date](一对一关系)
  • 连接项目表[项目]和项目每日投影表[项目](一对一关系)
    确保关系正常激活,不然可视化会出问题。

4. 绘制线性投影线

用折线图可视化:

  • X轴:选通用日历[Date]
  • Y轴:选项目每日投影表[累计投影目标]
  • 图例:选项目每日投影表[项目]
    就能得到每个项目的线性进度投影线。

更优替代方案(无额外计算表)

如果不想新增计算表,可以直接用度量值实现,更轻量化:

累计投影目标 = 
VAR 当前选中日期 = MAX('通用日历'[Date])
VAR 当前项目 = SELECTEDVALUE('项目表'[项目])
VAR 项目启始日 = CALCULATE(MAX('项目表'[开始日期]), '项目表'[项目] = 当前项目)
VAR 项目截止日 = CALCULATE(MAX('项目表'[结束日期]), '项目表'[项目] = 当前项目)
VAR 总周期天数 = DATEDIFF(项目启始日, 项目截止日, DAY) + 1
VAR 已过天数 = DATEDIFF(项目启始日, 当前选中日期, DAY) + 1
VAR 单日目标 = CALCULATE(MAX('项目表'[目标值]), '项目表'[项目] = 当前项目) / 总周期天数
RETURN
IF(当前选中日期 BETWEEN 项目启始日 AND 项目截止日, 已过天数 * 单日目标, BLANK())

直接把这个度量值拖到折线图Y轴,X轴用日历日期,就能生成投影线,减少表数量,适合数据量较大的场景。

内容的提问来源于stack exchange,提问作者Pawel Osipowski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:45:36