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

请求构建DAX公式:计算PCgroup平均配送耗时(含多路线与暂停处理)

DAX解决方案与原有问题分析

原有逻辑核心问题

  • 维度拆分缺失:仅按PCgroup全局取最小/最大Delivery Time,未拆分Delivery Tour和Delivery Date维度,导致不同配送路线、不同日期的配送周期被混为一谈,起始/结束时间计算完全偏离实际业务场景。
  • 异常间隔未处理:未识别同一配送周期内连续配送时间的超长间隔(>30分钟),无法从总耗时中扣除该部分无效停顿时长,统计结果失真。

分步实现方案

1. 构建每日配送周期计算表

先创建计算表,按PCgroup + Delivery Tour + Delivery Date维度,计算每日配送起止时间及需扣除的超长间隔总和:

Daily_Delivery_Cycles = 
ADDCOLUMNS(
    -- 先按目标维度分组
    SUMMARIZE(
        Table_1,
        Table_1[PCgroup],
        Table_1[Delivery Tour],
        Table_1[Delivery Date]
    ),
    -- 每日配送起始时间
    "Daily_Start_Time", CALCULATE(MIN(Table_1[Delivery Time])),
    -- 每日配送结束时间
    "Daily_End_Time", CALCULATE(MAX(Table_1[Delivery Time])),
    -- 当日所有超过30分钟的间隔总和
    "Total_Long_Intervals", 
        VAR CurrentGroup = [PCgroup]
        VAR CurrentTour = [Delivery Tour]
        VAR CurrentDate = [Delivery Date]
        -- 按时间排序当前周期的所有配送时间点
        VAR SortedDeliveryTimes = CALCULATETABLE(
            SELECTCOLUMNS(Table_1, "Time", Table_1[Delivery Time]),
            Table_1[PCgroup] = CurrentGroup,
            Table_1[Delivery Tour] = CurrentTour,
            Table_1[Delivery Date] = CurrentDate,
            ORDER BY Table_1[Delivery Time] ASC
        )
        -- 计算连续时间点的间隔,筛选出超过30分钟的部分
        VAR IntervalCalculations = ADDCOLUMNS(
            SortedDeliveryTimes,
            "Next_Time", LEAD([Time], 1) OVER (ORDER BY [Time]),
            "Interval_Mins", DATEDIFF([Time], LEAD([Time], 1) OVER (ORDER BY [Time]), MINUTE)
        )
        RETURN SUMX(FILTER(IntervalCalculations, [Interval_Mins] > 30), [Interval_Mins])
)

2. 创建核心度量值

基于上述计算表,实现平均起止时间、基础耗时、扣除后耗时及状态标识:

-- 平均起始时间(所有日期的每日起始时间均值)
MinAVGvalue = 
AVERAGEX(
    Daily_Delivery_Cycles,
    Daily_Delivery_Cycles[Daily_Start_Time]
)

-- 平均结束时间(所有日期的每日结束时间均值)
MaxAVGvalue = 
AVERAGEX(
    Daily_Delivery_Cycles,
    Daily_Delivery_Cycles[Daily_End_Time]
)

-- 基础平均耗时(分钟):平均结束时间与平均起始时间的差值
Base_Average_Duration = 
DATEDIFF([MinAVGvalue], [MaxAVGvalue], MINUTE)

-- 扣除超长间隔后的平均耗时(分钟)
Adjusted_Average_Duration = 
VAR TotalDailyDurations = SUMX(
    Daily_Delivery_Cycles,
    DATEDIFF(Daily_Delivery_Cycles[Daily_Start_Time], Daily_Delivery_Cycles[Daily_End_Time], MINUTE)
)
VAR TotalDeductedIntervals = SUM(Daily_Delivery_Cycles[Total_Long_Intervals])
VAR TotalValidDays = COUNTROWS(Daily_Delivery_Cycles)
RETURN DIVIDE(TotalDailyDurations - TotalDeductedIntervals, TotalValidDays)

-- 超长间隔扣除标识
Has_Long_Interval_Deduction = 
IF(
    SUM(Daily_Delivery_Cycles[Total_Long_Intervals]) > 0,
    "已扣除超长间隔",
    "无超长间隔"
)

使用说明

  • 计算表Daily_Delivery_Cycles会自动按业务维度分组,每日数据独立计算,避免跨周期混淆。
  • 所有度量值支持按PCgroup和Delivery Tour筛选,直接展示对应维度下的统计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:07:06