没有完全匹配的查找表(查找第一个大于的值)

Lookup tables with no exact match (find first value greater than)

我是 DAX 和 Power BI 的初学者。我想知道你会如何处理这样的问题:

我有两个table; Table A 包含我所有的对象和特征(例如建造年份或每月租金收入)。 Table B 一个“查找 table”,其中 class 的边界是

根据我的特点,我想bin/class计算列中的建筑物(“租金class”)。因此,如果租金收入为 423 欧元,则低于 class 1,如果租金收入为 608 欧元,则低于 class 4

Table一个

Building    Construction_year    Rental_income
B1           2016                 €423
B2           1995                 €650
B3           1949                 €720

Table B

Rental_class   Rental_boundary
Under_class_1   €424
Under_class_2   €607
Under_class_3   €651
Under_class_4   €720

这是我的预期结果

Building    Construction_year    Rental_income      Rental_class
B1           2016                 €423              Under_class_1
B2           1995                 €650              Under_class_3
B3           1949                 €720              Under_class_4

在Excel中,我会使用VLOOKUP(TRUE),但是在DAX中我不知道如何处理这个问题。

这种情况在我的数据中经常发生

你需要计算TableB中第一个class边界大于TableA中收入的class

类似于,我们可以使用TOPN找到合适的边界,然后取与之关联的class。

Lookup Rental_class = 
VAR Income = SELECTEDVALUE ( TableA[Rental_income] )
VAR Boundary =
    TOPN (
        1,
        FILTER ( TableB, TableB[Rental_boundary] >= Income ),
        TableB[Rental_boundary], ASC
    )
RETURN
    MAXX ( Boundary, [Rental_class] )

或者您可以使用几个 CALCULATE 函数。

Lookup Rental_class =
VAR Income = SELECTEDVALUE ( TableA[Rental_income] )
VAR Boundary =
    CALCULATE ( MIN ( TableB[Rental_boundary] ), TableB[Rental_boundary] >= Income )
RETURN
    CALCULATE (
        VALUES ( TableB[Rental_class] ),
        TableB[Rental_boundary] = Boundary
    )

注意:如果您想将这些用于计算列,请删除 TableA[Income] 周围的 SELECTEDVALUE 包装器。