如何用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
相关产品推荐
相关产品推荐

