首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Power Query:神奇的函数——Expression.Evaluate

本文B站视频地址:

【49-Power Query神奇的Expression.Evaluate函数理解】

https://www.bilibili.com/video/BV1aD4y1K7HD/?share_source=copy_web&vd_source=29fd819b2a41afc6e6a9c40cd76d7034

Power Query神奇的Expression.Evaluate函数理解这是一个十分有趣的函数,类型在Excel工作表中常使用的宏表函数Evaluate,但是这个的Expression.Evaluate函数功能十分强大,也十分有趣,但是在官方的函数说明中,介绍比较简单,这节课我们一起来探究一下这个函数。

功能:将文本表达式或者M公式进行求值,返回一个结果。

语法:Expression.Evaluate(文本表达式as text ,[表达式环境] as record )as any

1、只考虑第一个参数的情况

来看一个简单的例子。将A列表达式中的算术表达式求值。结果列的公式可以写成:

那再来看另外一个例子,比如,我们要将进行转换成一个List列表。

也可以是一个生成record的公式:

这个例子是一个关于连贯编号展开的问题。

结果是每个都展开成了一个List列表,在求表达的时候,我们先需要将“-”替换成列表的运算符“..”。

再来看一个例子,甚至我们可以将自定义表的公式进行求值。

在这个例子中我们需要注意的是引号,因为第一个参数已经是一个文类型,使用时要用引号,那么引号里面的引号,要使用两个。

那么既然可以对表达式进行进值,能不能对一段完整的代码进行求值。如:

这说明Expression.Evaluate这个函数十分地强大,可以将完整的一段代码进行求值。

2、考虑第二个参数的情况

到此,我们还没有探索这个函数的第二个参数的用法。

来看一个例子,List.Sum()是对列表进行求和,当我们写以下的公式:

Power Query提示:名称“List.Sum”在当前上下文中不存在。

这是为什么?因为我们提供的第一个参数中的List.Sum是写在文本中,即引号中,所以Expression.Evaluate函数不知道List.Sum到底是一个求和函数,还是仅仅一段文本。所以需要我们指定这个环境。从官方的文档中的发现,上述公式可以修改为:

这个公式中第二个参数是一个record类型,符合函数的要求。因为我们指明了List.Sum的文形式指的就是List.Sum这个函数,为此,该函数就知道了,我们是要求文本的值,文本中出现的List.Sum函数就是Power Query的求和函数List.Sum。

上述的例子还有另外一种变形的用法,就是:

我们都知道=#shared,在Power Query中会返回所有的函数的名称以及用法,结果是record的类型。如图:

比如,我们在引用一个查询,通常是=查询名,这样是否可以使用Expression.Evaluate来返回原来的查询呢,

只写第一个参数的时候会显示错误提示。如下图所示

如果指定第二个参数的时候,答案是可以的。比如以下:

或者可以使用#sections来返回当前Power Query编辑器中的查询的列表。

这里的#section是返回Power Query编辑器中所有的查询名称结果,是一个record,这个里面面又包含着一个record,所以我们需要将这个再深化一下,即#section[section1]

如果在同一个查询中,也是可以:

如果我们在上述的例子中再做一个升级:‘

这个公式,会报错,提示无上下文环境。这是因为我们给步骤指明了上下文环境,但是没有指定Table.ToRows这个上下文环境。

所以我们可以进行修改:

或者

让我看看,是哪个小可爱翻到惊喜了~~

小必老师近期新出版的《Excel商务智能:Power Query和Power Pivot数据清洗、建模与分析实战》一书,在上市以来就取得不俗的表现,豆瓣上更是有了9.5分的评分。本书有50+的实战案例,有1G+的随书重难点章节的配套视频。主要讲解Power Query中的M和Power Pivot中的DAX,适用于Excel和Power BI。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230204A033O000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券