【函数应用】如何从事实表中动态提取维度表(UNIQUE)

王禹成
王禹成

创作者俱乐部成员

一、场景介绍

工作中常常需要发布日报、周报、月报,作为负责发布报表的同学,在进行数据分析中,可能需要分析如下维度:

  1. 零售行业如品类分析:蔬果、休闲、粮油、酒饮、肉禽

  1. 银行理财产品分类分析:保险、信托、基本、外汇、期货

  1. 省份、城市、门店三级维度钻取

等等

如果自己是该报表某个模块的具体负责人/业务/运营人员,则会非常熟悉自己所负责内容需要分析哪些维度,但实际工作中,往往分析的内容超出自己个人所负责的范围(需要对整个链路进行分析才能更好地找出问题和提升空间)

场景一

假如你是某淘宝店铺的分析人员,需要承担店铺整体数据分析,则你不仅仅要知道自己所负责的品类、商品的分析,还需要分析其他运营人员负责的内容,甚至还需要跨供应链、仓库进行分析,略微被动

场景二

公司目前处于高速扩张中,每周甚至每天都在开城,现在需要你作为运营/分析人员以城市维度对各城市的数据进行计算

一般情况下,那么当你导出原始数据(事实表)的时候,你需要通过删除重复项得出去重后的唯一值,或者使用数据透视表进行透视,再将透视后的数据粘贴成表,如此较为不变

二、案例解析

如图是一份零售库存分析表,请你分别对大类、中类、小类进行周转率、周转天数等进行分析,


问题一:请你使用函数计算有多少个大类?

计算每个大类的出现次数

我们在大类后插入空白列,输入=COUNTIFS($C$2:$C$40,C2),双击格式刷拉到底,可以得到每个大类在表格中的一共出现的次数

计算每次出现在总出现次数中的占比

用1除以合计出现的次数,就得到了每次出现在总出现次数中的占比,公式=1/COUNTIFS($C$2:$C$40,C2),输入后按回车,再双击格式刷拉到底

此时观察仔细的同学已经能注意到,占比的求和=7,我们用SUM函数对整列进行求和,就可以得到结果为7,也就是共有7个不重复的大类名称

一步到位

那么如果我们想在一个单元格内实现整个计算过程,此时输入

=SUM(1/COUNTIF(D2:D40,D2:D40)),并且用Ctrl+Shift+Entel三键,,即可完成整个结果


问题二:请你计算有多少个带“进口”的中类

计算每个带“进口”中类的出现次数

我们在大类后插入空白列,输入=COUNTIFS($D$2:$D$40,D2,$D$2:$D$40,"*进口*"),双击格式刷拉到底,可以得到每个带“进口”中类的出现次数

计算每次出现在总出现次数中的占比

用1除以合计出现的次数,就得到了每次出现在总出现次数中的占比

但此时我们会发现,必然会存在不带有“进口”的中类存在,导致分母为0,用1除以0产生错误值

此时我们在公式中增加IFERROR把错误值替换为0,完整公式=IFERROR(1/COUNTIFS($D$2:$D$40,D2,$D$2:$D$40,"*进口*"),0)

我们用SUM函数对整列进行求和,就可以得到结果为1,也就是共有1个不重复的带有“进口”的中类

一步到位

那么如果我们想在一个单元格内实现整个计算过程,此时输入

=SUM(IFERROR(1/COUNTIFS(D2:D40,D2:D40,D2:D40,"*进口*"),0)),并且用Ctrl+Shift+Entel三键,,即可完成整个结果


问题三:有哪些大类?提取不重复的大类作为维度

在工作中,例如这份商品清单,同样的商品可能在不同的销售渠道,不同的公司内部部门,会划分为不同维度进行管理,那么动态提取表格中的维度,比每次删除重复项,效率更高不且容易出错

本次使用函数UNIQUE对大类进行去重,提取唯一项

在大类后新建一列,由于UNIQUE产生的结果是数组,因此选中从D2:D20(根据日常经验选择放置的长度,太短会导致结果显示不完整)

输入公式

输入=UNIQUE,

数组指要提取的区域(案例中指C列的大类C2:C40)

按列 TRUE的含义是比较各列并返回唯一值,FALSE的含义是比较各行并返回唯一值,本次目的是对大类这一列中每行进行返回唯一值,因此比较的是各行,选FALSE,也就是0

仅出现一次 TRUE的含义是提取只出现过一次的值而FALSE的含义是返回对所有不同行或者列,本次目的是去重,因此选FALSE,也就是0

本次案例中公式为=UNIQUE(C2:C40,0,1)

此时不可直接按回车键确定,否则结果只能展示在一个单元格,需要按Ctrl+Shift+回车三键结束

此时已完成提取大类中的唯一项,那么当选中的结果区域偏小时,末尾的结果不能正常展示,而选中范围过大时,则会出现#N/A


问题四:

由于日常分析常常是二维表,即横向和纵向都需要进行分析,那么假如现在需要把使用UNIQUE提取出的大类直接横向放置在分析区域,而不是每次使用复制再转置粘贴的方式放在分析区域,应当如何通过函数实现?

本案例所用文件【金山文档】 零售库存分析表(非真实企业数据)

零售库存分析表

https://kdocs.cn/l/clbdtRb50A6s

浙江省
浏览 1732
1
13
分享
13 +1
9
1 +1
全部评论 9
 
鹤
打卡
· 河南省
回复
 
鹤
打卡
· 河南省
回复
 
xxp
(●'◡'●)
· 中国
1
回复
 
xxp
(◦˙▽˙◦)
· 北京
1
回复
 
xxp
( ﹡ˆoˆ﹡ )
· 北京
1
回复
 
WPS超玩会大管家
WPS超玩会大管家

创作者俱乐部大管家

恭喜通过创作者俱乐部审核!欢迎加入俱乐部大家庭!请留意微信消息
· 广东省
回复
 
晏小涵
=TRANSPOSE(UNIQUE(FILTER($C$2:$C$10000,$C$2:$C$10000<>"")))
· 重庆
1
回复
晏小涵
给我吞了两个<>,在""前面。
· 重庆
1
回复
 
王禹成
王禹成

创作者俱乐部成员

最后一问的效果图
· 浙江省
回复