通过多对一关系从

时间:2018-04-12 18:51:40

标签: powerbi dax powerpivot

我正在使用PowerBI,但考虑到这是一个Dax问题,我认为这也适用于电源枢轴。

考虑以下表格,表格中包含所需的结果 - 一:

表 - 很多

+----+-------+
| id | value |
+----+-------+
| 1  | a     |
+----+-------+
| 1  | a     |
+----+-------+
| 1  | a     |
+----+-------+

表 - 一个

+----+-----------------------+
| id | minValueFromTableMany |
+----+-----------------------+
| 1  | (Expecting a)         |
+----+-----------------------+

我在两个表之间建立了关系。我想在'Table - One'中派生一个新属性,它只是表中'value'的最小值 - 对于每个匹配的id都很多。

这在任何SQL-varient,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()函数只返回整个列的min(值),而不是使用我设置的关系。

1 个答案:

答案 0 :(得分:2)

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