Excel数据透视表度量值咨询:如何计算出勤的最大值与最小值
解决DAX中MAXX计算总出勤最大值返回错误结果的问题
看起来你遇到的问题是没摸透DAX度量值的上下文迭代逻辑,我来帮你梳理下问题和解决方案:
先修正你现有度量值的拼写错误
首先把你之前写错的度量值调整过来,避免后续计算出问题:
- 唯一日期计数:
=DISTINCTCOUNT('Range'[event date])(注意函数拼写和表名的正确引用,DISTINCTCOUNT要大写开头) - 日均出勤人数:
=[总出勤人数]/[唯一日期计数](修正除法符号和度量值名称的拼写错误)
为什么你的MAXX公式返回1?
你原来的公式=MAXX(RANGE, RANGE[TOTAL ATTENDANCE])有两个核心问题:
- 你直接迭代的是原始数据表
RANGE的每一行,而如果RANGE[TOTAL ATTENDANCE]是你创建的聚合度量值,它在行级上下文里会计算整个表的总出勤(因为SUM是全局聚合);如果它是个行级列,那可能每行的数值都是1,导致MAXX最终返回1。 - 你需要先按日期(或你想要的分组维度)汇总出勤数据,再在汇总后的结果里找最大/最小值,而不是直接迭代原始行数据。
正确的DAX公式
根据你的需求,分两种场景给出对应的公式:
场景1:计算每日总出勤人数的最大值/最小值
如果你想找出7-9月中,单日出勤人数的最高值和最低值,用以下度量值:
- 每日最大出勤人数:
=MAXX( SUMMARIZE( 'Range', 'Range'[event date], "每日总出勤", [总出勤人数] ), [每日总出勤] )
- 每日最小出勤人数:
=MINXX( SUMMARIZE( 'Range', 'Range'[event date], "每日总出勤", [总出勤人数] ), [每日总出勤] )
原理:SUMMARIZE函数先按event date分组,计算每个日期对应的总出勤人数,生成一个仅包含日期和每日出勤的汇总表;然后MAXX/MINXX迭代这个汇总表,提取出最大/最小的每日出勤数值。
场景2:计算月度总出勤人数的最大值/最小值
如果你想比较7、8、9这三个月各自的总出勤,找出其中的最大/最小值,用以下公式:
- 月度最大出勤人数:
=MAXX( SUMMARIZE( 'Range', MONTH('Range'[event date]), "月度总出勤", [总出勤人数] ), [月度总出勤] )
- 月度最小出勤人数:
=MINXX( SUMMARIZE( 'Range', MONTH('Range'[event date]), "月度总出勤", [总出勤人数] ), [月度总出勤] )
额外提示
如果你的数据透视表已经按日期或月份分组,也可以直接在透视表的值区域添加[总出勤人数],然后在值字段设置里选择最大值或最小值,不需要额外创建度量值(你提到排序功能无法计算,可能是布局问题,这个方法可以试试)。
内容的提问来源于stack exchange,提问作者paonalytics




