Power BI高效查询:统计由India专员预约的已完成任务
筛选India专员预约的已完成任务:优化DAX性能方案
为什么之前的计算表速度慢?
计算表会全量生成新表,当数据量较大时,全量遍历+筛选的开销极高,尤其是未做索引优化的情况下。优先用度量值或预处理替代计算表,能大幅提升性能。
方案1:用度量值实时计算(推荐)
不需要生成新表,直接在原活动表上创建度量值,仅计算符合条件的记录数:
India专员已完成任务数 = CALCULATE( COUNTROWS('活动表'), '活动表'[任务状态] = "Job done", '活动表'[预约专员] = "India", NOT(ISBLANK('活动表'[预约专员])) )
- 优势:CALCULATE会利用模型的列存储优化,只扫描符合筛选条件的行,避免全表计算,性能远优于计算表。
- 使用场景:需要在报表中动态展示统计数时。
方案2:Power Query预处理标记(适合频繁筛选)
在数据加载阶段提前标记符合条件的记录,后续直接过滤即可:
- 打开Power Query编辑器,加载活动表
- 添加自定义列,输入公式:
= if [任务状态] = "Job done" and [预约专员] = "India" and [预约专员] <> null then true else false
- 关闭并应用更改,之后在报表中直接筛选该列为
true的记录,或基于此列做统计。
- 优势:预处理仅执行一次,后续使用无需重复计算,性能最优。
方案3:优化计算表逻辑(若必须使用计算表)
如果业务场景必须生成计算表,通过减少扫描列和添加索引优化:
India专员已完成任务表 = FILTER( SELECTCOLUMNS( '活动表', "客户ID", '活动表'[客户ID], "任务ID", '活动表'[任务ID], "任务状态", '活动表'[任务状态], "预约专员", '活动表'[预约专员] ), [任务状态] = "Job done", [预约专员] = "India", NOT(ISBLANK([预约专员])) )
- 优化点:先用
SELECTCOLUMNS仅保留需要的列,减少筛选时的数据量;同时给客户ID、任务状态、预约专员列创建索引(模型视图中右键列→创建索引),提升筛选效率。
内容的提问来源于stack exchange,提问作者Dimplez
相关产品推荐
相关产品推荐

