如何使用Power BI DAX提取指定条件下的最小SRF值?
Power BI实现需求的具体方法
现有两个数据表:
表1:存储每个Tower ID对应的Height值(示例中Tower ID 123的Height为500)
| Tower ID | Bottom Dia | Top Dia | Height |
|---|---|---|---|
| 123 | Cell 2 | Cell 1 | 500 |
表2:存储同一Tower ID下的多组height和SRF数据,需筛选出height小于表1对应Height的所有SRF,取最小值(示例中筛选后SRF为0.25、0.1、0.3、0.2,最小值是0.1)
| Tower ID | Mass | height | SRF |
|---|---|---|---|
| 123 | Cell 2 | 650 | 0.3 |
| 123 | Cell 2 | 500 | 0.25 |
| 123 | Cell 2 | 450 | 0.1 |
| 123 | Cell 2 | 200 | 0.3 |
| 123 | Cell 2 | 50 | 0.2 |
下面提供几种适合新手的实现方式:
方式一:表1添加DAX计算列(直接得到结果列)
先确保表1和表2通过Tower ID建立一对多关系(表1是一方,表2是多方),然后在表1中新建计算列,输入以下DAX公式:
最小SRF = VAR 当前塔高 = '表1'[Height] VAR 符合条件的SRF数据 = FILTER( RELATEDTABLE('表2'), '表2'[height] < 当前塔高 ) RETURN MINX(符合条件的SRF数据, '表2'[SRF])
公式逻辑:
- 先获取当前行Tower ID对应的表1高度值
- 关联表2,筛选出其中height小于该高度的所有行
- 在筛选后的行里提取SRF的最小值
方式二:创建DAX度量值(适配报表交互)
如果需要在报表中配合切片器、筛选器动态展示结果,就创建度量值:
最小SRF_动态 = VAR 当前选中塔ID = SELECTEDVALUE('表1'[Tower ID]) VAR 当前塔高 = CALCULATE(MAX('表1'[Height]), '表1'[Tower ID] = 当前选中塔ID) VAR 符合条件的SRF数据 = FILTER( ALL('表2'), '表2'[Tower ID] = 当前选中塔ID && '表2'[height] < 当前塔高 ) RETURN MINX(符合条件的SRF数据, '表2'[SRF])
这个度量值会根据报表中选中的Tower ID自动计算对应结果,适合做交互式报表。
方式三:Power Query预处理(静态结果)
如果不需要动态计算,直接用Power Query提前处理好结果更简单:
- 打开Power Query编辑器,加载表1和表2
- 选中表1,点击「合并查询」,选择表2,匹配列选Tower ID,合并类型选「左外部」
- 展开合并后的表2列,只保留height和SRF
- 添加自定义列,输入
[height] < [Height],筛选出该列值为True的行 - 按Tower ID分组,对SRF列选择「最小值」作为聚合方式
- 关闭并应用,得到的新表就是每个Tower ID对应的最小SRF结果
内容的提问来源于stack exchange,提问作者Vikram Suriyanarayanan
相关产品推荐
相关产品推荐

