【问题标题】:Best way to pull the row that corresponds to a max or min拉取对应于最大值或最小值的行的最佳方法
【发布时间】:2018-06-08 16:35:14
【问题描述】:

假设我有 TableATableB 没有关系。

TableA 上,我创建了一个计算列,该列根据涉及两个表中多个列的复杂表达式计算最小值(例如,参见my answer 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))

现在,我想从TableB 中找到与最近点对应的ID。也就是说,我想要下表:

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]))

但理想情况下,我想要一种更优雅/更高效的方法,我不必两次使用相同的复杂表达式。

【问题讨论】:

标签: powerbi dax


【解决方案1】:

根据您使用数据的方式,这可以满足您的需求。

基本上,创建一个用作保存函数的度量,然后从其他度量/列公式调用该度量。

首先,我创建了一个度量来计算最小距离。

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])

把这些放到一张桌子上,我明白了。

通过所有这些,您可以编辑一个度量,其他所有内容都会相应更新(甚至列)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 2019-04-18
    • 1970-01-01
    相关资源
    最近更新 更多