首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >轻松搞定复杂表单数据,快速提升办公数字化能力

轻松搞定复杂表单数据,快速提升办公数字化能力

作者头像
大海Power
发布于 2023-09-09 06:46:36
发布于 2023-09-09 06:46:36
48802
代码可运行
举报
运行总次数:2
代码可运行

“IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台,致力于帮助读者在广义的IT领域里,掌握更专业、更实用的知识与技能,快速提升职场竞争力。 点击蓝色微信名可快速关注我们。

数据处理是数据分析的奠基石,只有使用处理干净的数据,分析才会产生价值。简单而言,数据处理的终极目的是将非结构化数据转换为结构化数据。虽然数据处理自身未必直接产生数据价值,但其过程往往相当耗时,因此如果无法高效完成数据整理任务,必将影响最终的数据分析进程。通过本文内容的学习能帮助大家进一步提高数据整理的能力和效率,达到事半功倍的效果。无论您在使用Excel或Power BI,都可以用本文讲解的技巧。

处理结构化复杂表单数据

Conquer Power BI

  • 如何对标题与内容同行的表进行结构化处理?
  • 如果对标题与内容同单元格的表处理?

在日常业务中经常遇到类似图1这种非结构化的数据报表,经过数据处理后,非结构化表将被转换为图2的结构化数据表。本文将介绍两种常用的表单处理方法。

图1.非结构化的原始数据表

图2.经过结构化处理的数据表

01

处理标题与内容同行的数据表

以【文件夹】类型获取两个示例文件,再用Excel.Workbook函数提取表内容,为了行文方便,我们可以右击展开应用的步骤,选择【重命名】选项简化名称(此处改为GET),见图3。

图3.获取的非结构原始数据

展示一个示例以方便读者理解,单击fx图标添加一个新步骤,然后添加以下M函数公式,代码的作用是获取GET步骤中的[Data]列数据,{0}代表第一个表,{Column2}{1}对应企业名字内容所在之处,见图4。

图4.直接通过M函数获取对应的单元格信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#table({"企业名称"},{{#"GET"[Data]{0}[Column2]{1}}})

通过以上方法,便可按规律获取其他相对应字段信息,删除GET之后的步骤,点击【自定义列】选项并添加以下完整的M代码,代码中的 [Data]是对上一步中的相关列引用,用户可在快照中观察提取的数据内容,见图5。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#table(
{"企业名称","培训项目","培训日期","联系人","培训费用","电话","邮箱"},
{{
[Data][Column2]{1},[Data][Column4]{1},[Data][Column6]{1},[Data][Column2]{2},
[Data][Column4]{2},[Data][Column6]{2},[Data][Column2]{3}
     }})

图5.添加自定义列中的M公式

生成自定义列后,我们便可以删除【Data】列,并将【自定义】列展开,见图 6。最终的结果见图 2。

图6.查看自定义列中的Table结构数据

02

处理标题与内容同单元格的数据表

另外一种典型的非结构化表结构是标题与内容处于同一单元格中。 在图7中,行2和行3为合并单元格,本例介绍将员工数据进行结构化处理,见图8。解题思路是将表头与表身进行分别的处理,然后将它们合并。

图7.非结构化的原始数据

图8.处理完成的结构化数据表

与前面示例相似,我们以【文件夹】类型获取两个示例文件,这里的唯一特殊地方是我们会保持工作簿【Name】字段作为后边的合并之用,见图9。

图9.通过文件夹形式读取数据后并提取其中的Table

此处会把原来的表改名为【Body】,并进行复制并改名为【Headers】,见图10(读者可自行改名)。

图10.复制该查询

继续处理【Body】查询,为其添加【自定义列】并添加以下M函数公式,处理结果快照见图11。

图11.添加自定义列获取Table中的结构化数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Table.RemoveLastN(Table.PromoteHeaders(Table.Skip([Data],3) )  ,1)
/*自定义列其实是有3个M函数的嵌套组合而成,最内侧Table.Skip表示将表头进行剔除、中间层的第2个Table.PromoteHeaders表示将表头提升、最外围的Table.RemoveLastN是去除第7行的冗余信息.*/ 

将自定义列展开并且保留始终保留【Name】字段,见图12。至此,已经完成了表身的数据处理。

图12.完成表身的结构化数据处理

接下来我们要处理表头的数据,返回前面复制的【Headers】并选中该查询,为其添加【自定义列】,并添加以下M函数公式,见图13。

图13.进行表头的结构化数据处理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Table.Range([Data],1,2)
// 这段代码是提取Excel行2与行3的员工信息

提取完成后,展开【自定义列】,提取原表头的员工信息、职位、员工号码等信息,参考图 14仅保留相关列。

图14.进行拆分为行操作

将【Column1】中所有的空值进行筛选后去除,然后进行【按分隔符拆分列】操作,分隔符为【冒号】,这样便将表头信息描述和具体信息名称拆分为两列了,见图 15。

图15.进行拆分为列操作

选中【Column1.1】,并对其进行透视操作,【聚合值函数】为【不要聚合】方式,单击【确定】按钮,结果见图 16。至此,完成了对表头的数据处理。

图16.进行透视列操作

依据【Name】字段,对两个表进行合并操作,在菜单中选择【合并查询】-【将查询合并为新查询】选项,见图13

图13.将表头与表身进行合并查询操作

在【合并】对话框中分别选中【Body】和【Headers】中的【Name】字段,然后使用【左外部】联接种类,点击【确定】按钮,见图 14。

图14.对二表进行左外部合并操作

合并完后将【Headers】字段展开并选择相关的字段信息,见图15,删除【Name】字段,最终获得图8中的结果。

图15.合并完后的数据表结构

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Excel到PowerBI 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【Vue原理】Watch - 源码版
没错,当你调用 Vue 创建实例过程中,会去处理各种选项,其中包括处理 watch
神仙朱
2019/08/02
7880
【Vue原理】Watch - 源码版
手摸手带你理解Vue的Computed原理
computed 在 Vue 中是很常用的属性配置,它能够随着依赖属性的变化而变化,为我们带来很大便利。那么本文就来带大家全面理解 computed 的内部原理以及工作流程。
WahFung
2020/08/24
1.3K0
nextTick的理解和作用
最近使用Vue全家桶做后台系统的时候,遇到了一个很奇葩的问题:有一个输入框只允许输入数字,当输入其它类型的数据时,输入的内容会被重置为null。为了实现这一功能,使用了一个父组件和子组件。为了方便陈述,这里将业务场景简化,具体代码如下:
用户9253515
2021/12/16
8260
Vue响应式依赖收集原理分析-vue高级必备
在 Vue 的初始化阶段,_init 方法执行的时候,会执行 initState(vm) ,它的定义在 src/core/instance/state.js 中。在初始化 data 和 props option 时我们注意 initProps 和 initData 方法中都调用了 observe 方法。通过 observe (value),就可以将数据变成响应式。
yyds2026
2022/10/26
6150
Vue2剥丝抽茧-响应式系统之watch2
Vue2 源码从零详解系列文章, 还没有看过的同学可能需要看一下之前的,vue.windliang.wang/
windliang
2022/08/20
2880
Vue2剥丝抽茧-响应式系统之watch2
手摸手带你理解Vue响应式原理
响应式原理作为 Vue 的核心,使用数据劫持实现数据驱动视图。在面试中是经常考查的知识点,也是面试加分项。
WahFung
2020/08/24
9910
石桥码农:20 vue计算属性和侦听器
在template里的插值表达式,如果太长,会让模板代码变得难于维护;如果有多处用到了同样的插值表达式,也不便于复用和修改。例如,这样的一个插值表达式:
LIYI
2020/02/13
7290
石桥码农:20 vue计算属性和侦听器
Vue.js源码逐行代码注解src下core下observer
达达前端
2023/10/08
4330
vue源码分析-响应式系统工作原理
上一章,我们讲到了Vue初始化做的一些操作,那么我们这一章来讲一个Vue核心概念响应式系统。
yyzzabc123
2022/10/19
5220
vue源码分析-响应式系统工作原理_2023-03-01
上一章,我们讲到了Vue初始化做的一些操作,那么我们这一章来讲一个Vue核心概念响应式系统。
用户10377014
2023/03/01
4890
Vue源码解读之InitState
看上面代码,先声明了一个_watchers的空数组;然后依次判断传递进来的options是否包含系列参数;依次执行initProps、initMethods、initData、initComputed、initWatch。
yyzzabc123
2022/09/28
3340
Vue2剥丝抽茧-响应式系统之watch
Vue2 源码从零详解系列文章, 还没有看过的同学可能需要看一下之前的,vue.windliang.wang/
windliang
2022/08/20
4240
Vue2剥丝抽茧-响应式系统之watch
4. 「vue@2.6.11 源码分析」new Vue() 整体流程和组件渲染之前的准备工作
将组件渲染渲染分为两大步骤:组件信息(事件、方法等等)的初始化,以及组件的渲染。 虽然源码中 $mount方法调用放在了_init方法上,但是感觉拿出来好些,毕竟是两个大的步骤。
tinyant
2023/02/24
7510
4.  「vue@2.6.11 源码分析」new Vue() 整体流程和组件渲染之前的准备工作
请你挑战一下这几道nextTick面试题
Vue大家再熟悉不过了,Vue的this.$nextTick大家也再熟悉不过了,今天我们就来看看自创的nextTick相关的几道面试题,看看你是否真正理解Vue的nextTick。
kai666666
2024/07/11
1570
[咖聊] 您瞅啥?瞅 reactive
props、computed、watch 那些我们放到后面再深究,先从主流程看起。聚焦到 data 部分:
码农小余
2022/06/16
5760
[咖聊]  您瞅啥?瞅 reactive
vue源码分析-响应式系统(二)
在构建简易式响应式系统的时候,我们引出了几个重要的概念,他们都是响应式原理设计的核心,我们先简单回顾一下:
yyzzabc123
2022/10/17
3630
Vue2剥丝抽茧-响应式系统之computed
Vue2 源码从零详解系列文章, 还没有看过的同学可能需要看一下之前的,vue.windliang.wang/
windliang
2022/08/20
4190
Vue2剥丝抽茧-响应式系统之computed
顺藤摸瓜:用单元测试读懂 vue3 watch 函数
在 Vue 3.x 的 Composition API 中,我们可以用近似 React Hooks 的方式组织代码的复用;ref/reactive/computed 等好用的响应式 API 函数可以摆脱组件的绑定,抽离出来被随处使用了。
江米小枣
2020/07/02
2.1K0
Vue——initState【十】
前面我们简单的了解了 vue 初始化时的一些大概的流程,这里我们详细的了解下具体的内容;
思索
2024/08/15
1030
Vue 高频原理面试篇+详细解答
原文首地址 掘金 三连哦 更多好文 github 大家好,我是林一一,这是一篇关于 vue 的原理面试题,如果能够完全弄懂相信对大家很有帮助。 面试题篇 1.老生常谈之, MPA/SPA 的理解,优缺点是什么? MPA 多页面应用。 构成:有多个页面 html 构成, 跳转方式:页面的跳转是从一个页面到另一个页面 刷新的方式:全页面刷新 页面数据跳转:依赖 URL/cookie/localStorage 跳转后的资源 会重新加载 优点:对 SEO 比较友好,开发难度低一点。 SPA单页面应用 页面组成:
前端小tips
2021/12/09
7590
Vue 高频原理面试篇+详细解答
推荐阅读
相关推荐
【Vue原理】Watch - 源码版
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档