Power BI DAX问题:如何仅对唯一日期计算Table2DurationHours行总和
修正DAX公式解决多行求和异常问题
当前DAX公式对FactTable中Table2DurationHours列的所有行求和,导致单个日期(如2022年6月5日)的小时数异常偏大——同一日期存在多行数据时,公式会累加所有行的数值,但实际应仅计算每行对应日期的单值。
当前使用的DAX公式
Week 1
Week1Duration = VAR SelectedWeekStart = SELECTEDVALUE('01_Date'[Start of Week]) VAR Week1StartDate = CALCULATE(MIN('01_Date'[CalendarDate]), '01_Date'[Start of Week] = SelectedWeekStart) VAR Week1EndDate = Week1StartDate + 6 RETURN CALCULATE( SUM(FactTable[Table2DurationHours]), 'FactTable'[Date] >= Week1StartDate && 'FactTable'[Date] <= Week1EndDate )
Week 2
Week2Duration = CALCULATE(SUM('FactTable'[Table2DurationHours]), REMOVEFILTERS('01_Date'[Start of Week]), '01_Date'[Week ID] = MAX('01_Date'[Week ID]) + 1)
修正后的DAX公式
核心思路:遍历每周的唯一日期,对每个日期取单个Table2DurationHours值(避免同一日期多行累加),再汇总每周总时长。
Week 1
Week1Duration = VAR SelectedWeekStart = SELECTEDVALUE('01_Date'[Start of Week]) VAR Week1StartDate = CALCULATE(MIN('01_Date'[CalendarDate]), '01_Date'[Start of Week] = SelectedWeekStart) VAR Week1EndDate = Week1StartDate + 6 // 筛选出该周的唯一日期 VAR FilteredUniqueDates = DISTINCT(FILTER('FactTable', 'FactTable'[Date] >= Week1StartDate && 'FactTable'[Date] <= Week1EndDate)[Date]) RETURN // 遍历每个唯一日期,取对应单值后求和 SUMX( FilteredUniqueDates, CALCULATE(MAX(FactTable[Table2DurationHours])) )
Week 2
Week2Duration = VAR NextWeekID = MAX('01_Date'[Week ID]) + 1 // 获取下周的所有日期 VAR NextWeekDates = CALCULATE(VALUES('01_Date'[CalendarDate]), '01_Date'[Week ID] = NextWeekID) RETURN // 遍历下周每个日期,取对应单值后求和 SUMX( NextWeekDates, CALCULATE(MAX(FactTable[Table2DurationHours])) )
说明
- 若同一日期的多行
Table2DurationHours数值一致,使用MAX/MIN/AVERAGE均可;若数值存在差异,需根据业务逻辑选择对应取值方式(如取第一行、最新行等)。 - 示例表格显示:部分日期存在多行记录,原公式会累加这些行的时长,修正后仅对每个日期取一次值,避免结果偏大。
内容的提问来源于stack exchange,提问作者jislesplr
相关产品推荐
相关产品推荐

