Power BI中DAX代码解析求助:__avail__变量含义与计算逻辑
Power BI DAX瀑布图代码解析
问题背景
刚入职第一份实习,需理解一段用于生成瀑布图的Power BI DAX代码,代码如下:
_Bridge_% = VAR __avail__ = SUM([MaxCapacityLbs]) + SUM([UpstreamRateLossLbs]) RETURN SWITCH(MIN(TRSp_Area_Bridge[Lookup]), "theo", BLANK(), "a", BLANK(), "b", BLANK(), "c", BLANK(), "c2", BLANK(), "c21", BLANK(), "avl", 1, "d", SUM([Loss_d]) / __avail__, "d22", SUM([Loss_d22]) / __avail__, "e", SUM([Loss_e]) / __avail__, "e1", SUM([Loss_e1]) / __avail__, "e2", BLANK(), "e3", BLANK(), "e5", SUM([Loss_e5]) / __avail__, "f", SUM([Loss_f]) / __avail__, "f11", SUM([Loss_f11]) / __avail__, "f130", SUM([Loss_f130]) / __avail__, "f131", SUM([Loss_f131]) / __avail__, "f132", SUM([Loss_f132]) / __avail__, "f14", SUM([Loss_f14]) / __avail__, "f2", SUM([Loss_f2]) / __avail__, "f3", SUM([Loss_f3]) / __avail__, "f4", SUM([Loss_f4]) / __avail__, "g1", SUM([Loss_g1]) / __avail__, "g23", SUM([Loss_g23]) / __avail__, "g24", SUM([Loss_g24]) / __avail__, "g25", SUM([Loss_g25]) / __avail__, "g26", SUM([Loss_g26]) / __avail__, "g3", SUM([Loss_g3]) / __avail__, "i", BLANK()
存在的疑问:
- 首次接触Power BI,对DAX的运行逻辑存疑
- SWITCH分支数量远多于图表展示的13个条形,不清楚原因
- 核心困惑:
__avail__变量的作用,以及/ __avail__的计算意义
代码解析
1. __avail__与/ __avail__的核心作用
__avail__是DAX变量,用于计算可用总容量基准值:
SUM([MaxCapacityLbs]):求和得到系统的最大承载重量SUM([UpstreamRateLossLbs]):求和得到上游环节的损耗重量- 两者相加得到的
__avail__,是作为分母的统一基准,将各类损耗(Loss_xx字段)转换为占可用总容量的百分比
/ __avail__的计算逻辑:把某类损耗的总重量除以可用总容量基准,最终得到该损耗在总可用容量中的占比,这是瀑布图展示各环节损耗占比的核心计算逻辑。
2. SWITCH多分支未使用的原因
分支数多于图表展示条形的原因通常有两点:
- 该度量值是通用计算逻辑:数据表
TRSp_Area_Bridge的Lookup字段包含所有分支的取值,但当前瀑布图仅筛选出了13个有效类别展示 - 预留扩展空间:后续新增损耗类别时,只需在图表中添加对应
Lookup值即可,无需修改DAX代码
3. Power BI中DAX的运行逻辑(新手向)
DAX不是传统的“预存储算法”,而是动态计算引擎:
- 度量值(如
_Bridge_%)不会提前计算存储结果,而是在用户交互(筛选、切换图表等)时,根据当前上下文(筛选出的行/列维度)实时计算 - 代码中的
MIN(TRSp_Area_Bridge[Lookup])是获取当前筛选上下文下Lookup字段的唯一值,再匹配SWITCH分支返回对应计算结果
内容的提问来源于stack exchange,提问作者Devin Bowen
相关产品推荐
相关产品推荐

