DAX LOOKUPVALUE返回“未定义”而不是空白吗?

时间:2019-07-17 12:39:26

标签: powerbi dax lookup-tables

我有三个表模型。字典不完整。在FactTable中,可能会出现没有定义类别的新产品。

enter image description here

我使用以下 Bridge 表。

Bridge = 
    ADDCOLUMNS(
        DISTINCT(UNION(DISTINCT(FactTable[product]), DISTINCT(Dictionary[product])))
        , "FoundCategory"
        , LOOKUPVALUE(
              Dictionary[category]
            , Dictionary[product]
            , FactTable[product]
    )
)

如何强制LOOKUPVALUE函数返回Undefined而不是blank()的值。

我可以想到:

Bridge = 
ADDCOLUMNS(
    DISTINCT(UNION(DISTINCT(FactTable[product]), DISTINCT(Dictionary[product])))
    , "FoundCategory"
    , IF(ISBLANK(
        LOOKUPVALUE(
          Dictionary[category]
        , Dictionary[product]
        , FactTable[product])
        )
        ,"Unmapped"
        ,LOOKUPVALUE(
          Dictionary[category]
        , Dictionary[product]
        , FactTable[product])
        )
)

但是我不知道它是否不会两次计算LOOKUPVALUE。如果是这样,哪种方法更有效?

如果您想重新创建问题,请参见以下表格。

事实表:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSiwoyElVitWJVkpKzANCMLMgvySxJF8pNhYA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [product = _t])
in
    Source

词典:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSiwoyElV0lFKKyrNLFGK1YlWKsgvSSzJBwqVpaanliQmAaVjYwE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [product = _t, category = _t])
in
    Source

2 个答案:

答案 0 :(得分:1)

您可以在其中使用if else循环,例如:-

Bridge = 
    ADDCOLUMNS
   (
    DISTINCT(UNION(DISTINCT(FactTable[product]), DISTINCT(Dictionary[product]))),
    "FoundCategory",
    IF(
          LOOKUPVALUE(
          Dictionary[category],
          Dictionary[product],
          FactTable[product]) = "", 
          "Undefined", 
          LOOKUPVALUE(
          Dictionary[category],
          Dictionary[product],
          FactTable[product]))
    )

或者您可以这样做,

Bridge = 
        DISTINCT(UNION(DISTINCT(FactTable[product]), DISTINCT(Dictionary[product])))

然后是一个计算列:-

foundCategory = 

var look_up_value = LOOKUPVALUE(
          Dictionary[category],
          Dictionary[product],
          Bridge[product])

var out = IF(look_up_value = BLANK(), "undefined", look_up_value)

return out

答案 1 :(得分:0)

执行此操作的另一种方法是使用LOOKUPVALUE函数的备用值字段。这使您可以指定返回的值而不是空白,从而省去了检查是否为空的麻烦。

LOOKUPVALUE,位于该功能的Microsoft联机文档中。

编辑: 在Power BI Desktop中进行了快速测试,并能够获取替代值以在现有模型的计算列中使用。

LOOKUPVALUE(
          Dictionary[category]
        , Dictionary[product]
        , FactTable[product])
        , "Undefined"
)