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

Power BI高效查询:统计由India专员预约的已完成任务

筛选India专员预约的已完成任务:优化DAX性能方案

为什么之前的计算表速度慢?

计算表会全量生成新表,当数据量较大时,全量遍历+筛选的开销极高,尤其是未做索引优化的情况下。优先用度量值或预处理替代计算表,能大幅提升性能。


方案1:用度量值实时计算(推荐)

不需要生成新表,直接在原活动表上创建度量值,仅计算符合条件的记录数:

India专员已完成任务数 = 
CALCULATE(
    COUNTROWS('活动表'),
    '活动表'[任务状态] = "Job done",
    '活动表'[预约专员] = "India",
    NOT(ISBLANK('活动表'[预约专员]))
)
  • 优势:CALCULATE会利用模型的列存储优化,只扫描符合筛选条件的行,避免全表计算,性能远优于计算表。
  • 使用场景:需要在报表中动态展示统计数时。

方案2:Power Query预处理标记(适合频繁筛选)

在数据加载阶段提前标记符合条件的记录,后续直接过滤即可:

  1. 打开Power Query编辑器,加载活动表
  2. 添加自定义列,输入公式:
= if [任务状态] = "Job done" and [预约专员] = "India" and [预约专员] <> null then true else false
  1. 关闭并应用更改,之后在报表中直接筛选该列为true的记录,或基于此列做统计。
  • 优势:预处理仅执行一次,后续使用无需重复计算,性能最优。

方案3:优化计算表逻辑(若必须使用计算表)

如果业务场景必须生成计算表,通过减少扫描列和添加索引优化:

India专员已完成任务表 = 
FILTER(
    SELECTCOLUMNS(
        '活动表',
        "客户ID", '活动表'[客户ID],
        "任务ID", '活动表'[任务ID],
        "任务状态", '活动表'[任务状态],
        "预约专员", '活动表'[预约专员]
    ),
    [任务状态] = "Job done",
    [预约专员] = "India",
    NOT(ISBLANK([预约专员]))
)
  • 优化点:先用SELECTCOLUMNS仅保留需要的列,减少筛选时的数据量;同时给客户ID、任务状态、预约专员列创建索引(模型视图中右键列→创建索引),提升筛选效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:32:53