首页 > 解决方案 > 没有完全匹配的查找表(找到大于的第一个值)

问题描述

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

我有两张桌子;表 A 包含我所有的对象和特征(例如建设年份或每月租金收入)。表 B 是一个“查找表”,该类的边界在哪里。

根据我的特点,我想在一个计算列(“出租类”)中对建筑物进行分类/分类。因此,如果租金收入为 423 欧元,则属于第 1 类,如果租金收入为 608 欧元,则属于第 4 类

表 A

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

表 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 中我不知道如何处理这个问题。

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

标签: powerbidaxvlookuplookup-tables

解决方案


您需要计算表 B 中边界大于表 A 中收入的第一类。

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

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
    )

注意:如果要将这些用于计算列,请SELECTEDVALUE删除TableA[Income].


推荐阅读