Power BI用DAX度量值计算切片器选中日期区间的销售计划
DAX区间销售计划度量值修正方案
原代码错误点
- 拼写错误:结果计算部分的
ALCULATE拼写错误,正确为CALCULATE - 上下文处理错误:
LASTDATE('calendar'[Date])会受当前可视化的筛选上下文影响,不等于切片器选中的最大日期,会导致日期区间判断错误 - 逻辑冗余:不需要用
SUMX遍历日期维度计算,日均计划是固定值,直接乘以选中区间天数即可 - 跨月兼容问题:原代码仅支持选中日期在同一个月的场景,跨月场景下计算逻辑不符合需求
修正后的DAX代码
VAR minselectdate = CALCULATE(MIN('calendar'[Date]), ALLSELECTED('calendar')) VAR maxselectdate = CALCULATE(MAX('calendar'[Date]), ALLSELECTED('calendar')) // 生成选中区间内所有涉及的月份列表 VAR involved_months = SUMMARIZE( FILTER(ALL('calendar'), 'calendar'[Date] >= minselectdate && 'calendar'[Date] <= maxselectdate), "month_end_date", EOMONTH('calendar'[Date], 0), // 用月末日期作为月份分组依据,无需提前建年月列 "month_firstday", EOMONTH('calendar'[Date], -1) + 1, "month_lastday", EOMONTH('calendar'[Date], 0), "selected_days_in_month", COUNTROWS( FILTER( 'calendar', 'calendar'[Date] >= MAX('calendar'[Date], minselectdate) && 'calendar'[Date] <= MIN(EOMONTH('calendar'[Date], 0), maxselectdate) ) ) ) // 按月份单独计算该月选中天数对应的计划额,再加总 VAR Result = SUMX( involved_months, VAR month_total_plan = CALCULATE( SUM('Все_отчет1_Квоты'[Квота месяц]), DATESBETWEEN('calendar'[Date], [month_firstday], [month_lastday]), ALLSELECTED('calendar') ) VAR month_total_days = DATEDIFF([month_firstday], [month_lastday], DAY) + 1 VAR daily_plan = DIVIDE(month_total_plan, month_total_days, 0) RETURN daily_plan * [selected_days_in_month] ) RETURN Result
逻辑说明
- 首先取切片器选中的最小、最大日期,确定计算范围
- 提取选中区间内涉及的所有月份,分别统计每个月在选中区间内的天数
- 按月份读取对应月度总计划,计算单月日均计划
- 单月日均计划乘以该月被选中的天数,所有月份结果加总得到最终区间计划额
- 同时兼容单月、跨月的选中场景,完全符合示例计算规则:选中2021/1/1-2021/1/7时,计算结果为310/31*7=70美元
内容的提问来源于stack exchange,提问作者Dias Mukashev
相关产品推荐
相关产品推荐

