PowerBI中使用DATESBETWEEN实现财年折线图可视化咨询
解决PowerBI非日历年3个财年折线图的实现方法
嘿,我来帮你搞定这个非日历年(财年截止6月30日)的折线图问题!咱们可以按以下步骤一步步来操作,确保三个财年的数据能完美对齐展示:
第一步:构建正确的财年日期表
PowerBI的时间智能函数依赖连续的日期表,而且我们需要给日期表添加财年相关的计算列,这样才能准确区分不同财年的周期。如果你的模型里还没有日期表,可以用下面的DAX公式创建:
Date Table = ADDCOLUMNS ( // 覆盖你三个财年的所有日期范围 CALENDAR (DATE(2015,7,1), DATE(2018,6,30)), // 计算财年:7月及以后属于下一年财年 "财年", IF(MONTH([Date])>6, YEAR([Date])+1, YEAR([Date])), // 计算财年月份:7月=财年M1,6月=财年M12 "财年月份", IF(MONTH([Date])>6, MONTH([Date])-6, MONTH([Date])), // 可选:添加财年周期标签,比如"FY16-M01"(对应2015年7月) "财年周期标签", "FY" & RIGHT(IF(MONTH([Date])>6, YEAR([Date])+1, YEAR([Date])),2) & "-M" & FORMAT(IF(MONTH([Date])>6, MONTH([Date])-6, MONTH([Date])),"00") )
创建完后,记得把这个表标记为日期表(右键表 → 标记为日期表 → 标记为日期表),并且和你的Report表通过Date字段建立关系。
第二步:创建财年对应的收入度量值
根据你的需求,我们可以创建两种度量值:单月收入或者累计收入(就是你提到的"Revenue from Start")。
1. 单月财年收入度量值
如果要展示每个财年对应月份的收入,创建三个度量值分别对应三个财年:
财年1收入 = CALCULATE( SUM(Report[Revenue]), FILTER( ALL('Date Table'), 'Date Table'[财年] = 2016 && // 对应2015.7-2016.6 'Date Table'[财年月份] = MAX('Date Table'[财年月份]) ) )
财年2收入 = CALCULATE( SUM(Report[Revenue]), FILTER( ALL('Date Table'), 'Date Table'[财年] = 2017 && // 对应2016.7-2017.6 'Date Table'[财年月份] = MAX('Date Table'[财年月份]) ) )
财年3收入 = CALCULATE( SUM(Report[Revenue]), FILTER( ALL('Date Table'), 'Date Table'[财年] = 2018 && // 对应2017.7-2018.6(修正你描述的笔误) 'Date Table'[财年月份] = MAX('Date Table'[财年月份]) ) )
2. 累计收入度量值(Revenue from Start)
如果要展示从财年开始到当前月份的累计收入,用下面的DAX:
财年1累计收入 = CALCULATE( SUM(Report[Revenue]), FILTER( ALL('Date Table'), 'Date Table'[财年] = 2016 && 'Date Table'[财年月份] <= MAX('Date Table'[财年月份]) ) )
同理复制修改财年编号,创建财年2和财年3的累计收入度量值。
第三步:构建折线图并设置
- 插入折线图,将
Date Table中的财年月份拖到横轴(可以右键横轴 → 格式 → 数字格式改为"00",显示为01-12,或者自定义格式为"MM月",对应7月到次年6月) - 将刚才创建的三个财年收入/累计收入度量值拖到纵轴
- 在图例中重命名每个系列,比如把"财年1收入"改成"财年1(2015.7-2016.6)",这样更直观
- 如果需要,还可以添加数据标签,让数值更清晰
补充:用DATESBETWEEN实现的方式
如果你更倾向于用DATESBETWEEN函数,也可以这样写度量值(以财年1累计收入为例):
财年1累计收入 = VAR CurrentFYMonth = MAX('Date Table'[财年月份]) VAR FY1EndDate = EOMONTH(DATE(2015,6,30), CurrentFYMonth) RETURN CALCULATE( SUM(Report[Revenue]), DATESBETWEEN( 'Date Table'[Date], DATE(2015,7,1), FY1EndDate ) )
不过用财年和财年月份的筛选方式更灵活,不需要硬编码日期。
内容的提问来源于stack exchange,提问作者cnhtractor
相关产品推荐
相关产品推荐

