[已解决] 关于用M语言实现Indirect功能的探讨

  [复制链接]
查看260961 | 回复185 | 2021-2-19 01:12:19 | 显示全部楼层 |阅读模式
假设已存在查询“表1”,新建一个空白查询并在编辑栏输入公式 "= 表1",则新查询返回"表1"。

类似于Excel的Indirect函数,是否有可能动态返回已存在的表,即通过公式 "=Indirect("表"&"X")",根据X的动态取值返回"表1"、"表2"..."表X"?

请各位大佬指点。

谢谢。
回复

使用道具 举报

wahfen | 2021-2-19 01:19:19 | 显示全部楼层
11221112038081.png
回复

使用道具 举报

都市狂飚 | 2021-2-19 01:24:20 | 显示全部楼层
感谢大佬拨冗指点。

谢谢。
PS:
1、Record.FieldOrDefault(record as nullable record, field as text, optional defaultValue as any) as any
返回记录 record 中指定字段 field 的值。 如果找不到字段,则返回可选的 defaultValue。
2、#shared 调取Power Query M函数集。
3、查询选项 -->隐私级别-->使用您的组合数据时的隐私级别设置。
回复

使用道具 举报

pang555 | 2021-2-19 01:29:20 | 显示全部楼层
M里有个和INDIRCT很神似的函数
  1. = Expression.Evaluate("Query1", #shared)
复制代码
或者
  1. = Expression.Evaluate("Query1", [Query1=Query1])
复制代码



比较特别的是,Expression.Evaluate(arg1 as text, optional arg2 as record)中arg1的计算是在arg2所定义的估值环境中进行的。

光这样说太抽象,这是一篇参考文章,有兴趣的话可以了解了解:
https://blog.crossjoin.co.uk/2015/02/06/expression-evaluate-in-power-querym/
回复

使用道具 举报

yuhonghong111 | 2021-2-19 01:34:20 | 显示全部楼层
M里有个和INDIRCT很神似的函数
或者


感谢指点,两种写法,结果相同。

但操作中,PQ能完美返回,加载到模型时就会报错(即便只有一列一行),提示如下:

“OLE DB 或 ODBC 错误 : [Expression.Error] 无法将值 null 转换为类型 Table。。”

或许是表太多的缘故,可惜了,本想可以动态选择不同场景下的源表。
回复

使用道具 举报

19491010 | 2021-7-3 10:38:22 | 显示全部楼层
广告位,,坐下看看
回复

使用道具 举报

xgtiansheng | 2021-7-29 06:13:24 来自手机 | 显示全部楼层
没人回帖。。。我来个吧
回复

使用道具 举报

东莞高步康 | 2021-10-3 10:20:58 来自手机 | 显示全部楼层
我是个凑数的。。。
回复

使用道具 举报

du2004 | 2021-11-12 14:26:39 | 显示全部楼层
支持,一直很喜欢老师的课程
回复

使用道具 举报

hylinfeng | 2021-11-28 17:36:05 | 显示全部楼层
不错不错.,..我一直很喜欢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则