分享

PQ 第二期 | 懂Excel为什么还是学不好PQ?

 Excel办公实战 2021-06-29

PQ之所以推广不开,一个核心方面就是他的“列式操作”,有别有传统的单元格操作,大家思路一时难以转变!

今天我们就通过一些案例来聊聊这个问题,过程有可以把一起M函数基础给大家把坑填上!


01 | 如何适应按列操作


首先我们来看一个传统的根据数量 和单价,计算金额合计的问题!
这个大家应该非常熟悉,也感觉到亲切而自然!


但是当我们,把表格使用Ctrl+T 或者 【插入】-【表格】,操作起来就完全不一样,也不习惯,具体我们还是看 




动画演示:每个单元格都是一样的,而不是每一行一个!

这里其实已经和我们要讲的PQ中 “列式操作”,有点类型了,就是我们的公式整列都是一样,自动根据当前的环境(所在行列)计算结果!


看一下PQ中如何添加一列合计(动画演示):

要点说明:
1、PQ中没有单元格概念,公式类似于超级表中公式,整列一个公式,自动识别当前计算环境(上下文),这里@表示当前行!

2、在PQ中我们所有的操作都是对应的方式,增删查改,无不列外!
这里新增列,操作后会自动添加对应的M函数:Table.AddColumn
界面上有很多使用频率较高的功能,我们一般需求都可以通过界面操作完成,
这个过程中生成的公式,也可以帮助我们去学习M函数!

3、在Power Pivot和PBI中也有类似的列式存储和上下文的概念,这里搞懂有助于大家去学习其他技术!

通过案例1,大家应该能明白,为什么从Excel过度到PQ没那么丝滑的原因了!都是习惯,我们已经习惯了多年的已单元格为单位写公式,突然变成了按列操作,很是不适应!

但是如果你有数据库方面(SQL)的基础,我想适应起来并无障碍!




02 | 数据存储-PQ三大容器

在进阶公式运行原理之前,我们需要补充一下,PQ中的“三大容器”,他们主要同于数据存储,但是为什么叫“容器”呢?
因为他不同于Excel单元格和表、行和列直接不能互相嵌套,但是PQ中可以
我们一般所说的

三大容器分别是:表(table)、列表(list)、记录(Record)

这里我们先做一下简单的介绍,以后我们大部分时间都会操作这三大容器!
他们三者可以互相嵌套,演变繁多,提供了无尽的可能!

1、表(table)

这个比较简单易懂,对应显示的图标,也是一个有标题表格的样式

> 一般都是从外部加载,当然我们后期也可以通过直接构建,或者和list和record互转!

> 值得说的就是我们表格中每个单元格中还可以是表格或者其他数据存储容器,各种套娃

比如我们这样,可以把性别作为一个子表(这里没有其他意义,只是说明嵌套)


手动构建表的方式:
= #table(
            {"姓名","性别"},
            { 
                 {"张三",20}, 
                 {"李四",23} 
            }
)




上面大家看到了{}这种表示方式,应该比较陌生和好奇,其实她就是我们下面要讲的第二个容器-list!


2、列表(list)

列表的构建方式和我们Excel中的常量数组有点类似,使用一对大括号,每个内容使用逗号隔开!

我们可以直接从表中获取到列表,比如表中的姓名列,使用表名[标题]获取过来的就是一个列表!



列表的特性:
  • 列表图标,有点类似于清单
  • 呈现出来就是一列,标题就叫做 列表
  • 从table中(深化)的一列,就是一个列表,只是没有对应的标题


手动构建列表:

常规构建:


数值和单字因为字符,我们可以使用点点简化构建,这也是算一种语法糖
{开始..结束}

= {1..10,"A".."Z"}





list 我们说表格的一列深化出来就是列表,那么每行数据又怎么呈现呢?



3、记录(Record)


对!你的感觉是对的,其实就是记录,我们来动画看一下:
点击每行的行号,在下面可以看到如何表示这行,使用的是标题=内容的方式

如果有其他语言或者VBA基础的同学可以直接理解为字典或者键值对!

需要注意的是,我们获取表中的行数据时,起始的是0索引,而不是1,这也和大部分变成一样,0开始!我们表示第一行 就是表名称{0}

这个比较好理解,我们平时说,西瓜 8元,本质说的是名称="习惯",单价="8元"!

手动构建:[字段1=内容1,字段2=内容2]

注意两点:
  • 记录图标:两列,一列深色(键),一列浅色(值),形成键值对
  • 键不需要引号
  • Record是无序的,我们使用对应的键(key)提取


补充深化和提取:
> 列表提取:从0开始,使用{索引},索引10表示11项也就是A

> 记录提取:[记录集合][键名称]


> 表提取(全面已经讲过):
   >> 表[字段]- 提取一列(对应形成list)
   >> 表{索引} -提取一列(对应形成Record)



考虑阅读篇幅,今天我们就分享这么多!下期我们聊一聊 M函数基础
大家看到我们AddColumn中的each了吗?你知道什么意思吗? 他们是怎么运算的呢? 下期我们一起来学习!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多