五、数据仓库详细介绍(建模)实践篇

2023-11-04

1 数仓建模在数仓建设过程中的位置

这张截图源自之前从 0 到 1 建设数据仓库的经验总结,采用的是瀑布模式的展现方式,但实际操作中经常会使用螺旋迭代模式,因为很难有人能够一步到位的考虑清楚所有细节。

通过业务调研我们熟悉了相关业务过程,需求调研我们明确了本阶段数据建设的需求、内容和边界,数据调研也就是数据探查我们对需要的数据源做了整体摸排,不清楚的就赶紧搞清楚、不对的就赶紧搞对、缺失的就想办法找补回来或者想办法补救,真要缺的太多是不是就要中止项目了至少也得重新规划。我们只是数据的搬运工,并不能凭空编造数据…

随后我们结合调研阶段的成果,做了五大架构设计、落实了技术选型、制定了数仓规范并分发给所有参与者。

接下来我们就进入到了数仓建模阶段,数仓建模对于数仓建设的成败能起到决定性的作用。

经常的我会把数据仓库类比成一个可以自运行的生态系统,当然我们拿人类自己来类比是最恰当了:人需要吃饭数仓也需要周期性的去源端获取数据,人有大脑和中枢神经去控制身体数仓有调度去掌控全局,人有骨架肌肉而数仓的骨架肌肉就是数据模型。

数仓模型承载了数据存储的重要职能,我们需要从全局视角去设计,因为它本身就是一个整体,人有手有脚数仓模型也要分成多个不同的部分,人的手脚身体大脑必须协调一致才能正常活动,数据模型的不同部分也需要协调一致数仓这个生态系统才能正常运转。人体如果筋脉不通就会生病,所以 Inmon 的数据建模思路讲究的是全局思考统一设计,Kimball 的数据建模思路提出的是总线架构,殊途同归其实都是提供给大家一套整体设计的方法论去打通数据模型甚至数仓运转的奇经八脉。

2 理论联系实践的数仓建模方法探索

上边两页出自之前的 PPT 供大家参考。

国外的众多数据从业者经过几十年的理论研究和实践探索、多种方法论的碰撞,最终为我们留下了完整的方法论。而两大权威理论实际上包含的分别是两大不同的方法论:数仓建设方法和数仓建模方法。

Inmon 的数仓建设方法论倡导一种自上而下的瀑布式的建设过程。其数据仓库模型设计的出发点是整合数据,将各个系统中的数据从全企业视角分主题进行整合,打通所有数据源,剔除冗余、错误和不兼容,采用规范化的模型设计方法统一存储企业所有数据,为数据分析决策服务,但这种规范化的模型设计方法不太适合分析决策这种场景,所以后来又在此基础之上新增数据集市用于支撑各部门的业务应用。

规范化设计能够减少冗余避免数据不一致,全局兼容完整的设计能够保证数据的完整性。但是这种建模方法对建模人员的能力要求非常高,同时也需要对企业业务和数据有全面深入的了解,业务简单还好但对于复杂的业务场景难免拉长了建设周期、极大增加了模型设计的难度,以至于在一开始以这种方法实施的数据仓库大都以失败告终。

Kimball 的数仓建设方法,倡导自下而上建设,不用建设复杂的数据仓库,直接构建集市用于支撑业务需求,但当数据集市多了以后,多个数据集市间又造成了混乱和不兼容,而为了解决这种问题又提出了总线架构的概念。总线架构包含:一致性维度和一致性事实两个部分,我们集中设计和管理所有维度、统一定义各种指标,然后让所有数据集市都遵从这种一致性维度和一致性事实。

由于是直接构建数据集市,不需要过多的数据整合,Kimball 的构建方法相对于 Inmon 就会容易很多。虽然总线架构解决了多个数据集市间的兼容性问题,但这种建模方法还存在以下两个问题:1、模型的稳定性完全取决于建模师对业务场景对分析需求的理解程度。2、完全基于业务需求的建模对于需求“用不到”的数据就会被丢弃从而造成数据的缺失,本质上讲这是违背数仓建设原则的,那么我们就需要永久的保留 ODS 层的数据确保未来需要的时候有办法可以找补回来。

3 实践出真知适合自己的才是最好的

实际上我们并不会局限于某一种建模方法,我们需要在熟知各种建模理论的基础上,结合实际业务场景去选择合适的方法。

上图是我们常规的数仓建模流程,接下来我会逐个给大家讲解。我们主要采用统一调研、整体规划、分散设计、集中评审的建设思路,以及自顶向下和自下而上相结合的设计方法。

说明:这里的上和下并非架构图的上下,而是数据流向的上下游。我们称之为上游数据源下游数据应用。


我们通过三步调研,了解了业务流程、明确了中短期需求、对源端的数据质量和存储格式都有了清晰的了解。

三步调研之后,我们会制定数仓分层架构,逻辑上主要分为三层:ODS、DW、DM。目前大家常用的四层五层甚至七层本质上还是对这三层的细化。比如 ODS 层前边还能有一个 STG 层,STG 英文翻译 staging,也有说是 stage ,就是一个临时数据存放区,数据源端每次抽取或上传过来的数据(通常是增量)先入 STG 做短暂临时的存放,ETL 进行简单的清洗、合并、转换后入 ODS 层存储。DW 层还会被细分成 DWD、DWS 等,当然还有可能会构建主题宽表,那宽表是否需要再分为明细宽表和汇总宽表呢,宽表应该归属于 DW 还是 DM 呢?当然了放哪儿都行这些都不重要逻辑上能讲通就行。

分层架构出来后,我们会根据每一层的不同用途有针对性的建模。

ODS 层,原始数据存储区,存储结构跟源端保持一致原则上不做清洗转换,命名上:数据来源+源端原始名称,数据保留时长取决于下游。如果 ODS-DW 过程中没有信息丢失,可以只保留 3-7 天,保留时间越短对运维人员要求越高。如果该过程有信息丢失为防止万一 ODS 层需要永久保留,保留策略有很多,比如从时间上划分为冷热数据冷数据可以归档转移到更便宜的存储,比如对数据内容上进行归类对于一段时间后就失去价值的数据直接删除即可例如系统运行日志。

DW 层,数据仓库的核心存储层,这一层数仓建模的核心,相对标准的思路是我们在明细层采用范式建模的思路自顶向下设计把 ODS 层的数据完整的整合进来,打破孤岛(ID 映射)、消除冗余,再往上层可以采用维度建模的思路,基于 DWD 层做轻度汇总、重度汇总,主要以满足业务需求为主,后期如有需求新增或变化可以基于 DWD 层的完整数据重新汇总。DW 层的数据是需要长期保留的。

当然在大数据场景下,我们通常需要考虑存储和计算开销,会去评估这些成本投入是否产生了足够的价值,明细层往往也会采用维度建模而且完全面向需求去设计,就是说短期用不到的数据我们就先不引入 DW 层了,等需要的时候再根据原始数据算。

这里需要说明一下,数据丢失远比计算错误更需要引起大家重视。由于某些原因很多大数据从业者没有认识到数据丢失的惨重后果。记得之前有一次为了降低成本老板甚至让删除一年之前的原始归档数据,结果没几天新的需求 DW 层无法满足需要重刷历史数据,幸好当时我们找借口拖着没删。

DM 层,数据集市层在逻辑上会包含多个数据集市。DWS 层汇总的通常是公用的、经常被使用的数据,绝大多数常规业务也都可以基于 DWS 直接实现,满足不了的时候我们需要根据各部门或者项目的需求去重新组织构建对应的数据集市,这一层通常也是采用维度建模方法自下而上完全面向需求去设计,数据集市往往伴随着对应的部门或项目需求而建立或者终止。

这里先做个简单的总结:

  • ODS 不用建模直接用源端数据存储结构。

  • DWD 范式建模,保证 ODS 到 DW 信息不丢失,如果 DWD 也采用维度建模 ODS 数据一定要长期保留。

  • DWS 维度建模面向需求设计,存储一些全域经常被使用到的数据。

  • DM 完全面向需求建模,生命周期跟对应需求的生命周期一致。

横向分层讲完了,那我们接下来聊聊纵向分域吧。

  • 分域的目的是为了给数据或表进行归类,从而方便数据管理。

  • 分域的概念也主要用在 DW 和 DM 层。

  • DW 层主要面向业务过程划分数据域,数据域下边再划分多个主题,主题下边会有多个业务过程,理论上每个业务过程对应一张表,但当所有表设计好以后需要结合 ETL 过程和业务使用习惯考虑是否需要对多张表进行合并操作。

  • DM 层划分数据域的方式就简单了,完全对应需求场景或者使用部门就好了。

分层和分域的概念讲完后,我们接下来需要制定相应的模型设计和使用规范。具体到落地阶段了,那么很多事情我们就必须把它明确下来,上边我们提到的内容在具体细节上可能会有多种选择,比如 ODS 数据保留策略、DWD 采用何种建模方法、有无主题宽表以及宽表归属哪一层等等,这些都需要通过规范去明确从而避免多人协作过程中的混乱。更具体的内容可以参考文末推荐阅读里的相关历史文章。

对于一致性维度、一致性事实的保障策略,也需要通过规范去明确和约束,确保同一个维度或度量在数仓的所有地方有相同的含义。我们也要通过规范教会大家如何才能建设出来统一高质量的数据模型。


以上的统一调研、整体规划(分层架构、规范制定、主题域划分)后,我们进入了分散设计的阶段。

分散设计

到这里,由于数仓模型设计的复杂性,我们需要多人合作共同完成建模工作,这时候架构师或者建模师可以结合之前分层分域的成果,按层按域将模型设计任务进行拆解后分发给不同的人完成。我们通常可以这样拆分:ODS 层可以按源端类型拆分、DW 层可以按数据域分成多块、DM 层就按数据集市拆分。这样核心建模师只需要完成 DW 层即可,每人分别负责不同的数据域,ODS 层甚至可以分配给 ETL 工程师负责这样刚好顺便熟悉了源端存储结构以及对数据质量的探查,DM 层完全可以分配给 BI 工程师通常会开发成单表查询的模式。这样子做完分工后,在模型设计规范的统一指导和架构师或总建模师的协调下,相信最终是可以设计出一套统一完善且相互兼容的数仓模型的。

统一评审

虽然我们有完善的模型设计规范做指导,但考虑到各个部分建模者的不同情况,设计上难免会有疏漏,这就需要最终的统一评审环节。我们可以逐层分域的去评审,参与方主要有以下角色:架构师、总建模师、该模块主建模师、业务专家、数据运维、ETL 工程师。

交付与迭代

统一评审结束后,我们最终会形成一套完整的数据模型设计文档,通常是逻辑模型。

我们根据逻辑模型生成物理模型,然后交付给 ETL 工程师负责后续的数据开发。我们通常需要 ETL 工程师除了具备基本的开发能力外,还要有一定的数据探查、数据建模能力,确保在数据开发阶段能够发现原有模型设计的不足并及时反馈,比如现有模型如果使得 ETL 开发变的异常复杂或者程序性能低下,这时候通常就需要考虑修改模型设计了。我们经常使用的维度退化和宽表“模型”就是最常见的为了提高程序执行效率而做的规范化方面的妥协。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

五、数据仓库详细介绍(建模)实践篇 的相关文章

  • 如何快速搭建一个自营商城?(调用电商API实现快速采集商品)

    一 背景介绍 在数字化时代 电商行业蓬勃发展 无数商家涌入这片蓝海 对于许多有志于开拓电商业务的企业和个人来说 快速搭建一个自营商城成为了迫切的需求 然而 传统意义上的自建商城需要投入大量的人力 物力和时间 这让许多初创企业和个人望而却步
  • 【计算机开题报告】智能社区管理系统

    一 设计目的及意义 随着经济的发展 人们生活水平的提高 工作和日常事务繁忙 人们对服务就有了更深入 更精细的要求 而计算机技术的迅猛发展 使得这种需求变为可能 传统的社区服务业也与互联网技术结合更加密切 这是社会发展的必然趋势 为解决社区中
  • 【计算机开题报告】家具销售库存管理信息系统

    一 选题的目的 意义及相关研究动态和自己的见解 随着当今社会信息化的发展 电子自动化办公越来越为各人所重视 它能有效地收集 处理各种信息 极大地提高了办事效率 而计算机技术各种软件工作平台不断的发展 又为电子自动化办公的实现提供了良好的前景
  • ERROR 5025 (HY000): Insert has filtered data in strict mode, tracking_url=http://IP

    通过http api批量插入数据的时候报Reason null value for not null column column xxx src line 解决方法 检查是否有null值存在 增加数据库字段长度 如下语句更改长度 ALTER
  • Hive操作命令上手手册

    内容来自于 大数据Hive离线计算开发实战 Hive原理 Hive是一个基于Hadoop的数据仓库和分析系统 用于管理和查询大型数据集 以下是Hive的原理 数据仓库 Hive将结构化的数据文件映射成一张表 并提供类SQL查询功能 用户可以
  • 天猫数据分析工具推荐(天猫第三方数据平台)

    在电商迅速发展的大背景下 做好天猫数据分析能够在多方面帮助品牌商家更好地运营店铺 塑造品牌 如通过数据分析了解消费者的需求 购买偏好 这有利于品牌商家及时调整商品结构 产品推广 商品宣传等等 灵活制定品牌的销售策略 那么 天猫平台行业 品牌
  • 进程间通信

    进程间通信 进程间通信介绍 进程间通信目的 数据传输 一个进程需要将它的数据发送给另一个进程 资源共享 多个进程之间共享同样的资源 通知事件 一个进程需要向另一个或一组进程发送消息 通知它 它们 发生了某种事件 如进程终止 时要通知父进程
  • python按列写入数据到excel

    要将数据按列写入 Excel 可以使用 Python 的 openpyxl 库 首先 需要安装 openpyxl 库 可以使用以下命令在终端或命令提示符中安装 pip install openpyxl 然后 可以按照以下步骤编写代码 1 导
  • 内网穿透的应用-使用Net2FTP轻松部署本地Web网站并公网访问管理内网资源

    文章目录 1 前言 2 Net2FTP网站搭建 2 1 Net2FTP下载和安装 2 2 Net2FTP网页测试 3 cpolar内网穿透 3 1 Cpolar云端设置 3 2 Cpolar本地设置
  • 【计算机毕业设计】实验室预约管理

    身处网络时代 随着网络系统体系发展的不断成熟和完善 人们的生活也随之发生了很大的变化 人们在追求较高物质生活的同时 也在想着如何使自身的精神内涵得到提升 而读书就是人们获得精神享受非常重要的途径 为了满足人们随时随地只要有网络就可以看书的要
  • 【计算机毕业设计】校园体育赛事管理系统

    身处网络时代 随着网络系统体系发展的不断成熟和完善 人们的生活也随之发生了很大的变化 人们在追求较高物质生活的同时 也在想着如何使自身的精神内涵得到提升 而读书就是人们获得精神享受非常重要的途径 为了满足人们随时随地只要有网络就可以看书的要
  • 38条Web测试经验分享

    1 页面链接检查 每一个链接是否都有对应的页面 并且页面之间切换正确 可以使用一些工具 如LinkBotPro File AIDCS HTML Link Validater Xenu等工具 LinkBotPro不支持中文 中文字符显示为乱码
  • 图解python | 字符串及操作

    1 Python元组 Python的元组与列表类似 不同之处在于元组的元素不能修改 元组使用小括号 列表使用方括号 元组创建很简单 只需要在括号中添加元素 并使用逗号隔开即可 tup1 ByteDance ShowMeAI 1997 202
  • 基于java的饮食分享平台系统设计与实现

    基于java的饮食分享平台系统设计与实现 I 引言 A 研究背景和动机 近年来 随着人们生活水平的提高和健康意识的增强 饮食健康已经成为越来越多人的关注焦点 因此 一个方便快捷的饮食分享平台就显得尤为重要 基于Java的饮食分享平台系统设计
  • 软件测试|SQLAlchemy环境安装与基础使用

    简介 SQLAlchemy 是一个强大的 Python 库 用于与关系型数据库进行交互 它提供了高度抽象的对象关系映射 ORM 工具 允许使用 Python 对象来操作数据库 而不必编写原生SQL查询 本文将介绍如何安装 SQLAlchem
  • 电商数据api接口商品评论接口接入代码演示案例

    电商数据API接口商品评论 接口接入入口 提高用户体验 通过获取用户对商品的评论 商家可以了解用户对商品的满意度和需求 从而优化商品和服务 提高用户体验 提升销售业绩 用户在购买商品前通常会查看其他用户的评论 以了解商品的实际效果和质量 商
  • 做测试不会 SQL?超详细的 SQL 查询语法教程来啦!

    前言 作为一名测试工程师 工作中在对测试结果进行数据比对的时候 或多或少要和数据库打交道的 要和数据库打交道 那么一些常用的sql查询语法必须要掌握 最近有部分做测试小伙伴表示sql查询不太会 问我有没有sql查询语法这一块的文档可以学习
  • 毕业设计:基于python人脸识别系统 LBPH算法 sqlite数据库 (源码)✅

    博主介绍 全网粉丝10W 前互联网大厂软件研发 集结硕博英豪成立工作室 专注于计算机相关专业 毕业设计 项目实战6年之久 选择我们就是选择放心 选择安心毕业 感兴趣的可以先收藏起来 点赞 关注不迷路 毕业设计 2023 2024年计算机毕业
  • 温室气体排放更敏感的模型(即更高的平衡气候敏感性(ECS))在数年到数十年时间尺度上也具有更高的温度变化(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • SAP ERP系统是什么?SAP好用吗?

    A公司是一家传统制造企业 公司曾先后使用过数个管理软件系统 但各部门使用的软件都是单独功能 导致企业日常管理中数据流与信息流相对独立 形成了 信息孤岛 随着公司近年业务规模的快速发展以及客户数量的迅速增加 企业原有的信息系统在销售预测及生产

随机推荐

  • 涉及 GitHub、GitLab,研究人员发现 70 个 Web 缓存中毒漏洞;微软:许多攻击者仍对 Log4j 漏洞加以利用;VS 2022 新版发布 | 开源日报

    开源吞噬世界的趋势下 借助开源软件 基于开源协议 任何人都可以得到项目的源代码 加以学习 修改 甚至是重新分发 关注 开源日报 一文速览国内外今日的开源大事件吧 一分钟速览新闻点 微软 许多攻击者开始对 Log4j 漏洞加以利用 研究人员发
  • 第二章:25+ Python 数据操作教程(第十二节python datetime 模块以及如何使用它来处理日期、时间和日期时间格式的列-变量)

    在本教程中 我们将介绍 python datetime 模块以及如何使用它来处理日期 时间和日期时间格式的列 变量 它包含各种实际示例 可帮助您增强使用 Python 函数处理日期和时间的信心 一般来说 日期类型列不容易操作 因为它面临很多
  • 嵌入式开发实践

    2017 8 1 am3352 usb鼠标不显示 1 首先usb驱动不行 咱也确定不了是不是 wince7 要usb正常使用鼠标才显示 2 然后就漫长的找排除方法 网上看到别人写的 我在用 BSP WINCE ARM A8 02 30 00
  • IntelliJ 创建main函数快捷

    今天偶然发现了IntelliJ中 创建main函数的快捷键 依次还有for循环 System out println 在编写代码的时候直接输入psv就会看到一个psvm的提示 此时点击tab键一个main方法就写好了 psvm 也就是pub
  • Vue实现动态界面刷新

    方法一 适用于没有分页的界面 使用provide和inject配合完成 provide Object gt Object inject Array key string string Symbol Object provide 和 inje
  • 有空就看看的leetcode3——整数反转(c++版)

    有空就看看的leetcode3 整数反转 c 版 学习前言 题目 解法 学习前言 考试好难啊 题目 给出一个 32 位的有符号整数 你需要将这个整数中每位上的数字进行反转 示例 1 输入 123 输出 321 示例 2 输入 123 输出
  • Pytorch基础(十)——优化器(SGD,Adagrad,RMSprop,Adam,LBFGS等)

    一 概念 Pytorch中优化器的目的 将损失函数计算出的差值Loss减小 优化过程 优化器计算网络参数的梯度 然后使用一定的算法策略来对参数进行计算 用新的参数来重新进行训练 最终降低Loss 其中官网提供了13种优化算法 其中主要的有5
  • Java 中的 IO 和 NIO

    IO 与 NIO 区别 Java IO Java IO 工作流程 NIO Java NIO 工作流程 总结 Java IO IO 面向字节流 是阻塞的 Java IO 中读取数据和写入数据都是面向流 Stream 即当从流中读取 写入数据的
  • @Cacheable实现自定义过期时间的redis缓存

    Cacheable用法 接口运行的结果会自动存入缓存中 下次接口再传入相同的参数查询就直接从缓存中取 如果下次传入的参数不相同 就会再进行缓存 这两个缓存没有关系 是不同的key cacheNames 用来指定缓存组件的名字 key 缓存数
  • 如何解决错误:AttributeError: module ‘tensorflow’ has no attribute ‘AUTO_REUSE’

    应该是tf版本原因 加入compat v1即可 reuse tf compat v1 AUTO REUSE 亲测可行
  • C++左值与右值の深思——万能引用与完美转发

    目录 传统艺能 左值与右值 左 右值引用 意义与应用 左值引用的缺陷 移动语义 移动构造与拷贝构造的区别 编译器优化 移动赋值 移动赋值和赋值重载的区别 容器优化 右值引用引用左值 容器优化 万能引用 完美转发 使用场景 传统艺能 小编是双
  • 程序员最爱用的在线代码编辑器合集,哪款是你的最爱?

    程序员最爱用的在线 在线IDE 分享合集 有没有你最爱用的 TitanIDE 首当其冲 TitanIDE 云原生集成开发环境 打开浏览器即可编码 快捷方便 最主要的优势概括为以下几点 1 多内核支持 VSCode Jetbrains IDE
  • 【OS命令注入01】常见OS命令执行函数及其利用(system、exec、passthru、popen、shell_exec及反引号结构)

    目录 1 OS命令注入概述 2 常见可注入函数及利用方法 2 1 system 函数 2 2 exec 函数 2 3 passthru 函数 2 4 popen 函数 2 5 shell exec及反引号结构 3 防御 4 总结 1 OS命
  • anaconda使用笔记(包括pip命令)

    anaconda使用笔记 包括pip命令 1 conda命令 conda命令使用方式 方式一 直接打开Anaconda Prompt即可 方式二 打开anaconda 然后在environment中选择你用的环境 点击运行图标 选择Open
  • ajax请求图片_带你完成第一个爬虫,简单爬取百度图片

    大家好 我是润森 什么是爬虫 网络爬虫 又被称为网页蜘蛛 网络机器人 在FOAF社区中间 更经常的称为网页追逐者 是一种按照一定的规则 自动地抓取万维网信息的程序或者脚本 另外一些不常使用的名字还有蚂蚁 自动索引 模拟程序或者蠕虫 来源 百
  • 华为数据之道

    由华为董事 质量与流程IT总裁 CIO陶景文 作序推荐 华为质量与流程IT 华为云 华为大学 联合出品 总结华为公司数据治理 数字化转型方面的实践经验 从技术 流程 管理等多个维度系统讲解华为数据治理和数字化转型的著作 华为是一家超大型企业
  • CTFHub

    0x00 前言 CTFHub 专注网络安全 信息安全 白帽子技术的在线学习 实训平台 提供优质的赛事及学习服务 拥有完善的题目环境及配套 writeup 降低 CTF 学习入门门槛 快速帮助选手成长 跟随主流比赛潮流 0x01 题目描述 过
  • QDockWidget详解(二)

    上次在 QDockWidget详解文章中介绍了一些有关QDockWidget的基础用法 今天继续来讲QDockWidget的用法 自定义标题栏 如果不想使用QDockWidget自带的标题栏 那么可以通过 void QDockWidget
  • 阿里云原生大数据计算服务maxcompute学习体验

    这两天有兴趣学习了下阿里的maxcompute大数据 随便谈谈自己的感受 一 感受 阿里云相关的产品线太多了 热门产品一页已经放不下了 正因为东西太多给人一种杂乱的感觉 也可能这是给技术人员用的 所以不用太讲客户体验 反正给我的体验就不太好
  • 五、数据仓库详细介绍(建模)实践篇

    1 数仓建模在数仓建设过程中的位置 这张截图源自之前从 0 到 1 建设数据仓库的经验总结 采用的是瀑布模式的展现方式 但实际操作中经常会使用螺旋迭代模式 因为很难有人能够一步到位的考虑清楚所有细节 通过业务调研我们熟悉了相关业务过程 需求