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

PowerBI中用DAX计算员工下一个可用日期的问题排查

问题:DAX度量值无法正确返回员工下一个可用负载日期

我有一份员工每日负载表,结构及数据示例如下:

Date     |        assignee        |        TotalLoad (%)

01.01.2023       employee_X                125
01.01.2023       employee_X                75
01.01.2023       employee_X                25
...
31.12.2023       employee_X                50

01.01.2023       employee_Y                125
01.01.2023       employee_Y                75
01.01.2023       employee_Y                50
...
31.12.2023       employee_Y                50

我需要编写一个DAX度量值,找出员工下一个负载小于100%的可用日期。

我尝试了以下DAX代码,但度量值始终为所有员工返回01.01.2023(首个日期):

Next Available Day = 
VAR CurrentEmployee = SELECTEDVALUE('employees_daily_load'[assignee])
VAR CurrentDate = SELECTEDVALUE('employees_daily_load'[Date])
VAR NextAvailableDay =
CALCULATE(
    MIN(employees_daily_load[Date]),
    FILTER(employees_daily_load,
    'employees_daily_load'[assignee] = CurrentEmployee &&
    'employees_daily_load'[TotalAssignedUnitsforDay] <= 50 &&
    'employees_daily_load'[Date] > CurrentDate
    )
)
RETURN NextAvailableDay

问题分析与修正

核心问题

  1. 列名不匹配:原表中的负载列是TotalLoad (%),但代码中误用了TotalAssignedUnitsforDay,导致筛选条件完全失效,返回的是所有符合日期条件的最小日期。
  2. 未聚合每日总负载:原数据中同一日期同一员工有多条负载记录,直接筛选单条记录的负载值无法判断当日是否整体可用,必须先计算当日总负载。

修正后的DAX度量值

Next Available Day = 
VAR CurrentEmployee = SELECTEDVALUE('employees_daily_load'[assignee])
VAR CurrentDate = SELECTEDVALUE('employees_daily_load'[Date])
-- 先聚合每个员工每日的总负载
VAR DailyTotalLoad = 
    ADDCOLUMNS(
        SUMMARIZE('employees_daily_load', 'employees_daily_load'[assignee], 'employees_daily_load'[Date]),
        "DailyTotal", SUM('employees_daily_load'[TotalLoad (%)])
    )
-- 筛选符合条件的日期并取最小值
VAR NextAvailableDay =
    MINX(
        FILTER(
            DailyTotalLoad,
            [assignee] = CurrentEmployee &&
            [DailyTotal] < 100 &&
            [Date] > CurrentDate
        ),
        [Date]
    )
RETURN NextAvailableDay

关键说明

  • 聚合每日负载:通过SUMMARIZE+ADDCOLUMNS计算每个员工每日的总负载,确保判断的是当日整体负载是否低于100%。
  • 修正列名:替换了代码中错误的列名,匹配原表的TotalLoad (%)。
  • 使用MINX筛选:在聚合后的数据集上直接筛选并取最小日期,避免上下文筛选冲突,逻辑更直观。

如果你的模型中已经有单独的日期维度表(推荐使用),可以进一步优化:

Next Available Day = 
VAR CurrentEmployee = SELECTEDVALUE('employees_daily_load'[assignee])
VAR CurrentDate = SELECTEDVALUE('Date'[Date])
VAR NextAvailableDay =
    MINX(
        FILTER(
            ALL('Date'[Date]),
            'Date'[Date] > CurrentDate &&
            CALCULATE(SUM('employees_daily_load'[TotalLoad (%)]), 'employees_daily_load'[assignee] = CurrentEmployee) < 100
        ),
        'Date'[Date]
    )
RETURN NextAvailableDay

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:22:58