DAX LOOKUPVALUE 到 return "Undefined" 而不是空白?
DAX LOOKUPVALUE to return "Undefined" instead of blank?
如果 LOOKUPVALUE 函数未找到匹配项,如何获取替代结果字符串消息 "Not found" 或 "Undefined"? LOOKUPVALUE 函数的文档提到使用第四个参数很容易实现。第四个参数是可选的。但是当我输入它时,我收到一条错误消息。
这就是我需要它的原因。我想要一个尚未在字典中定义的产品类别。这可能是一个经典的场景。字典 table 是手动更新的,有一些滞后,因此它不包含 FactTable 中弹出的所有独特产品。我想通过 Bridge table 解决它,它将自动手动输入词典。
我使用下面的 Bridge table.
Bridge =
ADDCOLUMNS(
DISTINCT(UNION(DISTINCT(FactTable[product]), DISTINCT(Dictionary[product])))
, "FoundCategory"
, LOOKUPVALUE(
Dictionary[category]
, Dictionary[product]
, FactTable[product]
--, "Undefined" -- Uncommenting this argument throws error
)
)
编辑。 Power BI 2019 更新后,此问题消失。它一定是某种错误。上面的代码正在运行。万岁!
如何强制 LOOKUPVALUE 函数为 return 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。如果是这样,什么方法可能更有效?
如果您想重现该问题,请点击此处 table。
事实表:
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
你可以在其中使用 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
另一种方法是使用 LOOKUPVALUE 函数替代值字段。这允许您指定一个返回值而不是空白,从而节省了检查它是否为空白的时间。
LOOKUPVALUE 在 Microsoft 关于该函数的在线文档中。
编辑:
在 Power BI Desktop 中进行了快速测试,并能够获取替代值以在现有模型的计算列中工作。
LOOKUPVALUE(
Dictionary[category]
, Dictionary[product]
, FactTable[product])
, "Undefined"
)
如果 LOOKUPVALUE 函数未找到匹配项,如何获取替代结果字符串消息 "Not found" 或 "Undefined"? LOOKUPVALUE 函数的文档提到使用第四个参数很容易实现。第四个参数是可选的。但是当我输入它时,我收到一条错误消息。
这就是我需要它的原因。我想要一个尚未在字典中定义的产品类别。这可能是一个经典的场景。字典 table 是手动更新的,有一些滞后,因此它不包含 FactTable 中弹出的所有独特产品。我想通过 Bridge table 解决它,它将自动手动输入词典。
我使用下面的 Bridge table.
Bridge =
ADDCOLUMNS(
DISTINCT(UNION(DISTINCT(FactTable[product]), DISTINCT(Dictionary[product])))
, "FoundCategory"
, LOOKUPVALUE(
Dictionary[category]
, Dictionary[product]
, FactTable[product]
--, "Undefined" -- Uncommenting this argument throws error
)
)
编辑。 Power BI 2019 更新后,此问题消失。它一定是某种错误。上面的代码正在运行。万岁!
如何强制 LOOKUPVALUE 函数为 return 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。如果是这样,什么方法可能更有效?
如果您想重现该问题,请点击此处 table。
事实表:
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
你可以在其中使用 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
另一种方法是使用 LOOKUPVALUE 函数替代值字段。这允许您指定一个返回值而不是空白,从而节省了检查它是否为空白的时间。
LOOKUPVALUE 在 Microsoft 关于该函数的在线文档中。
编辑: 在 Power BI Desktop 中进行了快速测试,并能够获取替代值以在现有模型的计算列中工作。
LOOKUPVALUE(
Dictionary[category]
, Dictionary[product]
, FactTable[product])
, "Undefined"
)