前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Power Query 系列 (05) - M 语言介绍

Power Query 系列 (05) - M 语言介绍

原创
作者头像
StoneWM
修改2019-09-18 10:37:33
2.3K0
修改2019-09-18 10:37:33
举报
文章被收录于专栏:Stone的专栏

M 语言或者叫 M 查询语言是 Power Query (简称为 PQ) 幕后的英雄。据说 Power Query Editor 可视化操作可以实现 PQ 80% 的功能,所以从操作层面来说,大部分人不用学习 M 语言,但学习和掌握 M 语言无疑是在数据处理的时候如虎添翼,而且,有一些 M 的基础也能加深对 PQ 操作步骤的理解,进而有可能对这些应用的步骤做一些优化和改善。总的来说,M 是一种值得学习和掌握的技能,Excel 和 Power BI 都可以用。

创建空查询 (blank query)

前面我们都是连接外部数据源,然后双击 Excel Sheet 右边的查询名称进入Power Query查询编辑器,今天介绍如何通过创建一个空查询的方法进入查询编辑器。有两种方法创建空查询:

  • 方法一:切换到【数据】选项卡,然后通过【获取数据】- 【自其他源】- 【空白查询】的方式,Excel 创建一个空白查询,打开并进入到Power Query 查询编辑器。
  • 方法二: 先通过【获取数据】- 【启动 Power Query 查询编辑器】进入到Power Query 查询编辑器界面,然后在编辑器界面中创建空查询。

高级编辑器

M 语言代码在进入查询编辑器后,【主页】和【视图】两个选项卡,都有“高级编辑器”按钮,点击即可进入。对于空查询来说,进入后的界面是下面这样:

本篇我们就将通过这个高级编辑器,来了解 M 语言的基础知识。我们假设读者已经有其他编程语言的概念,如果没有其他编程语言的使用经验,建议参考其他文章或书籍了解一下编程语言的概念,比如变量,语句,程序语言的结构等等。

let 语句

个人理解,let 语句的主要作用是配合 PQ 编辑器,方便看到查询中的每一个步骤的公式和结果。比如,我们写在高级编辑器中写一个简单的语句:

点击完成按钮,编辑器显示如下:

在右边应用的步骤中,编辑器把 a、b 和 result 都当做一个步骤,点击其中的某一个步骤,中间的公式栏 (Formula bar) 分别显示出这一个步骤的公式。

let 语句可以很复杂,但我这个理解应该不会有太大的问题。

标识符命名规范

Power Query M 是一种格式自由,但区分大小写的语言,所以标识符命名也要区分大小写,除此之外,其他限制比较少:

  • 以非数字、非符号开头(下划线 (_)除外),可以是字母或汉字
  • 名称中只能用下划线(_)和点(.)进行分割,如果标识符中出现其他的符号,在标识符前加上# 符号,比如 #year/month

数据类型

理解 M 语言,应该从数据类型开始。M 的数据类型可以分为基本类型和容器类型,基本类型的分类如下:

Text (文本)

M 语言的 Text 用双引号来引导,比如

代码语言:txt
复制
"Hello World"

因为 M 的 Text 只能用双引号引导,如果 Text 中含有双引号的时候,需要在双引号前面再加上一个双引号,与 VBA 相同。比如要想表达:Tom said: "I love playing football very much",这句话包含两个双引号,在 M 语言中变成了:

代码语言:txt
复制
result = "Tom  said: ""I love playing football very much"""

结尾处,因为 Text 本身需要双引号来包含,所以 much 后面的双引号还有两个双引号,看起来真是令人混淆。

M 语言有三个转义字符(escape sequence)

代码语言:txt
复制
-cr:	Carriage Return
-lf:	Line Feed
-tab:	Tab

如果在 Text 中需要换行,tab 键等,用 #(escape_sequence) 来表达。比如:

代码语言:txt
复制
"Hello#(tab)Alice"
"Hello#(cr)#(lf)World"

一个换行,竟然要用两个 # 号,为了简化,连续的转移字符可以下面这样表示:

代码语言:txt
复制
// 与 "Hello#(cr)#(lf)World" 相同
“Hello#(cr, lf)World”

文本之间用 & 连接:

代码语言:txt
复制
let
    count = 5,
    result = "You have " & Text.From(count) & "  times left"
 in 
    result

M 语言在进行文本连接的时候,并不能隐式转换 (implicit conversion)。数字可以用 Text.From() 函数转换为文本。

Number

数字字面量可以是 10 进制,也可以是 16 进制。以下是一些数字表示的示例:

代码语言:txt
复制
5 	// 整数
0
0.5  // 小数
1.5e+8  // 指数形式
1.6e-6
1.6E-6  // e 可以大写或者小写
.5  // 合法省略小数点
0xff  // 16 进制, 字母可以大写或者小写
0XFF
特殊数字

M 语言中有如下几个特殊数字:

代码语言:txt
复制
#infinity  // produced by an expression like 1/0
#nan       // produced by an expression like 0/0
-#infinity // produced by an expression like -1/0

日期类型知识点比较多,单独放一篇吧。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建空查询 (blank query)
  • 高级编辑器
  • let 语句
  • 标识符命名规范
  • 数据类型
    • Text (文本)
      • Number
        • 特殊数字
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档