powerbi - DAX 在不相关的表中查找第一个非空白值
问题描述
如何在不相关的表中查找第一个非空白值。我想要相当于:
- SQL
outer apply (select top 1 ...)
或 - 电子表格
VLOOKUP
。
该代码中使用的 DAXLOOKUPVALUE
函数不起作用。
LOOKUPVALUE(
SearchTable[name]
, SearchTable[id] -- how to get the fist value, if here are multiple id?
, ThisTable[id]
)
LOOKUPVALUE
如果结果只返回一个唯一值,DAX函数可以正常工作。LOOKUPVALUE
如果在搜索表中找到一个键的多个值,则该函数返回错误消息:
在需要单个值的地方提供了一个包含多个值的表。
样本数据文件:
评论接受的答案
我最喜欢 Alexis Olson 的第二种方法,尽管我更喜欢VAR
变化EARLIER
:
MyLookup =
var LookupKey = ThisTable[Product]
return
CALCULATE (
MAX ( SearchTable[Category] ),
SearchTable[Product] = LookupKey
)
我接受了它,尽管我有一种强烈的感觉,这不是可能存在的最佳答案。函数返回MAX
而不是返回TOP 1
显然是额外的努力。
样本数据现在包含 4 个工作解决方案。我根据自己的喜好给它们编号了。前两个是亚历克西斯奥尔森。据我从 DAX Studio 中了解到的,这两种解决方案都同样快速并且具有简单的执行计划。第二种解决方案是唯一只执行两次表扫描的解决方案(所有其他方法都有 3 次扫描)。第三种解决方案的执行计划很复杂,在第三次扫描时,它会遍历整个搜索表,无论是否是一百万行。
这个问题有一个后续问题,我尝试比较 Dax Studio 中的查询:
如何在 Daxstudio 中检查哪个 DAX 查询具有更好的性能?
更新寻求进一步改进
我想知道是否有可能实现比当前获胜答案更短的查询计划。获胜代码将在DaxStudio中进行评估,并且查询计划应该更短,然后总共 20 行查询计划的物理行和逻辑行。
-- Bounty code
EVALUATE
ADDCOLUMNS (
VALUES ( ThisTable[Product] ),
"FilterLookup",
VAR LookupKey = ThisTable[Product]
RETURN
CALCULATE ( MAX ( SearchTable[Category] ), SearchTable[Product] = LookupKey )
)
解决方案
试试这个:
Column =
VAR row_id = ThisTable[id]
VAR ret_val =
SELECTCOLUMNS (
TOPN (
1;
CALCULATETABLE (
SearchTable;
SearchTable[id] = row_id;
SearchTable[name] <> BLANK ()
)
);
"name"; SearchTable[name]
)
RETURN
ret_val
推荐阅读
- java - 在带有 Maven 和 Java 14 的 NetBeans 12 中使用“清理和构建项目”时出现类路径错误
- r - 在 highcharter 中是否有来自 ggplot 的“geom_density_2d”的替代方案?
- d3.js - D3 Plus 环网截断
- python - 在功能性 Keras 模型中使用 lambda 重塑输入
- autohotkey - 使用自动热键编写多调希腊语
- reactjs - 使用无效数据调用的函数 Query.startAfter()
- c# - 将 DSL 查询转换为 NEST (elasticsearch)
- javascript - 如何从 2 个同样错误的选项中更改值?
- f# - 在 F# 中使用 xplot/plotly 的连续误差带
- bash - 是否可以将多个文件名更改为 bash 中的文件扩展名?