如何编写DAX公式计算过往同类训练日的平均训练负荷?
按日码计算过往同类训练日的平均训练量DAX公式修正
你的原公式存在逻辑问题:CALCULATE中使用ALL('Position Averages'[Day Code])清除了日码的筛选上下文,导致最终计算的是所有训练日的整体平均,而非按日码分组的同类训练日平均值。以下是修正后的方案:
基础版公式(获取同类日所有历史数据的平均)
按日码计算的过往同类训练日平均训练量 = AVERAGEX( -- 迭代当前筛选范围内的唯一日码 VALUES('Position Averages'[Day Code]), CALCULATE( AVERAGE('Position Averages'[Average Player Load (Session)]), -- 仅清除日期和活动名称的筛选,保留日码的筛选逻辑 ALL('Position Averages'[Date], 'Position Averages'[Activity Name]) ) )
公式说明:
VALUES('Position Averages'[Day Code]):提取当前筛选下的所有独立日码,作为迭代计算的基准,确保每个日码单独统计。ALL('Position Averages'[Date], 'Position Averages'[Activity Name]):清除日期和活动名称的筛选限制,让计算覆盖该日码对应的所有历史训练数据。AVERAGE(...):计算该日码下所有训练日的平均训练量。AVERAGEX:对每个日码的计算结果再做平均(如果当前视图包含多个日码,会输出所有日码的平均水平;若仅查看单个日码,则直接输出该日码的历史平均)。
进阶版公式(仅计算早于当前图表最大日期的过往数据)
如果需要严格排除当前图表中显示的最新日期数据,只统计过往同类日的平均值,可以添加日期筛选条件:
按日码计算的过往同类训练日平均训练量 = AVERAGEX( VALUES('Position Averages'[Day Code]), CALCULATE( AVERAGE('Position Averages'[Average Player Load (Session)]), ALL('Position Averages'[Date], 'Position Averages'[Activity Name]), -- 筛选出早于当前视图最大日期的历史数据 'Position Averages'[Date] < MAX('Position Averages'[Date]) ) )
内容的提问来源于stack exchange,提问作者Jonathan Sedy
相关产品推荐
相关产品推荐

