PowerBI中含Null任务值的工时表关联统计问题解决方案咨询
解决PowerBI工时统计中Task为Null导致数据丢失的问题
方案1:Power Query中填充Null Task值(推荐,不破坏原有关联逻辑)
通过预处理Time-entry数据,为Task为空的记录填充对应项目下的任意任务值,确保能通过现有关联追溯到项目:
- 先处理
Project Task表:- 进入Power Query,对
Project Task按Project字段分组,提取每组的第一个Task作为该项目的默认任务(任意任务都可以,只要关联到项目即可)。
- 进入Power Query,对
- 处理
Time-entry表:- 将上面生成的"项目-默认任务"表与
Time-entry按Project字段左连接。 - 添加自定义列,判断如果
Task为空则用默认任务填充,否则保留原Task值。 - 用填充后的Task列替换原列(或新增列),后续模型用这个填充后的列与
Project Task建立关联。
- 将上面生成的"项目-默认任务"表与
对应的Power Query M代码示例:
// 生成项目-默认任务映射表 let Source = #"Project Task", GroupedByProject = Table.Group(Source, {"Project"}, {{"Default Task", each List.First([Task]), type text}}) in GroupedByProject // 填充Time-entry的Null Task let Source = #"Time-entry", MergeWithDefault = Table.NestedJoin(Source, {"Project"}, #"Project Default Tasks", {"Project"}, "Project Defaults", JoinKind.LeftOuter), ExpandDefault = Table.ExpandTableColumn(MergeWithDefault, "Project Defaults", {"Default Task"}, {"Default Task"}), AddFilledTask = Table.AddColumn(ExpandDefault, "Filled Task", each if [Task] is null then [Default Task] else [Task]), CleanUp = Table.RemoveColumns(AddFilledTask, {"Default Task"}) in CleanUp
处理后,用Filled Task和Project Task关联,既保留原Task字段用于任务维度统计,又不会丢失Task为空的工时记录。
方案2:DAX度量值直接统计项目总工时
如果不想修改原始数据,可通过DAX度量值直接包含Task为空的工时:
项目总工时 = // 先统计正常关联的工时,再加上Task为空的对应项目工时 CALCULATE(SUM('Time-entry'[工时]), NOT ISBLANK('Time-entry'[Task])) + CALCULATE( SUM('Time-entry'[工时]), ISBLANK('Time-entry'[Task]), TREATAS(VALUES('Project'[Project]), 'Time-entry'[Project]) )
这个度量值会自动把Task为空的工时匹配到对应项目,不影响原有按Task统计的功能(用原关联的度量值即可)。
方案3:创建DAX计算列关联项目
在Time-entry表中添加计算列,手动关联项目:
关联项目 = IF( NOT ISBLANK('Time-entry'[Task]), RELATED('Project'[Project]), 'Time-entry'[Project] )
报表统计时,用这个关联项目列作为项目维度,替代原Project表的关联。这样既保留Task与Project Task的关联用于任务统计,又能覆盖Task为空的记录。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

