powerbi - 拉取对应于最大值或最小值的行的最佳方法
问题描述
假设我TableA
和TableB
那个没有关系。
在TableA
我创建一个计算列,该列根据涉及两个表中多个列的复杂表达式计算最小值(例如,请参阅我的答案here)。
MinValue = MINX(TableA, [ComplexExpression])
这很好用,但我真正要寻找的是ID
发生最小值的行。
为了一个具体的例子,让我们看看以下内容:
TableA
:
ID X Y
-------------
1 2.1 -1.3
2 3.5 0.5
3 6.5 5.9
4 3.1 4.2
5 2.8 -2.7
6 5.7 -1.5
TableB
:
ID X Y
-------------
A 2.3 2.7
B 2.8 -4.8
C 4.1 1.1
D -0.5 0.9
E -3.7 2.4
我添加了一个计算列TableA
,给出了最小的欧几里得距离。
MinDist = MINX(TableB, ROUND(SQRT((TableA[X]-TableB[X])^2 + (TableA[Y]-TableB[Y])^2), 2))
现在,我想找到与最近点相对应的ID
from 。TableB
也就是说,我想要下表:
ID X Y MinDist B-ID
-----------------------------
1 2.1 -1.3 3.12 C
2 3.5 0.5 0.85 C
3 6.5 5.9 5.28 A
4 3.1 4.2 1.70 A
5 2.8 -2.7 2.10 B
6 5.7 -1.5 3.05 C
我已经让它与以下工作
MinDist = CALCULATE(MAX(TableB[ID]),
FILTER(TableB,
ROUND(SQRT((TableA[X]-TableB[X])^2 + (TableA[Y]-TableB[Y])^2), 2)
= TableA[MinDist]))
但理想情况下,我想要一种更优雅/更有效的方法,我不必两次使用相同的复杂表达式。
解决方案
根据您使用数据的方式,这可以为您提供所需的内容。
基本上,创建一个作为保存函数的度量,然后从其他度量/列公式调用该度量。
所以首先,我创建了一个度量来计算最小距离。
MinDistToB =
VAR SelectedX = SELECTEDVALUE(TableA[X])
VAR SelectedY = SELECTEDVALUE(TableA[Y])
RETURN
MINX(TableB, ROUND(SQRT((SelectedX - [X]) ^ 2 + (SelectedY - [Y]) ^ 2), 2))
然后我创建了一个度量来获取 ID。
MinDistToB_ID =
VAR MinDist = [MinDistToB]
RETURN
MAXX(FILTER(TableB, [MinDistToB] = MinDist), [ID])
把它全部放在一个矩阵中,我明白了。
如果您需要它们成为列,您可以这样定义距离。
Col_MinDist = [MinDistToB]
和 ID 列一样。
Col_MinDistID = MAXX(FILTER(TableB, [MinDistToB] = [Col_MinDist]), [ID])
把它们放在桌子上,我明白了。
有了所有这些,您可以编辑一个度量,其他所有内容都会相应更新(甚至是列)。
推荐阅读
- git - 合并原点/主节点的行为不符合预期
- design-patterns - 如何摆脱回调量,更好的设计?
- angular - 从 API 检索数据并显示在饼图中
- javascript - 无法解析模块“react-redux/lib/components/connect”
- r - R:在DataFrame中按行计算满足多个条件的观察
- java - Spring Boot默认连接池tomcat属性不起作用
- javascript - 除非被迫,否则 Vue 不会更新计算
- sql - 是否可以将两个 SQL (MS Access) 查询合并为一个?
- c# - 如果使用 TransactionScope,则无法从 Azure VM 访问 Azure DB
- c# - c和c#之间的共享函数