QUOTE透视表有多重要呢,五年前求职数据分析的时候,它是很多公司面试的一个专项考察项目。会用的人觉得它很简单,不会用的人学几遍都记不住,所以我试图今天一次性把透视表讲明白。
文中医疗场景均为通用举例,不涉及任何真实患者数据。
领导要各科室各月门诊量,质控要各病区药占比,运营要各院区手术量。这些需求背后是同一件事:把一张流水账,按你关心的样子重新摆出来。很多人第一次拖字段就懵了:行是什么?列是什么?值又是什么?
01
DETAIL TO REPORT
透视表的透视是什么意思
先看你手上的明细表长什么样。HIS 导出的住院记录,大概是这种:每一行是一次门诊,也就是一个「事件」。这叫明细,记的是流水。
现在领导问:「这个月每个科室的医疗费用分别是多少?」按手动的逻辑,就是先点开筛选功能,在科室列筛选出“心内科”,然后看看费用合计有多少,记下来。再把筛选科室换成“呼吸科”,再记下它的费用合计。
第一步,筛选心内科,记下求和金额
第二步,筛选呼吸科,记下求和金额
如果有20个科室,6个月的时间范围,还可能一个个去筛选吗,那可是20*6=120次手动点击的工作量。这个时候就该透视表出场了,只需要简单点击几个选项,就可以快速得出跟手动计算一样的结果。将以上过程抽象出来,就是透视表的底层原理:明细表是数据池,他只负责准确记录,但不负责排序、分类,而透视表就是要看透这一片混沌的数据海洋,根据你需要的信息维度,在此基础上分类、汇总计算。以上是最简单的一个例子,只使用了「行」和「值」这两个功能。按「科室」分类汇总「费用」,那么「行」=“科室”,「值」=“费用”。可以这么说,透视表的出现,一定是需要对什么东西进行统计汇总。值:你要计算的那个东西
值是被计算出来的数字,不是原样照搬的。比如门诊人次——数有多少个患者ID(计数);总费用合计——把费用加起来(求和);平均住院日——算天数平均值。值永远是「某个指标的结果」,不是维度。
行:你想把数据维度分到多细
你是只想看到科室,还是科室下面的每一个医生?这些你想拆分的数据维度,就是需要放置到「行」的参数。比如你想「按科室看」,就把“科室”拖到行,它会变成透视表上左边的一列,每个科室占一行。
用极限思维来理解:如果「行」什么都不选,只在「值」选一个费用,效果就等同于对原数据全部费用求和:
又或者对「行」选择所有字段,只在「值」选一个费用,效果就等同于复制了一份原数据(只是附带了分类排序的效果):
列:你想把数据摊的多开
在「行」确定了之后,如果还想对某些类型的字段展开查看,同时希望该字段参与数值计算,则应该把这个字段放置在「列」。
比如要查看每个科室在每天的费用情况,如果把“科室”和“日期”都放置在「行」,是这个样子:
如果把“科室”放置在「行」,“日期”放置在「列」,则是这个样子:
单独把两次的透视表摘出来对比发现,虽然两者都实现了查看每个科室在每天的费用情况 的基础要求,但区别在于“日期”在「列」时,还可以额外看到每个日期上的汇总费用,“750、463、775”这三个数字,可无法在左边的透视表上直观看到。这也就是上面所说的,如果希望该字段参与数值计算,则应该把这个字段放置在「列」。03
ROWS OR COLUMNS
行和列,到底该把谁放哪边
这是新手最纠结的地方。行和列都是「分类维度」,EXCEL不会限制你的操作,无论你怎么放置参数都会出来一个透视表。 除了上一小节提到的关于数值计算「行」和「列」存在一个细节差异,还有一个更通俗的考虑因素就是表的可读性。放「行」的维度,竖着一列一列往下排,适合类别多、名字长的。放「列」的维度,横着摊开,适合类别少、想左右对比的。
类别多 → 放行
比如几十个科室、上百种药品,竖着排得下,还能一直往下加。
类别少 → 放列
比如 12 个月、几个院区,横着摊开正好对比趋势。
列塞太多会撑爆
列里塞太多维度,表格横向撑爆;行可以一直往下加,反而清爽。
举个例子。你想看「各科室各月门诊量」,科室有二十多个、月份有 12 个。把科室放行(竖着排得下),月份放列(横着 12 列刚好对比趋势),最舒服。
如果再加一个维度「院区」(本院、分院两个),怎么办?放列会跟月份叠成 24 列,挤成一团。更稳的做法是:院区放「筛选」框,或者院区放行、叠在科室下面变成两级行。行可以分级,这是它比列能装的地方。
但不管怎么说,没有固定的公式,实践中取决于你需要交付的效果。你可以随意拖动字段放到「行」或「列」看看效果,直到你满意,多试几次,做表的感觉也就出来了。
04
ROWS = FILTER
行、筛选栏,其实是同一回事
你可能会问:为什么行和列上的字段只要拖进来,就能自动展开成里面的明细?根子在原数据的设计上。
一张规范的源数据表,遵守「一个字段是一列、字段名是大类、具体值都在这列下面」的原则。科室全在「科室」这一列里,月份全在「月份」这一列里——字段是个容器,元素装在里面。透视表正是靠这个结构,才能把「科室」「月份」这种字段整个拎出来,丢到行、列或筛选栏去当维度筛。
反过来想:要是你当初图省事,把「月份」直接在源表里横向摊开成 1月、2月、3月……一列一个月份(这就是二维展开表),透视表就看不到「月份」这个字段了,它只看到一串单独的列,没法再「按月份」筛选,也没法拖到行或列去分组。表一展开,维度就死了。
所以透视表能不能玩得转,一半在它自己,一半在你那张源表规不规矩。这正好接上篇说的:表格设计规范、清单表优先、别把数据二维展开。上篇把表收拾干净,透视表才出得了数。
进一步我们可以发现:放在「行」的字段,和放在「筛选」栏(也叫报表筛选器)的字段,骨子里是同一个东西的两种摆法。
把「科室」放在行,左边出现一行行科室,行标签旁有个下拉箭头,点开能勾选「只显示心内科」。把「科室」从行拖到顶部「筛选」栏,顶部出现一个下拉「科室:全部」,选「心内科」,整张表立刻只剩心内科的数据。两种操作,筛出来的数据完全一样——都是「只看心内科」。
差别只在呈现:放筛选栏时,科室这个维度从表格里「隐身」了,变成顶部一个总开关;放行并用行标签筛选时,科室还躺在行里,只是把不看的项藏起来。本质都是一句话:从这批数据里挑出一个子集。
理解了这点,你会少很多困惑:为什么筛选栏和行能互换?因为它们在透视表的模型里干的是同一类活——「把某个维度拎出来当切片」。你拖动字段在「行 ↔ 筛选栏」之间来回,数据结果不变,只是维度露不露在表里。
列呢?列标签旁边也有下拉箭头,能勾选显示哪些列,这点跟行标签筛选是相似的,区别在于「列」的筛选本质上只是你选择想多看或是少看几个字段的汇总数据,报表筛选栏并不会以「列」为对象去筛。
1️⃣按每个科室查看费用
2️⃣按每个科室每个医生查看费用
3️⃣按每个科室每个医生查看每天的费用
值默认是「计数」,不是「求和」
这是提问率最高的问题。当数字列里混进文本、空值,或被当成文本存着,透视表不敢假设它能加,就默默切成「计数」。结果费用那一栏变成「有多少行」而不是「加总多少钱」。改法:点值区域任意格子 → 右键「值字段设置」 → 选「求和」或「平均值」。
明细改了,透视表不会自己变
原表补了新数据,透视表还是老样子,得右键「刷新」。养成习惯:交表前先刷新一遍。
空单元格会让你少算
明细里某行科室是空的,透视时会漏掉这一行,总数对不上。出数前先按上篇的办法把空值填好或标红确认。
把「值」误拖到行
有人把费用拖到行,出来一长串数字堆在左边。记住:要「算」的放值,要「分堆」的放行/列。值一进到行,它就不再是汇总,而是一个个散数。
字段拖错框,先拖回再想
透视表的好处是随便拖、随便改,不会搞坏原数据。看着不对,把字段从一个框拖到另一个,或者拖出去重来,原表纹丝不动。
① 一个工作簿里的多张透视表,是「联动」的
尤其拿透视表当固定模板用时要留神:基于同一数据缓存的表,刷新会一起刷新;再用切片器连起来,一张表上选了条件,别的表也跟着变。做模板前先想清楚每张表各看什么、哪些该联动哪些该各管各的,别让一张表的筛选把另一张带跑,交上去两张数对不上。
② 透视表会「记旧账」,留着已经删掉的值
某个科室合并了、项目停了,字段值从源数据删了,可透视表刷新完还在行/列里挂着它。这是它默认「保留已删除的项」。想清掉:透视表分析 → 选项 → 数据 → 把「保留从数据源删除的项目」设成「无」。出正式报表前清一次,名单才干净。(场景为通用举例)
③ 每次刷新,列宽会被自动改掉
调好的列宽一刷新又拉回默认宽,排版全乱。关掉:选项 → 布局和格式 → 取消勾选「更新时自动调整列宽」。常出固定格式报表的,这个一定先关。
④ 复制方式不同,得到的东西不同
只想拿走一张静态表,选中要的区域复制、粘贴成「值」就行;但 Ctrl+A 全选整个透视表再复制,粘出来的还是透视表,带着那套结构和刷新能力。要静态表就局部复制+粘贴值,要保留透视能力才全选复制。
08
THE ONLY THING TO REMEMBER
终极记忆口诀
如果前面七节你看得云里雾里,没关系,实在记不住口诀,就记这一句人话:透视表就是把「我想按 XX 查看 YY 的 ZZ」翻译成三个框——XX 放行,YY 放列,ZZ 放值。记住这句话,再回去看看第5小节的案例。
透视表没那么玄,它就是个「换个角度看同一批数据」的工具。为什么它那么重要,因为海量的数据谁都有,谁都有机会问出一句“我想看按xx分类统计的数据情况”,你很难不和透视表打交道。
如果这篇让你终于搞懂了行和列,欢迎点赞、在看、转发三连,我们下篇见。