Return 来自相关 table 通过 Power BI (DAX) 中的多对一关系的汇总值
Return a summarized value from a related table via a many to one relationship in Power BI (DAX)
我正在使用 PowerBI,但考虑到这是一个 Dax 问题,我认为这也适用于 power pivot。
考虑以下 tables,期望的结果是 Table - 一个:
Table - 许多
+----+-------+
| id | value |
+----+-------+
| 1 | a |
+----+-------+
| 1 | a |
+----+-------+
| 1 | a |
+----+-------+
Table - 一个
+----+-----------------------+
| id | minValueFromTableMany |
+----+-----------------------+
| 1 | (Expecting a) |
+----+-----------------------+
我在两个 table 之间建立了关系。我想在 'Table - One' 中派生一个新属性,它只是 table 中 'value' 的最小值 - 每个匹配的 id 都有很多。
这在任何 SQL-变体、Python 或 R 中都是微不足道的。
SQL
SELECT
T1.id
,T2.minValueFromTableMany
FROM TableOne T1
INNER JOIN (
SELECT MIN(value) as minValueFromTableMany
FROM TableMany
GROUP BY id
( as T2
ON T1.id = T2.id
我们如何在 DAX 中执行此操作?使用 min() 函数只是 returns 整个列的 min(value) 而不是使用我设置的关系。
在 DAX 中更简单。您可以像这样创建一个计算列:
minValueFromTableMany = CALCULATE(MIN(TableMany[value]),
ALLEXCEPT(TableOne, TableOne[id]))
这假定它们在 id
列上有关系。
这是另一种方法,无论有没有关系都应该有效:
minValueFromTableMany = CALCULATE(MIN(TableMany[value]),
TableMany[id] = EARLIER(TableOne[id]))
EARLIER
函数引用较早的行上下文。
您还可以使用MINX
函数:
minValueFromTableMany = MINX(
FILTER(TableMany, TableMany[id] = TableOne[id]),
TableMany[value])
我正在使用 PowerBI,但考虑到这是一个 Dax 问题,我认为这也适用于 power pivot。
考虑以下 tables,期望的结果是 Table - 一个:
Table - 许多
+----+-------+
| id | value |
+----+-------+
| 1 | a |
+----+-------+
| 1 | a |
+----+-------+
| 1 | a |
+----+-------+
Table - 一个
+----+-----------------------+
| id | minValueFromTableMany |
+----+-----------------------+
| 1 | (Expecting a) |
+----+-----------------------+
我在两个 table 之间建立了关系。我想在 'Table - One' 中派生一个新属性,它只是 table 中 'value' 的最小值 - 每个匹配的 id 都有很多。
这在任何 SQL-变体、Python 或 R 中都是微不足道的。
SQL
SELECT
T1.id
,T2.minValueFromTableMany
FROM TableOne T1
INNER JOIN (
SELECT MIN(value) as minValueFromTableMany
FROM TableMany
GROUP BY id
( as T2
ON T1.id = T2.id
我们如何在 DAX 中执行此操作?使用 min() 函数只是 returns 整个列的 min(value) 而不是使用我设置的关系。
在 DAX 中更简单。您可以像这样创建一个计算列:
minValueFromTableMany = CALCULATE(MIN(TableMany[value]),
ALLEXCEPT(TableOne, TableOne[id]))
这假定它们在 id
列上有关系。
这是另一种方法,无论有没有关系都应该有效:
minValueFromTableMany = CALCULATE(MIN(TableMany[value]),
TableMany[id] = EARLIER(TableOne[id]))
EARLIER
函数引用较早的行上下文。
您还可以使用MINX
函数:
minValueFromTableMany = MINX(
FILTER(TableMany, TableMany[id] = TableOne[id]),
TableMany[value])