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

如何用DAX在PowerBI中创建车辆每日利用率交叉表

用DAX创建可复用的车辆每日利用率表

核心思路

先生成所有车牌与日期的全组合(确保无遗漏的日期/车辆),再关联事实表计算当日总作业时长,最后算出利用率(总作业时长÷8)。

具体DAX代码

假设:

  • dTrucks的车牌字段为LicensePlate
  • dCalendar的日期字段为Date
  • fJobs的作业时长字段为JobDuration(如果你的字段名不同,自行替换)
VehicleDailyUtilization = 
ADDCOLUMNS(
    -- 生成所有车牌和日期的笛卡尔积,确保每个车每天都有记录
    CROSSJOIN(dTrucks, dCalendar),
    -- 计算当日该车的总作业时长
    "TotalJobDuration",
    CALCULATE(
        SUM(fJobs[JobDuration]),
        -- 匹配当前行的车牌和日期
        fJobs[License plate] = EARLIER(dTrucks[LicensePlate]),
        -- 如果fJobs的Date是日期时间类型,用DATEVALUE转换匹配dCalendar的纯日期
        DATEVALUE(fJobs[Date]) = EARLIER(dCalendar[Date])
    ),
    -- 计算利用率,用DIVIDE避免除以0,空值返回0
    "UtilizationRate",
    DIVIDE([TotalJobDuration], 8, 0)
)

关键细节说明

  • CROSSJOIN(dTrucks, dCalendar):生成所有车辆与日期的组合,哪怕车辆当天无作业,也会保留记录(此时利用率为0),和Excel透视表的“显示无数据项”逻辑一致。
  • EARLIER():用于引用外层行上下文的车牌和日期,确保计算对应到当前行的车辆和日期。
  • DIVIDE():替代直接除法,避免当总作业时长为空(无作业)时出现错误,第三个参数指定空值时返回0。
  • 如果你的事实表中日期是带时间戳的,必须用DATEVALUE()转换为纯日期,才能和dCalendar的日期字段精准匹配。

后续复用

创建完成后,这个计算表可以直接用于任何可视化(比如矩阵、表格),也可以作为其他DAX计算的基础表,数据会随模型中fJobs、dTrucks、dCalendar的更新自动刷新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:05:19