Power BI 如何编写DAX实现逐行计算过去1年滚动累计值
问题原因诊断
原有公式存在2个核心逻辑错误,直接导致返回全量累计值:
- 时间区间筛选逻辑写反:
DT[Date] <= EARLIER(DT[1YearAgo])是取所有早于1年前的日期,自然返回的是从最早统计日期到1年前的全量累计,不是近1年的滚动区间 ALL(DT)无差别清除了整张表的所有筛选,无法保留部门、产品类别等其他维度的筛选条件,不符合常规业务统计需求
正确写法分两种场景
场景1:在DT表中新建「过去1年滚动累计净利润」计算列
1年滚动累计_计算列 = CALCULATE ( SUM ( DT[NetIncome] ), -- 按业务需求保留需要的筛选维度,不需要保留其他维度可直接替换为ALL(DT) ALLEXCEPT(DT, DT[部门], DT[产品类别]), -- 时间范围限定为当前行日期往前推1年 到 当前行日期 DT[Date] >= EDATE(EARLIER(DT[Date]), -12), DT[Date] <= EARLIER(DT[Date]) )
如果你已经提前算好了
DT[1YearAgo]列(值为对应Date字段往前1年的日期),也可以把EDATE(EARLIER(DT[Date]), -12)直接替换为EARLIER(DT[1YearAgo])
场景2:新建可动态筛选的「过去1年滚动累计净利润」度量值
1年滚动累计_度量值 = VAR 当前上下文最大日期 = MAX(DT[Date]) VAR 滚动区间起始日期 = EDATE(当前上下文最大日期, -12) RETURN CALCULATE ( SUM(DT[NetIncome]), DATESBETWEEN(DT[Date], 滚动区间起始日期, 当前上下文最大日期), -- 保留除了日期以外的所有筛选条件 ALLSELECTED(DT[Date]) )
度量值不需要使用EARLIER函数,直接通过变量获取当前上下文的日期即可,适配矩阵、折线图、切片器等所有可视化组件的筛选逻辑
内容的提问来源于stack exchange,提问作者stackpik
相关产品推荐
相关产品推荐

