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

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 用双引号来引导,比如

"Hello World"

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

result = "Tom  said: ""I love playing football very much"""

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

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

-cr:    Carriage Return
-lf:    Line Feed
-tab:   Tab

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

"Hello#(tab)Alice"
"Hello#(cr)#(lf)World"

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

// 与 "Hello#(cr)#(lf)World" 相同
“Hello#(cr, lf)World”

文本之间用 & 连接:

let
    count = 5,
    result = "You have " & Text.From(count) & "  times left"
 in 
    result

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

Number

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

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

特殊数字

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

#infinity  // produced by an expression like 1/0
#nan       // produced by an expression like 0/0
-#infinity // produced by an expression like -1/0

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345