维度建模简略概述

基本概念

1.1        收集业务需求与数据实现

        开始维度建模工作前,项目组需要理解业务需求,以及作为基础的源数据的实际情况。通过与业务代表交流来发现需求,用于理解他们的基于关键性能指标、竞争性商业问题、决策制定过程、支持分析需求的目标。同时,数据实际情况可以通过与源系统专家交流,构建高层次数据分析访问数据可行性来揭示。

1.2        4步骤维度设计过程

维度模型设计其间主要涉及4个主要的决策

(1)选择业务过程

(2)声明粒度

(3)确认维度

(4)确认事实

        要回答上述问题,需要考虑业务需求以及协作建模阶段涉及的底层数据源。按照业务过程、粒度、维度、事实声明的流程,设计组确定表名和列名、示例领域值以及业务规则。而业务数据管理代表必须参与详细的涉及活动,以确保涵盖正确的业务。

1.3        业务过程

在维度建模过程中,业务流程指的是对业务的整体理解和抽象,确定数据仓库中的维度和事实,并归纳事实与维度之间的关联关系。下面是维度建模过程中常见的业务流程步骤:

(1)业务理解:深入研究业务领域,了解业务活动、交互和流程。与业务用户紧密合作,明确业务需求和目标。

(2)识别业务过程:根据业务理解,确定涉及的主要业务过程。可以通过业务流程图、时序图等方式进行描述和可视化。

(3)确定维度:基于业务过程,分析关键业务实体及其属性,确定对业务分析有价值的维度。维度通常包括时间、产品、地理位置、关键业务角色等。

(4)制定维度表:为每个确定的维度创建维度表。维度表包含维度本身的属性,包括主键、描述、层

1.4        粒度

        声明粒度是维度设计的重要步骤。粒度用于确定某一事实表中的行表示什么。在选择维度或事实前必须声明粒度,因为每个候选维度或事实必须与定义的粒度保持一致。在所有维度设计中强制实行一致性是保证BI应用性能和易用性的关键。在从给定的业务过程取数据时,原子粒度数据能够承受无法预期的用户查询。上卷总粒度对性能调整来说非常重要,但这样的粒度往往要猜测业务公共问题。针对不同的事实表粒度,要建立不同的物理表,在同一事实表中不要混用多种不同的粒度。

1.5        描述环境的维度

        维度提供围绕某一业务过程事件所涉及的“谁、什么、何处、何时、为什么、如何”等背景。维度表包含BI应用所需要的用于过滤及分类事实的描述性属性。牢牢掌握事实表的粒度,就能够将所有可能存在的维度区分开。当与给定事实表行关联时,任何情况下都应使维度保持单一值。

谁(Who):指涉及到的人或相关的角色,即与业务过程相关的主体。可以是业务用户、员工、客户等。

例如,谁是购买者?谁是销售代表?

什么(What):指涉及到的事物、实体或活动,即业务过程中的对象和事件。

例如,什么是销售订单?什么是产品分类?

何处(Where):指业务过程发生的地点或涉及的位置信息。

例如,何处是销售发生的地点?何处是仓库所在地?

何时(When):指业务过程发生的时间或时间范围。

例如,何时发生了订单付款?何时发生了客户投诉?

为什么(Why):指涉及到的原因、动机或目的,即业务过程发生的原因或目的。

例如,为什么客户取消订单?为什么某产品销量下降?

如何(How):指业务过程的具体执行方式或过程。

例如,如何处理客户投诉?如何进行产品配送?

1.6        用于度量的事实

        事实涉及来自业务过程时间的度量,基本上都是以数量值表示。一个事实表行与按照事实表粒度秒速的度量事件之间存在一对一关系,因此事实表对应一个物理可观察的事件。在事实表内,所有事实只允许与声明的粒度保持一致。例如,在零售事务中,销售产品的数量与其总额是良好的事实,然而商店经理的工资不允许存在与零售事务中。

1.7        星型模型与OLAP多维数据库

        新型模式是部署在关系数据库管理系统之上的多维结构。典型地,主要包含事实表,以及通过主键/外键关系与之关联的维度表。联机分析处理多维数据库是实现在多维数据库之上的多维结构,它与关系型新型模式内容等价,或者说来源与关系型新型模式。OLAP多维数据库包含维度属性和事实表,但它能够使用比SQL语言具有更强的分析能力的语言访问,

1.8        方便地扩展到维度模型

        维度模型对数据关系放生变化具有灵活的适应性。当发生一下列举的变化时,不需要改变现存的BI查询或应用,就可以方便地适应,且查询结果不会有任何改变。

(1)当事实与存在地事实表粒度一致时,可以创建新列。

(2)通过建立新地外键列,可以将维度关联到已经存在地事实表上,前提是维度列与事实表粒度保持一致。

(3)可以在维度表上同通过建立新列添加属性。

(4)可以使事实表地粒度更原子化,方法是在维度表上增加属性,然后以更细地粒度重置事实表,小心保存事实表以及维度表地列名。

事实表技术基础

2.1        事实表结构

        发生在现实世界中的操作性事件,其所 产生的可度量数值,存储在事实表中。从最低的粒度级别来看,事实表行对应一个度量事件,反之亦然。因此,事实表的设计完全依赖与物理活动,不受可能产生的最总报表的影响。除数字 度量外,事实表总是包含外键,用于关联与之相关的维度,也包含可选的退化维度键和日期/时间戳。查询请求的主要目标是基于事实表开展计算和聚集操作。

2.2        可加、半可加、不可加事实

        事实表中的数字度量可划分为三类。最灵活、最有用的事实是完全可加,可加性度量可以按照与事实表关联的任意维度汇总。半可加度量可以对某些维度汇总,但不能对所有维度汇总。差额是常见的半可加事实,除了时间维度外,它们可以跨所有维度进行加法操作。另外,一些度量是完全不可加的,例如,比率。对非可加事实,一种号的方法是,尽可能存储非可加度量的完全可加的分量,并在计算出最终的非可加事实前,将这些分量汇总到最终的结果集合中,最终计算通常发生在BI层或OLAP多维数据库层。

2.3        事实表中地空值

        事实表可以存在空值度量。所有聚集函数(SUM、COUNT、MIN、MAX、AVG)均可针对空值事实计算。然而,在事实表的外键中不能存在空值,否则会导致违反参照完整性的情况发生。关联的维度表必须用默认行而不是空值外键表示未知的或无法应用的条件。

2.4        一致性事实

        如果某些度量出现在不同的事实表中,需要注意,如果需要比较或计算不同的事实表中的事实,应保证针对事实的技术定义是相同的。如果不同的事实表定义是一致的,则这些一致性事实应该具有相同的命名,如果它们不兼容,则应该有不同的命名用于告诫业务用户和BI应用。

2.5        事务事实表

        事务事实表的一行对应空间或时间上某点的度量事件。原子事务粒度事实表是维度化和可表达的事实表,这类健壮的维度确保对事务数据的最大化分片和分块。事务事实表可以是稠密的,也可以是稀疏的,因为仅当存在度量时才会建立行。这些事实表总是包含一个与维度表关联的外键,也可能包含精确的时间戳和退化维度健。度量数字事务必须与事务粒度保持一致。

以下是事务事实表的一些常见特点和设计原则:

  1. 事务粒度:事务事实表以事务级别的粒度存储数据。每个表行通常对应一个事务或事件。

  2. 事务度量:事务事实表包含各种度量,例如销售金额、数量、利润等。这些度量用于分析和计算业务指标。

  3. 参与者:事务事实表记录了参与这些事务的实体、人员或系统等的相关信息。这些参与者可以是客户、供应商、产品或其他业务实体。

  4. 维度属性:事务事实表通常包含多个维度,用于描述事务的上下文。维度属性可以是时间、地理位置、产品、用户等。

  5. 事务唯一标识:事务事实表中通常有一个唯一标识用于标识每个事务或事件,如订单号、交易流水号等。

  6. 递增主键:事务事实表的主键通常使用自增或递增的方式生成,以提高插入性能和数据加载效率。

  7. 日期时间戳:事务事实表通常包含一个日期时间戳列,记录事务发生的具体时间。

设计和构建事务事实表时,需要根据具体业务需求和分析目标,选择合适的维度和度量,并严格维护数据准确性和一致性。同时,应该遵循数据仓库的设计原则,如DRY、SOLID等,以确保数据加工口径准确、稳定和可维护。

2.6        周期快照事实表

        周期快照事实表中的每行汇总了发生在某一天、某周、某月的多个度量事件。粒度时周期性的,而不是个体的事务。周期快照事实表通常包含许多事实,因为任务与事实表粒度一致的度量事件都是被允许存在的。这些事实表其外键的密度是均匀的,因为即使周期内没有活动发生,也会在事实表中每个事实插入包含0或空值的行。

2.7        累计快照事实表

        累计快照事实表的行汇总了发生在过程开始和结束之间可预测步骤内的度量事件。管道或工作流过程(例如,履行订单或索赔过程)具有定义的开始点,标准中间过程,定义的结束点,它们在此类事实表中都可以被建模。通常在事实表中针对过程中的关键步骤都包含日期外键。累计快照事实表中的一行,对应某一具体的订单,当订单产生时会插入一行。当管道过程发生时,累积事实表被访问并修改。这种对累积快照事实表行的一致性修改在三种类型事实表种具有特性,除了日期外键与每个过程步骤关联外、累计快照事实表包含其他维度和可选退化维度的外键。通常包含数字化的粒度保持一致的,符合里程碑完成计数的滞后性度量。

它记录了业务中的某个关键点或时间段内的累计度量值,如库存余量、累计销售额等,以便进行历史分析和趋势分析。

以下是累计快照事实表的一些常见特点和设计原则:

  1. 累计粒度:累计快照事实表以固定的时间点或时间段作为粒度,记录每个时间点或时间段的累计度量值。每个表行通常对应一个时间点或时间段。

  2. 累计度量:累计快照事实表存储了业务过程中的累计度量值,如总销售额、总成本、总利润等。这些度量值可以通过不断累计更新,反映出业务的历史变化和趋势。

  3. 关键日期:累计快照事实表通常包含一个日期维度,用于标识快照记录的时间点或时间段。该日期可以是业务过程中的关键日期,如每月最后一天、每周结算日等。

  4. 维度属性:累计快照事实表通常包含其他维度,用于描述每个时间点或时间段的上下文。维度属性可以是产品、地理位置、客户等。

  5. 快照唯一标识:累计快照事实表中通常有一个唯一标识用于标识每个快照记录,如快照日期、快照编号等。

  6. 递增主键:累计快照事实表的主键通常使用自增或递增的方式生成,以提高插入性能和数据加载效率。

  7. 历史数据保留:累计快照事实表可以保留历史数据,使得可以进行历史分析和趋势分析。可以根据业务需求和存储容量进行历史数据的保留策略。

设计和构建累计快照事实表时,需要根据具体业务需求和分析目标,选择合适的度量和维度,以及确定正确的累计粒度。同时,应该遵循数据仓库的设计原则,如DRY、SOLID等,以确保数据准确性和一致性。

2.8        无事实的事实表

        尽管多数度量事件获取的结果时数字化的,但也存在某些事件仅仅记录一系列某一时刻放生的多维实体。例如,在给定的某一天种发生的学生参加课程的事件,可能没有可记录的数字化事实,但是该事实行带有一个包含日历天、学生、教师、地点、课程等定义良好的外键。同样,客户交际也是一种事件,但没有相关的度量。利用无事实的事实表也可以分析发生了什么。这类查询总是包含两个部分:包含所有可能事件的无事实覆盖表,包含实际发生的活动表。当活动从覆盖中减除时,其结果是尚未发生的事件。

无事实的事实表(Factless Fact Table)是一种在数据仓库中用于记录没有可量化的事实的事实表。它通常用于描述事务之间的关系、事件的发生和状态的变化,而不存储具体的数值度量。

以下是一些常见的无事实的事实表的应用场景和设计原则:

  1. 事件跟踪:无事实的事实表可用于跟踪事件的发生和状态的变化。每个表行对应一个事件,而没有具体的数值度量。例如,一个电子商务数据仓库中可以有一个订单事实表,记录订单的创建、确认、发货等事件。

  2. 关系分析:无事实的事实表可用于描述事务之间的关系。通过记录事务之间的关联,可以进行关系分析和趋势分析。例如,一个社交媒体数据仓库中可以有一个用户关注关系事实表,记录用户之间的关注关系,而不记录关注的具体数量。

  3. 状态变化:无事实的事实表可用于跟踪状态的变化。例如,一个设备维护数据仓库中可以有一个设备状态事实表,记录设备的在线、离线、故障等状态的变化。

  4. 维度关联:无事实的事实表可用于表示维度之间的关联。通过记录维度之间的关系,可以支持多维数据模型和多轴分析。例如,一个产品组合数据仓库中可以有一个产品关联事实表,记录产品之间的关联和包含关系。

设计和构建无事实的事实表时,需要根据具体业务需求和分析目标,选择合适的维度和事件描述属性。

2.9        聚集事实表或OLAP多维数据库

        聚集事实表是对原子粒度事实表数据进行简单的数字化上卷操作,目的是为了提高查询性能。这些聚集事实表和原子事实表可以同时被BI层使用,这样BI工具在查询时可以平滑的选择适当的聚集层次。这一被称为聚集导航的过程是开发的,一遍报表制作者、查询工具、BI应用都能够获得同样的性能优势。适当设计的聚集集合应该类似数据库索引,能够提高查询性能,但不需要直接面对BI应用或商业用户。聚集事实表包含外键以缩小一致性维度,聚集事实的构建是通过对多个原子事实表的度量汇总而获得的。最后,使用汇总而度量的聚集OLAP多维数据库一般与关系型的聚集方法类似,但是OLAP多维数据库可以被商业用户直接访问。

上卷(Roll-Up)是将数据从低层级聚合到高层级。它可以用于将细粒度的数据汇总到较宽泛的分类中。例如,从详细的销售数据中按照月份、季度、年份等进行汇总,以便进行更高层级的销售业绩分析。

2.10       合并事实表

        通常将来自多个过程的,以相同粒度表示的事实合并为一个单一的合并事实表,这样能够带来方便。例如,现货销售可以与销售预测合并为一张事实表,与针对多个不同的事实表采用下钻应用比较,这样做可使对现货及预测任务的分析工作变得简单快捷。合并事实表会增加ETL处理过程的负担,但降低了BI应用的分析代价。合并事实表特别适合那些京城需要共同分析的多过程度量。

下钻(Drill-Down)是将数据从高层级细化到低层级。它可以用于展示细节数据,以便进行更深入的分析。例如,从总体的销售数据中展开到各地区、各产品线的详细数据,以便进行更具体的销售分析。

维度表技术基础

3.1        维度表结构

        每个维度表都包含单一的主键列。维度表的主键可以作为与之关联的任务事实表的外键,当然,维度表行的描述环境应与事实表行完全对应。维度表通常比较宽,是扁平形非规范表,包含大量的低粒度的文本属性。操作代码作为指示器可作为属性对待,最强有力的维度属性采用冗长的描述填充。维度表属性是查询及BI应用的约束和分组定义的主要目标。报表的描述性标识通常是维度表属性的领域值。

维度表是数据仓库中用于存储和描述业务维度的表。它包含了维度属性的详细信息,用于将事实表与维度进行关联和分析。以下是维度表可能包含的常见结构和字段:

  1. 主键(Primary Key):维度表的唯一标识符,用于确定每个维度表行的唯一性。

  2. 业务键(Business Key):维度表在业务环境中的唯一标识符,用于与其他表进行关联。例如,在一个产品维度表中,产品代码可以作为业务键。

  3. 描述性属性(Descriptive Attributes):维度表的描述性属性用于提供与维度相关的详细信息。这些属性用于描述和分类维度的特征。例如,在一个客户维度表中,描述性属性可以包括客户名称、客户地址、客户类型等。

  4. 层级属性(Hierarchy Attributes):维度表的层级属性描述了维度的层次结构。层级属性用于将维度数据组织成层次化的结构,方便进行上卷和下钻操作。例如,在时间维度表中,层级属性可以包括年份、月份、季度等。

  5. 成员属性(Member Attributes):维度表的成员属性是维度的其他相关属性。这些属性不一定属于维度的层次结构,但与维度有关联关系。例如,在一个产品维度表中,成员属性可以包括产品价格、产品供应商等。

  6. 有效时间历史属性(Effective Time Historical Attributes):当维度表中的某个属性在时间上具有变化时,可以使用有效时间历史属性来跟踪属性值的变化。有效时间历史属性在数据仓库中用于跟踪维度属性的历史变化。例如,在一个员工维度表中,有效时间历史属性可以包括入职日期、离职日期等。

维度表的设计应根据具体业务需求和数据模型进行灵活调整。每个维度表的结构和字段可能有所不同,取决于所描述的业务维度的特征和属性。

3.2        维度代理键

        维度表中会包含一个列,表示唯一的主键。该主键不是操作型系统的自然键,由于需要跟踪变化,因此若采用自然键,将需要多个维度行表示。另外,维度的自然键可能有多个源系统建立,这些自然键将出现兼容性问题,难以管理。DW/BI系统需要声明对所有维度的主键控制,而无法采用单一的自然健或附加日期的自然健,可以为每个维度建立无语义的整型主键。这些维度代理键是按顺序分配的简单整数,以值1开始。每当需要新键时,键值直接加1。日期维度不需要遵循代理键规则,日期维度是高度可预测的且稳定的维度,可以采用更有意义的主键。

3.3        自然键、持久键和超自然键

        由于操作型系统建立的自然键受业务规则的影响。无法被DW/BI系统控制。例如如果雇员辞职,然后重新找工作,这雇员号码(自然键)可能会发生变化。数据仓库希望为该雇员创建单一键,这就需要建立新的持久键以确保在此种情况下,雇员号保持持久性不会发生变化。该键有时被称为持久性超自然键。最好的持久键其格式应该独立于原始的业务过程,并以整数1开始进行分配。多个代理键与某一个雇员关联时,若描述发生变化时,持久键不会变化。

自然键、持久键和超自然键是在数据库设计中常用的三种键类型,它们分别具有不同的优缺点和适用场景。

  1. 自然键(Natural Key):自然键是指在业务过程中本身具有唯一性的键,例如身份证号、电话号码等。自然键适用于具有明确唯一性标识符的数据实体,能够提供较好的业务可读性和易理解性。不过,自然键可能存在实体属性在业务过程中发生变化的可能,造成数据的不一致性。

  2. 持久键(Surrogate Key):持久键是指无法直接从业务过程中获取,需要系统自动生成的唯一标识符,例如自增长字段、GUID等。持久键能够避免自然键可能存在的数据一致性问题,同时也能简化多对多关系的建立,具有较高的数据完整性和稳定性。但是,持久键可能无法直接表达业务过程中的实体含义,降低了业务可读性。

  3. 超自然键(Composite Key):超自然键是指由多个属性组成的键,用于表达业务过程中实体的含义和唯一性约束。超自然键既能够提供较好的业务可读性和唯一性约束,又能够避免自然键可能存在的数据一致性问题,具有较高的灵活性。但是,超自然键可能需要复杂的关联查询才能实现,可能会降低查询性能。

需要根据具体业务需求和数据模型来选择合适的键类型。通常情况下,可以先考虑使用持久键,如果需要表达业务含义,再考虑采用超自然键。如果业务过程本身就具有唯一性标识符,可以考虑采用自然键。

3.4        下钻

        下钻是商业用户分析数据的最基本的方法。下钻仅需要在查询上增加一个行头指针。新行的头指针是一个维度属性,附加了SQL语言的GROUP BY表达式。属性可以来自任何与查询使用的事实表关联的维度。下钻不需要预先存在层次的定义,或者是下钻路径。

3.5        退化维度

        有时,维度除了主键外没有其他内容。例如,当某一发票包含多个数据项时,数据项事实行继承了发票的所有描述性维度外键,发票除了外键外无其他项。但发票数据量仍然时在此数据项级别的合法维度键。这种退化维度被放入事实表中,清楚的表名没有关联的维度表,退化维度常见于交易和累计快照事实表中。

退化维度(Degenerate Dimension)是指在数据仓库中,某些维度属性与事实表直接相关,但不需要单独存储为一个独立的维度表的情况。退化维度的属性值直接存储在事实表中,而不需要额外进行关联查询。

3.6        非规范化扁平维度

规范化扁平维度(Denormalized Flattened Dimension)是指在数据仓库中,将多个维度表中的属性合并为一个扁平化的维度,以满足某些特定的查询需求。非规范化扁平维度的设计目的是为了简化查询过程,减少关联操作的开销,提高查询性能。

在标准的维度建模中,每个维度通常都有一个独立的维度表,而维度表之间通过维度键进行关联。但在某些情况下,一些查询需要跨多个维度表进行联合查询,这可能会导致复杂的关联操作和性能问题。为了解决这个问题,可以将相关的维度表属性合并为一个非规范化扁平维度。

非规范化扁平维度的特点包括:

  1. 扁平化结构:将多个维度表中的属性合并为一个表,以扁平化的结构呈现。这样就可以避免多次关联查询,提高查询性能。

  2. 冗余数据:合并属性时,可能会引入一定程度的冗余数据。这些冗余数据可以帮助减少关联操作,但也需要进行数据维护和同步,保证数据一致性。

  3. 针对特定查询需求:非规范化扁平维度通常是为了满足某些特定的查询需求而设计的。它并不是通用的维度设计模式,而是一种根据具体查询需求进行的优化。

需要注意的是,非规范化扁平维度应该谨慎使用。在设计时需要仔细评估查询需求、数据一致性要求和性能影响,保证数据加工的准确性和可靠性。

3.7        多层次维度

        多数维度包含不止一个自然层次,例如,日历日期维度可以按照财务周期层次从天到周进行划分,也可能存在从天到月再到年的层次。位置密集型维度可能包含多个地理层次。所有这些情况下,在同一维度中可以存在不同的层次。

3.8        文档属性的表示与指示器

        令人迷惑的缩写、真/假标识以及业务指标可以座额我i维度表中而往那边字词含义的补充解释。操作代码值所包含的意义 应分解成不同的表示不同描述性维度属性的部分

3.9        维度表中的空值属性

        当给定维度行没有被全部填充时,或者当存在属性没有被应用到所有维度行时,将产生空值维度属性。上述两种情况下,我们采用描述性字符串替代空值。例如,使用Unknown 或 Not  Applicable 替代空值。应该避免在维度属性中使用空值,因为不同的数据系统在处理分组和约束时,针对空值的处理方法不一致。

3.10       日历日期维度

        连接到实际事实表的日历日期维度,使得能够对事实表,按照熟悉的日期,月份,财务周期和日历上的特殊日期进行导航。日历日期维度通常包含许多描述,例如,周数,月份名称、财务周期、国家假日等属性。为方便划分,日期维度的主键可以更有意义,例如,用一个整数表示YYYYMMDD,而不是顺序分配的代理键。然而,日期维度需要特定的行表示未知或待定的日期。若需要更详细的精确度,可以在事实表中增加不同的日期时间戳。日期时间戳并不是维度表的外键,但以单列的形式存在。

3.11        扮演角色的维度

扮演角色的维度是用来描述一个实体在不同场景下所扮演的不同角色。例如,一个人员可能在不同部门、不同职位、不同时间段等情况下扮演不同的角色,相应地会有不同的属性值和特征。

扮演角色的维度通常用于处理同一实体在不同上下文中的变化。通过将扮演角色作为维度,可以更好地进行数据建模和分析,提高数据的灵活性和可扩展性。

例如,在建立一个人员维度表时,如果不考虑扮演角色这个维度,可能需要在维度表中增加多个记录来描述同一人员在不同部门、职位、时间段等扮演的不同角色。这样会导致数据冗余和查询效率低下。

而如果考虑到扮演角色这个维度,在维度表中可以只使用同一条记录来描述同一人员在不同角色下的属性值和特征,通过在维度表中增加扮演角色这个维度来区分不同角色的区别。

在实际使用中,需要结合具体的业务需求和数据规范来设计扮演角色的维度。以下是一些建议:

  1. 根据实际需求确定扮演角色的分类维度,例如部门、职位、时间段等。

  2. 在维度表中增加扮演角色的维度属性,用于描述不同角色的细节信息。

  3. 保证扮演角色的维度属性在维度表中只维护一份,并与其他维度及事实表建立关联。

  4. 在使用中需要对扮演角色的维度进行适当的查询和分析,例如通过使用OLAP数据立方体等工具进行多维度分析。

  5. 注意保持数据的一致性和准确性,避免因为错误的声明维度等问题导致数据的混乱和错误。

请注意,在设计维度表中扮演角色维度时,应充分考虑实际业务需求和数据规范,确保维度表的使用和维护的准确性和一致性。

3.12        杂项维度

在数据仓库和数据分析中,杂项维度(Miscellaneous Dimension)是用来描述一些杂项属性或者事实的维度,这些属性或事实通常与其他维度无法建立关系,因此需要单独处理。

例如,在一个销售数据分析中,可能需要对一些不确定的属性进行分析,比如销售员的性别、销售方式的分类、销售单位等。这些属性虽然可以通过商业术语和用户界面描述,但是无法与其他维度建立明确的关联。

在这种情况下,可以使用杂项维度来描述这些属性。杂项维度通常包括一个或多个属性列和一个主键用来标识每个唯一的维度行。针对上述销售数据分析的例子,可以为其设计一个杂项维度,包含性别、销售方式、销售单位等属性列。

杂项维度的设计可以基于业务需求和数据分析要求进行,例如选择合适的属性、确定维度层次结构、标识主键等。在使用杂项维度时,需要注意以下几点:

  1. 杂项维度应该是可扩展的,以便于适应未来的业务需求变化。

  2. 杂项维度的主键应该是唯一值,以确保每个维度行都有唯一的标识。

  3. 杂项维度的设计应该与整个数据仓库的设计一致,遵循数据规范和数据质量要求。

  4. 杂项维度的设计应该避免过度复杂,以提高查询和分析的性能。

需要注意的是,杂项维度应该是在维度中较少使用的一种,多数情况下应优先使用与业务相关的明确维度。

3.13        雪花维度

        当维度表中层次关系时规范的时,低粒度属性作为辅助表通过属性键连接到基本维度表。当这一过程包含多重维度表层次时,建立的多级层次结构被称为雪花模式。

在雪花维度模型中,维度表之间通过外键建立了层级关系,同样的,存在父子关系的维度表之间还可以继续拆分为更小的维度表,从而构建出树状的层级模型,形状类似雪花而得名。

使用雪花维度可以解决在维度表中存在多层级关系和关系较为复杂的情况下的数据建模问题。在使用雪花维度时需要注意以下几点:

  1. 需要谨慎地根据实际业务需求和数据规范设计维度表之间的关系。

  2. 需要控制拆分维度表的层数,过多的维度表拆分会影响查询效率。

  3. 在使用时需要注意保证关系的正确性和一致性,例如外键约束、数据类型转换等操作。

  4. 需要特别注意维度表中的空值属性,确保数据加工过程的口径准确。

3.14        支架维度

        维度可包含其他维度的引用。例如,银行账户的维度可以引用表示开户日期的维度。这些被引用的辅助维度称为支架维度。

支架维度(Bridge Dimension)是一种用于处理多对多关系的维度表设计技术。它用于描述两个或多个维度表之间的关系,一般用于具有多对多关系的业务场景中。

在数据建模中,当存在不止一个对一个关系(One-to-One)或一个对多个关系(One-to-Many)时,通常可以直接在维度表中建立外键来建立关系。但是,当存在多对多关系(Many-to-Many)时,无法直接在维度表中建立外键关系。

支架维度的设计将中间表作为一个维度,将多对多关系的两个维度表与中间表关联起来。支架维度表通常包含两个外键列,指向两个相关的维度表,并可能包含其他属性列以描述两个维度之间的关联信息。

通过使用支架维度,可以更好地处理多对多关系的数据建模和分析。以下是一些关于支架维度的设计注意事项:

  1. 确定多对多关系的两个维度表,并确定它们之间的关联关系。

  2. 创建一个支架维度表,包含两个外键列分别与两个维度表关联。

  3. 根据业务需求,可能需要在支架维度表中添加其他属性列来描述两个维度之间的关联信息。

  4. 确保支架维度表的准确性和一致性,例如使用外键约束来维护数据的完整性。

  5. 在使用支架维度进行查询和分析时,需要将多对多关系的两个维度表与支架维度表进行关联。

需要注意的是,支架维度的设计应根据具体的业务需求和数据规范进行,保证数据的一致性和准确性。在使用时需要注意数据的加工口径和查询分析的效率,避免过度复杂的关系和数据冗余。

使用一致性维度集成

4.1        一致性维度

        当不同的维度表的属性具有相同列名和领域内容时,称维度表具有一致性。利用一致性维度属性与每个事实表关联,可将来自不同事实表的信息合并到同一报表中。当一致性属性被当作行头(就是说,用作SQL查询中的分组列)时,来自不同事实表的结果可以排序到跨钻报表的同一行中。

一致性维度的设计原则是通过对不一致的数据进行标准化和转换,构建一个统一的维度表,以解决数据的一致性和集成问题。一致性维度通常包含一个或多个属性列,用于描述数据的特征和属性,以及一个主键用于唯一标识每个维度行。

在一致性维度的设计过程中,需要注意以下几点:

  1. 确定不一致性问题的根本原因,例如数据源的差异、数据格式的不一致等。

  2. 根据不一致性问题的类型和特征,确定合适的标准和规范。

  3. 设计一致性维度的属性列,包括将不一致的数据进行标准化和转换的操作。

  4. 确定一致性维度的主键,以确保每个维度行都有唯一的标识。

  5. 在数据集成和ETL过程中,使用一致性维度对不一致的数据进行映射和转换。

通过使用一致性维度,可以帮助解决多源数据中的一致性问题,提高数据质量和数据集成的效率。

4.2        缩减维度

        缩减维度是一种一致性维度,有基本维度的列或行的子集构成。当构成聚集事实表时需要缩减上卷维度。

缩减维度(Reduced Dimension)是一种在数据仓库中用于降低维度表的复杂性和提高查询性能的技术。当一个维度表中包含大量的属性列时,如果所有的属性都需要在查询中使用,可能会导致查询性能的下降。此时,可以通过缩减维度来减少维度表的复杂性,提高查询性能。

在缩减维度的方法中,可以通过以下几种技术来实现:

  1. 基于业务需求和数据分析的关键属性进行精简:根据具体的业务需求,选择对业务分析和决策具有重要作用的属性进行保留,而将其他不那么重要的属性进行剔除。这样可以减少维度表的复杂度,提高查询性能。

  2. 将稀疏属性进行合并:对于维度表中的某些属性列,如果大多数记录的属性值都为空或重复,可以考虑将这些属性进行合并,从而减少属性的数量。例如,可以将多个空值或者重复值相同的属性列合并为一个单独的属性列。

  3. 使用维度表的子集:分析业务需求,根据具体场景选择使用维度表的子集,即只使用部分属性列进行查询和分析。这种方式可以避免加载和处理不必要的属性列,提高查询性能。

需要注意的是,缩减维度的过程应慎重进行。在进行缩减维度之前,需要深入了解业务需求和查询分析的场景,确保剔除的属性列不会影响数据的完整性和分析结果的准确性。此外,需要在数据设计和开发过程中保持清晰的文档和注释,以便后续维护和理解。

4.3        跨表钻取

跨表钻取(Drill Across)是一种在数据仓库中,通过联接多张表实现多维度信息交叉分析的数据查询技术。跨表钻取的目的是为了在多维度信息之间灵活地转换,并查询出准确的信息。

跨表钻取通过将多张维度表之间的关联建立起来,实现多维度信息的联合查询、聚合和排序等操作。在跨表钻取中,可以钻取到具体的明细数据,并对其进行多维度的交叉分析,形成多个业务纬表和维度表的交叉表,并生成相应的报表。

针对跨表钻取查询,需要考虑以下几个方面:

  1. 数据仓库中需要提前设计好相应的多维数据模型。

  2. 针对数据仓库中维度表和事实表之间的关联关系,需要有清晰准确的文档记录和设计说明。

  3. 在SQL查询语句中,使用JOIN或UNION等操作,联接不同的维度表和事实表。

  4. 对查询结果进行过滤、分组、聚合和排序等操作,得出准确的结果。

  5. 对于性能问题需要进行优化,例如建立索引、拆分维度和事实表等措施。

总之,跨表钻取是一种通过联接多张维度表和事实表,实现交叉分析的查询技术。对于数据仓库的设计和维护者来说,需要有清晰的数据模型和设计,以及考虑性能和灵活性的取舍。

4.4        价值链

        价值链由于区分组织中主要业务过程的自然流程。例如,销售商的价值链可能包含购买、库存、零售额等。一般的分类价值链可能 包括预算编制,承付款项,付款等。操作源系统通常为了价值链上的每个步骤建立事务或快照。因为每个过程在特定的事件间隔,采用特定的粒度和维度建立唯一的度量,所以每个过程通常至少建立一个原子事实表。

4.5        企业数据仓库总线架构

企业数据仓库总线架构是一种在企业中实现数据仓库和业务智能的架构模式。它的主要目标是建立一个统一且可控的数据集成和数据共享环境,以提供一致、可信的数据供给和决策支持。

企业数据仓库总线架构通常包含以下核心组件:

  1. 数据源:企业中各种业务系统和应用程序产生的数据源,如关系数据库、ERP系统、CRM系统等。

  2. 数据集成:用于将不同数据源中的数据抽取、转换和加载到数据仓库中的工具和流程。这些工具可以实现数据清洗、数据转换、数据格式化等数据集成操作。

  3. 数据仓库:集成并存储来自数据源的数据,并按照预定义的模型和结构组织数据。数据仓库可以采用星型模型、雪花模型或其他常见的数据模型。

  4. 元数据管理:管理整个数据仓库的元数据信息,包括数据定义、数据映射、数据质量、数据血缘等,以实现对数据的管理、查询和分析。

  5. 数据访问和报告:提供数据仓库中数据的访问接口和报告工具,包括在线分析处理(OLAP)、数据挖掘、查询和报表等。用户可以通过这些工具来查询和分析数据,并生成各种形式的报告和可视化图表。

  6. 安全和权限管理:对数据仓库中的数据进行权限管理和安全控制,确保只有经过授权的用户可以访问和操作数据。

企业数据仓库总线架构的优势包括:

  1. 数据一致性和准确性:通过集成和统一管理数据,减少了数据冗余和不一致性,提高了数据的准确性和一致性。

  2. 数据共享和共享洞察力:企业中各个部门和业务单位可以共享数据仓库中的数据,促进跨部门的数据合作和共享洞察力。

  3. 决策支持和业务智能:通过数据仓库中的数据,企业可以进行数据驱动的决策和业务智能分析,帮助提高业务效率和竞争力。

  4. 管理的数据访问和控制:通过权限管理和安全控制,确保数据的安全性和隐私性,只有授权的用户才能访问和操作数据。

总之,企业数据仓库总线架构是一种帮助企业实现数据集成、数据共享和业务智能的架构模式,它可以提供一致、可信的数据供给和决策支持,帮助企业提高业务效率和竞争力。

图片参考:企业数据仓库总线架构、总线矩阵笔记 (第三篇)_数据总线矩阵-CSDN博客

4.6        企业数据仓库总线矩阵

 这一小结参考:企业数据仓库总线架构、总线矩阵笔记 (第三篇)_数据总线矩阵-CSDN博客

矩阵的每一行对应都对应机构中的一个业务过程,每一列都和一个业务维度相对应,用叉号填充显示的是和每一行相关的列。业务过程应该先从单个数据源系统开始,然后再进行多数据源的合并。

企业数据仓库总线矩阵是DW/BI系统的一个总体数据架构,提供了一种可用于分解企业数据仓库规划任务的合理方法,开发团队可以独立的,异步的完成矩阵的各个业务过程,迭代地去建立一个集成的企业数据仓库。

4.7        总线矩阵实现细节

        总线矩阵实现细节是一个更加粒度化的总线矩阵,其中扩展每个业务过程行以展示特定事实表或OLAP多维数据库。在此细节粒度上,可以文档化精确的粒度秒速以及事实列表。

4.8        机会/利益相关方矩阵

        在确定了企业数据仓库总线矩阵行之后,可以通过替换包含业务功能(例如,市场、销售、财务等)的维度列规划不同的矩阵。通过确定矩阵点以表示那些业务功能与那些过程行相关。机会/利益相关方矩阵可以区分哪些业务过程分组应该与过程行相关。

处理缓慢变化维度属性

5.1        类型0:原样保留

        对于类型0,维度属性值不会发生变化,因此事实表以原始值分组。类型0适合属性标记为‘原型’的情况。例如,客户原始的信用卡积分或持久性标识符。该类型也适用于日期维度的大多数属性。

5.2        类型1:重写

        对类型1,维度行中每个原来的属性值被新值覆盖。类型1属性总是反应最近的工作,因为该技术破坏了历史情况。尽管该方法易于实现且不需要建立额外的维度行,但使用时需要小心,因为受此影响的聚集事实表和olap多维数据库将会重复计算。

5.3        类型2:增加新行

        对类型2,将在维度表中增加新行,新行中采用修改的属性值。要实现该方式需要维度键更具有一般性,不能仅采用自然键和持久键,因为采用该方法时经常会出现多行描述同样成员的问题。在维度成员建立新行时,将为其分配新的代理键,在修改发生后,将其作为所有事实表的外键,直到后续变化产生新维度键并更新维度行。

        当变化类型2发生时,最少需要在维度行中增加三个额外列:1.行有效的日期/时间戳列;2. 行截至日期/时间戳;3.当前行标识符

5.4        类型3:增加新属性

        对类型3,将在维度表上增加新属性以保存原来的属性值,新属性以变化类型1方式重写主属性。这种类型3变化有时被称之替换现实。商业用户可以通过当前值或替换现实来分组或过滤事实数据。此种缓慢变化维度技术不太常用。

5.5        类型4:增加微型维度

        对类型4,当维度中的一组属性快速变化并划分为微型维度时采用。此种情况下的维度通常被称为快速变化魔鬼维度。通常包含在几百万行的维度表中使用的属性时微型维度的候选,即使它们并不经常变化。变化类型4微型维度需要自己的唯一主键,基维度和微型维度的主键从相关的事实表中获取。

微型维度是数据仓库中的一种用于描述细节或附加属性的维度。它通常用于对维度表进行细化或扩展,以提供更详细的数据分析和查询能力。

要增加一个微型维度,需要按照以下步骤进行操作:

  1. 确定微型维度的目的:明确微型维度的作用和需要细化的维度表。

  2. 创建微型维度表:根据微型维度的目的和需要,创建一个新的维度表,用于存储微型维度的数据。该表应包含一个唯一标识该微型维度的键,以及与该微型维度相关的其他属性。

  3. 更新主维度表:根据微型维度的需求,更新主维度表,以关联主维度表和微型维度表。可以通过添加外键或其他关联方式,将两个表关联起来。

  4. 导入微型维度数据:将微型维度数据导入微型维度表中。可以通过ETL工具或手动方式将数据从源系统导入到微型维度表中。确保数据的准确性和一致性。

  5. 使用微型维度:在数据仓库查询和分析过程中,可以使用微型维度来进行更详细的数据分析和查询。通过主维度表和微型维度表之间的关联,可以将微型维度的属性与其他维度和事实表进行联接查询。

需要注意的是,增加微型维度时,应确保维度表的设计符合数据仓库的最佳实践和范式要求。此外,在设计微型维度表时,要考虑维度表的大小和性能影响,确保数据仓库的查询和分析的效率。

5.6        类型5:增加微型维度及类型1支架

        对类型5,用于精确保存历史属性值,按照当前属性值,增加报表的历史属性。类型5建立在类型4的微型维度之上,并嵌入当前类型1引用基维度中的微型维度。这样才能确保当前分配的微型维度属性能够与基维度上其他微型维度一起被访问,而不必通过事实表连接。

5.7        类型6:增加类型1属性到类型2维度

        与类型5类似,类型6也保存历史和当前维度属性值。类型6建立在类型2的基础上,同时嵌入维度行属性当前类型1版本,以此事实行可以被过滤或分组,要么按照当度量发生时有效的类型2属性值,要么按照属性的当前值。在此环境中,当属性发生变化时,类型1属性有系统自动重写与特定持久键关联的所有行。

5.8        类型7:双类型1和类型2维度

        类型7是用于支持过去和现在报表的最后一种混合技术。事实表可以被访问,通过被建模为类型1维度仅仅展示最新属性值,建模为2类型展示最新历史概要。同样的维度表确保实现两方面的观点。维度表的持久键和主代理键同时存在事实上。从类型1的角度看,维度表的当前标识被约束至当前,通过持久键和事实表连接。从类型2角度看,当前标识无约束,事实表通过代理主键连接。此两种方法可以按照不同的视图部署到BI应用上。

处理维度层次关系

6.1        固定深度位置的层次

        固定深度层次是多对一关系的一种,例如,从产品到品牌,再到分类,到部门。当固定深度层次定义完成后,层次就具有商定的名字,层次级别作为维度表中的不同位置属性出现。只要满足上述条件,固定深度层次就是容易理解和查询的层次关系,固定层次也可以提供可预测的、快速的查询性能。当层次不是多对一关系,或层次的深度不定,以致层次没有稳定的命名时,就需要接下来将描述的非固定层次技术。

6.2       轻微参差不齐/可变深度层次

        轻微参差不齐层次没有固定的层次深度,但层次深度有限。地理层次深度通常包含3到6层。与其使用复杂的机制构建难以预测的可变深度层次,不如将其变换为固定深度层次设计,针对不同的维度属性确立最大深度,然后基于业务规则放置属性值。

6.3        具有层次桥接表的参差不齐/可变深度层次

        在关系数据库中,深度不确定的可变深度层次非常难以建模的。尽管SQL扩展和olap访问语言对递归父子关系提供了一些支持,但方法极为有限。采用SQL扩展,在查询时,不能替换参差不齐层次,不支持对自身层次的共享,同时不支持随时间变化的参差不齐层次。以上所有问题可以通过在关系数据库中采用建桥连接方式建模参差不齐层次来解决。这样的桥接表对每个可能的路径保留一行,确保能够遍历所有层次的形式,采用标准的SQL而不是用特定语言扩展来实现。

桥接表是一种用于解决多对多关系的数据结构。它通常由两个外键组成,并且用于连接两个实体表。在关系型数据库中,桥接表也被称为连接表、中间表或关联表。

假设有两个实体表A和B,它们之间存在多对多的关系。为了解决这种多对多关系,我们可以创建一个桥接表C来关联这两个实体表。桥接表C通常包含A和B的主键作为外键,创建了A和B之间的连接。桥接表C还可以包含其他信息,例如连接的时间戳、额外的属性等。

以下是一个简单的示例,演示如何创建一个桥接表来解决多对多关系:

-- 实体表A
CREATE TABLE table_a (
  id INT PRIMARY KEY,
  name VARCHAR(50)
);

-- 实体表B
CREATE TABLE table_b (
  id INT PRIMARY KEY,
  name VARCHAR(50)
);

-- 桥接表C
CREATE TABLE bridge_table (
  a_id INT,
  b_id INT,
  FOREIGN KEY (a_id) REFERENCES table_a(id),
  FOREIGN KEY (b_id) REFERENCES table_b(id)
);

在上述示例中,我们创建了三个表:table_a、table_b 和 bridge_table。其中,table_a 和 table_b 是两个实体表,bridge_table 是桥接表。

创建桥接表时,我们使用外键约束来确保桥接表的a_id列和b_id列与实体表table_a的id列和table_b的id列相关联。这样就实现了多对多关系的连接。

需要注意的是,桥接表不仅仅是用于连接两个实体表的外键关系,它还可以存储额外的信息,例如连接的时间戳或其他属性。根据具体的需求,你可以根据桥接表的设计来决定存储哪些信息。

6.4        具有路径属性的可变深度层次

        可以在维度中采用路径字符属性,以避免桥接表标识可变深度层次。对维度中的每行,路径字符属性包含特定的嵌入文本字符,包含从层次最高节点到特定维度行所描述节点的完整路径描述。多数标准层次分析需求可以通过标准SQL处理,不必采用SQL语言扩展。然而,路径字符方法不能确保其它层次的快速替换,也无法保证共享自身层次。路径字符方法也难于构建可变路径层次的变化,可能需要重新标记整个层次。

路径字符属性是指在路径结构中每个节点所附加的字符值或字符串值。在树形结构或层次结构中,路径字符属性可以用来描述节点之间的关系或给节点赋予某种特定的标识或意义。

举个例子,假设我们有一个文件系统的层次结构,其中每个节点是一个目录或文件,节点之间通过父子关系连接。我们可以为每个节点添加一个路径字符属性,用来表示节点在文件系统中的路径。

例如,对于以下的文件系统层次结构:
```
/
├─ folder1
│  ├─ subfolder1
│  └─ subfolder2
└─ folder2
   ├─ subfolder3
   │  ├─ file1.txt
   │  └─ file2.txt
   └─ subfolder4
```

我们可以给每个节点添加路径字符属性,通过路径字符属性来描述节点的路径:
```
/
├─ folder1   -> "/"
│  ├─ subfolder1  -> "/folder1"
│  └─ subfolder2  -> "/folder2"
└─ folder2   -> "/"
   ├─ subfolder3  -> "/folder2"
   │  ├─ file1.txt  -> "/folder2/subfolder3"
   │  └─ file2.txt  -> "/folder2/subfolder3"
   └─ subfolder4  -> "/folder2"
```

通过路径字符属性,我们可以更方便地表示节点之间的关系,快速定位节点所在的路径,方便进行路径相关的操作和查询。

需要注意的是,路径字符属性通常是在数据建模和设计时添加的,可以根据具体的需求决定是否需要使用路径字符属性,以及所需的属性值。在数据库中,可以将路径字符属性保存为表的一列,并使用合适的数据类型来存储字符或字符串值。在代码中,可以通过查询语句或操作来访问和处理路径字符属性。

高级事实表技术

7.1        事实表代理键

        代理键可用作所有维度表的主键。此外,可使用单列代理事实键,尽管不太需要。不与任何维度关联的事实表代理键,是在ETL加载过程中顺次分配的,可用于: 1、作为事实表的唯一主键列; 2、在ETL中,用作事实表行的直接标识符,不必查询多个维度;3、允许将事实表更新操作分解为风险更小的插入和删除操作。

事实表代理键(Surrogate Key)是在数据仓库中用于唯一标识事实表行的人工生成的键值。它不代表实际的业务含义,只用于在数据仓库中对事实表行进行唯一标识和关联。

事实表代理键的作用主要有以下几点:

  1. 唯一标识:事实表代理键确保每个事实表行都有一个唯一的标识。它可以用作主键,避免使用业务键作为主键可能导致的复杂性和冗余。
  2. 隔离业务变化:由于事实表代理键不依赖于业务键,当源系统中的业务键发生变化时,可以保持事实表的稳定性,而无需对事实表进行大规模的变更。
  3. 简化关联查询:事实表代理键可以大大简化对事实表和维度表的关联查询。使用事实表代理键进行关联,避免了多字段组合关联条件的繁琐和复杂性。
  4. 支持历史数据:事实表代理键可以为历史数据提供稳定的标识,即使在源系统中业务键发生变化,历史数据仍然可以通过事实表代理键进行准确的关联和查询。

事实表代理键通常是利用自增长列或UUID(全局唯一标识符)等方式生成的。在数据仓库设计中,应当在事实表中创建一个代理键列,并设置其为主键或唯一键。此外,还需要确保在数据装载过程中为每个新插入的事实记录生成唯一的代理键值。

使用事实表代理键时,需要注意以下几点:

  1. 保证唯一性:代理键必须确保在事实表中的每一行都具有唯一的值,以确保正确的标识和关联。
  2. 对性能的影响:事实表代理键的引入可能会对查询性能产生一定的影响,因为在关联查询时需要额外的代理键关联操作。在设计时,需要综合考虑性能和数据一致性的权衡。
  3. 数据类型选择:选择适当的数据类型来存储事实表代理键,以确保足够的范围和性能。

总的来说,事实表代理键是在数据仓库中用于唯一标识事实表行的键,它为数据仓库提供了稳定和简化的关联机制,并支持历史数据的查询和分析。

7.2        蜈蚣事实表

        一些设计者为多对一层次的每层建立不同的规范化维度,例如,日期维度,月度维度,季度维度和年度维度等,并将所有外键包含在一个事实表中。这将产生蜈蚣事实表,包含与维度相关的多个维度。应该避免使用蜈蚣事实表。所有这些固定深度的、多对一层次化关联维度都应该回到它们最细节的粒度上,例如,上例中提到的日期。当设计者及那个多个外键嵌入到单一低粒度维度表中,而不是建立杂项维度时,也会产生蜈蚣事实表。

蜈蚣事实表(Centipede Fact Table)是一种数据仓库中常见的事实表设计模式,用于存储多对多关系的度量指标。它的工作原理类似于蜈蚣的身体,多个关联的维度表与一个事实表通过联接表连接在一起,形成一个中心的事实表。

在蜈蚣事实表中,每个关联的维度表表示蜈蚣的一个腿,而事实表表示蜈蚣的身体。每个腿都与事实表通过联接表关联,联接表中通常包含维度表的主键以及事实表的外键。蜈蚣事实表中存储了多对多关系的度量指标,如销售数量、销售金额等。

举个例子,假设我们有三个维度表:产品维度表、客户维度表和时间维度表。我们需要记录每个产品、每个客户在每个时间点的销售数量和销售金额。这个多对多关系可以用蜈蚣事实表来表示。

以下是蜈蚣事实表的示意图:

       ------------
       |   蜈蚣事实表   |
       ------------
          |    |    |
      -------  |  -------
      | 产品维度 | 时间维度 |
      |   表    |    表    |
      -------  |  -------
               |
           -------
           | 客户维度 |
           |   表    |
           -------

在蜈蚣事实表中,我们可以存储以下列:

  • 产品维度表的主键
  • 客户维度表的主键
  • 时间维度表的主键
  • 销售数量
  • 销售金额

通过蜈蚣事实表,我们可以方便地进行多个维度的关联查询,例如查询某个产品在某个时间段内的销售情况,或者某个客户在某个时间点购买的产品信息等。

需要注意的是,在设计蜈蚣事实表时,需要确保联接表的正确性和性能。联接表的设计应考虑到维度表主键的数据类型、索引的使用以及分区等因素,以提高查询性能和准确性。

总结来说,蜈蚣事实表是一种用于存储多对多关系的度量指标的事实表设计模式,通过联接表和多个关联的维度表实现了多维度的关联查询。它在数据仓库中的应用能够提供更灵活的数据分析和报表生成。

7.3        属性或事实的数字值

        设计者有时会遇到数字值,难以确定将这些数字值分类到维度表或是事实表的情况。典型的实例是产品的标准价格。如果该数值主要用于计算目的,则可能属于事实表。如果该数值主要用于确定分组或过滤,则应将其定义为维度属性,离散数字值用值范围属性进行补充(例如,¥0~50)。某些情况下,将数字值既建模为维度又建模为属性是非常有益的,例如,定量准时交货度量以及定性文本描述符。

如果你希望将离散的数字值转换为值范围属性,可以使用SQL语句进行处理。下面是一个示例SQL语句的逻辑,你可以根据具体的需求进行调整:

```sql
SELECT
    CASE
        WHEN value <= 10 THEN '0-10'
        WHEN value <= 20 THEN '11-20'
        WHEN value <= 30 THEN '21-30'
        ELSE '31+'
    END AS value_range
FROM
    your_table;
```

如果您需要将准时交货的定量度量和相关的定性文本描述进行处理,可以使用SQL语句进行加工和转换。以下是一个示例SQL语句的逻辑,您可以根据具体的需求进行调整:

SELECT
    delivery_date,
    CASE
        WHEN delivery_date <= '2023-06-04 00:00:00' THEN '准时交货'
        WHEN delivery_date <= '2023-06-04 00:00:00' + INTERVAL '3' DAY THEN '稍许延迟'
        ELSE '延迟交货'
    END AS delivery_performance
FROM
    your_table;

在这个示例中,我们使用CASE语句对交货日期和预期交货日期进行比较,根据不同的条件返回对应的定性文本描述。具体的延迟情况和阈值可以根据您的需求进行调整。

7.4        日志/持续时间事实

       累计快照事实表获取多个过程里程碑,每个都包含日期外键并可能包含日期/时间戳。商业用户通常希望分析这些里程碑之间的滞后以及延迟时间。有时这些延迟仅仅是日期上的差异,但某些情况下,延迟可能基于更复杂的业务规则。如果流水线包含大量的步骤,则可能存在上百个延迟。与其要求用户查询通过日期/时间戳或者日期维度外键计算每个可能存在的延迟,不如根据过程的开始时间点为每个度量步骤存储一个时间延迟。这样做可以方便地通过利用存储在事实表中的两个延迟,简单地用减法计算任何两个步骤间可能存在地延迟。

在维度建模中,日志/持续时间事实(Log/Duration Fact)表示一段时间范围内的事件的发生次数或持续时间。它常用于记录事件的发生频率、持续时间等指标。

日志/持续时间事实通常以时间为主维度,可以包含其他维度,如事件类型、地点、参与者等。该事实表的度量通常是计算事件发生的次数或持续时间的指标(如秒、分钟、小时等)。

这种事实表用于记录事件的发生情况,是针对事件级别的数据分析和监控的重要工具。例如,在网络安全领域,可以使用日志/持续时间事实表来跟踪和分析网络攻击的发生次数、持续时间和类型;在交通领域,可以使用这种事实表来记录和分析交通事故的发生次数和持续时间。

日志/持续时间事实表的设计与其他事实表有所不同。它通常不会记录每个事件的详细属性,而仅关注事件的发生次数或持续时间。此外,由于其主要以时间为主维度,通常会使用日期、时间维度,以及可能的其他维度来充分描述事件。

使用日志/持续时间事实表进行分析可以揭示事件发生情况的规律和趋势,帮助决策者了解事件的频率、持续时间和发生模式,从而采取相应的措施。

总之,日志/持续时间事实表适用于记录和分析事件的发生次数和持续时间,它提供了对事件发生情况的全面理解,并支持基于时间的数据分析和决策制定。

如果您需要处理日志/持续时间事实,并且要进行相关的分析和计算,可以使用SQL语句进行加工和转换。以下是一个示例SQL语句的逻辑,您可以根据具体的需求进行调整:

SELECT
    event_id,
    start_time,
    end_time,
    TIMESTAMPDIFF(MINUTE, start_time, end_time) AS duration_minutes,
    CASE
        WHEN TIMESTAMPDIFF(MINUTE, start_time, end_time) <= 30 THEN '短时间'
        WHEN TIMESTAMPDIFF(MINUTE, start_time, end_time) <= 60 THEN '中等时间'
        ELSE '长时间'
    END AS duration_category
FROM
    your_table;

7.5        头/行事实表

        操作型交易系统通常包括事务头指针行,头指针行与多个事务行关联。采用头/行模式(也称为父/子模式),所有头指针级别维度外键与退化维度应该被包含在行级别事实表。

头/行事实表由一个头表(Header Table)和一个行表(Line Table)组成,头表和行表通过共享维度键而关联起来。头表记录了一些共同的信息,例如订单号、客户信息、订单日期等,行表则记录了每个订单中的具体细节信息,例如订单中的产品、数量、价格等。

通过头/行事实表的设计,可以实现多对多(M:N)关系的数据建模。例如,一个订单可能包含多个产品,一个产品又可能同时出现在多个订单中,使用头/行事实表就可以很好地记录和分析这种多对多的关系。

头/行事实表的优点包括:

  1. 能够记录并分析多对多的关系。

  2. 可以方便地处理相同的头部信息,例如订单信息、销售员信息等。

  3. 在处理大量细节信息时,使用分散的明细表会使查询复杂度增加,而使用头/行事实表可以提高查询效率。

  4. 易于扩展和修改,如果需要增加新的细节信息,只需要在行表中添加新字段即可。

但头/行事实表也存在一些缺点,主要包括:

  1. 需要多个表之间的关联查询,可能会降低查询效率。

  2. 处理不当容易出现数据冗余或重复的情况。

7.6        分配的事实

        头指针/行事务数据与对应的事实具有不同粒度这样的情况经常发生,例如,头表示货运费用。应尽量分配头指针事实,使其基于业务所提供的规则划分为行级别,分配的事实可以按照所有维度进行分片并上钻操作。多数情况下,可避免建立头指针级别的事实表,除非这样的聚集能够获得查询性能的改善。

度建模中,有时候需要将度量事实按照维度分配到不同的维度上,以便更好地进行数据分析和报表展示。这个过程被称为分配事实(Allocating Facts)或分配细节(Allocating Details)。

分配事实可以帮助我们理解和分析度量事实在各个维度上的贡献和影响。常见的分配方式有以下几种:

  1. 等比例分配(Proportional Allocation):将度量事实按照某个维度的比例进行分配。例如,将总销售额按照产品的销售比例分配到每个产品上。

  2. 权重分配(Weighted Allocation):根据事实上的某个维度的权重系数进行分配。例如,将总利润按照产品的利润率分配到每个产品上。

  3. 分段分配(Segmented Allocation):根据某个维度的不同段或范围进行分配。例如,将总成本按照销售地区的不同段或范围分配到每个地区上。

  4. 规则分配(Rule-based Allocation):根据事先定义好的规则进行分配。例如,根据某个维度上的特定规则,将销售额、成本等分配到各个产品线上。

7.7        利用分配建立利润与损失事实表

        事实表揭示利润等价方程是企业DW/BI应用能够发布的最强大的结果。利润方程是:收入--开销==利润。理想地实现利润方程地事实表应为原子收入事务粒度并包含许多开销项。因为这些表处于原子粒度,才能实现数字化的上卷,包括客户利润,产品利润,促销利润,渠道利润等。然而,建立这些事实表存在一定的难度,因为开销项必须从原始来源划分到事实表粒度。这一分配步骤通常有ETL子系统完成,这一过程是一个业务相关的步骤,需要高层经理支持。出于已经原因,利润与损失事实表通常在DW/BI程序的早期实现阶段不会被处理。

7.8        多种货币事实

        以多种货币单位记录财务事务的事实表行应该包含一对列。其中一列包含以真实币种表示的事实,另外一列包含同样的,但以整个事实表统一的单一标准币种表示的事实。标准币种值在ETL过程中按照规定的货币转换规则建立。该事实表也必须有一个货币维度用于区分事务的真正货币。

7.9        多种度量事实单位

        某些业务过程需要事实同时以多种度量单位表示。例如,按照业务用户的观点,供应链可能需要对相同事实以 平台、船运、零售以及单个扫描单元构建列表。如果事实表中包含大量事实,而每个事实都必须以所有度量单位表示,此时较好的方法是将事实以工人的标准度量单位存储,同时存储标准度量与其他度量转换系数。这种事实表可按照不同用户的观点部署,使用适当选择的转换系数。转换系数必须存储在事实表行中以确保计算简单正确,并尽量降低查询复杂性。

在维度建模中,常见的度量事实单位有以下几种:

  1. 可度量事实(Measurable Fact):可直接进行数值计算的度量事实,例如销售额、利润、成本等。

  2. 可计数事实(Countable Fact):基于某个维度的计数来度量事实,例如订单数量、客户数量、产品数量等。

  3. 持续时间事实(Duration Fact):基于时间维度的持续时间来度量事实,例如停留时间、处理时间等。

  4. 百分比事实(Percentage Fact):基于某个维度的计数或总和的百分比来度量事实,例如销售额占比、市场份额等。

  5. 比率事实(Ratio Fact):基于两个度量事实的比率来度量事实,例如毛利率、ROI等。

  6. 累积事实(Cumulative Fact):基于时间维度的累积计算来度量事实,例如累积销售额、累积利润等。

7.10        年-日事实

        商业用户在事实表中通常需要年-日(year-to-date, YTD)值。很难反对单个请求,但是YTD请求很容易变换为“财务周期结束时的YTD”或者“财务周期日”。一种更可靠、可扩展的处理这些请求的方法是在BI应用或OLAP多维数据库中计算YTD矩阵,而不是在事实表中查出YTD事实。

年-日事实(Year-Day Fact)是一种常用的事实表设计方式,用于记录每天的度量指标,并以年和日期为主要维度。

年-日事实表的主要特点是将每天的度量指标(如销售额、订单数量、用户访问量等)以日期为维度进行记录。通过这种设计,可以方便地按照不同时间维度(年、季度、月、周等)进行数据分析和报表生成。

年-日事实表通常包含年度维度和日期维度,以及其他与度量相关的维度。年度维度记录年份信息,日期维度记录具体日期信息(包括年、月、日、星期等),其他维度可以根据具体业务需求进行扩展,例如产品维度、地区维度、市场维度等。

使用年-日事实表可以方便地进行时间趋势分析和周期性分析。通过对特定时间段内的度量指标的分析,可以了解业务活动的季节性、月度变化、周度变化等规律,从而帮助决策者制定相应的业务策略。

此外,年-日事实表的设计还可以支持快速的数据加载和查询。由于数据以日期为维度进行分割,每天只需要加载当天的数据,可以有效减少数据加载的时间和成本。同时,按照日期进行查询可以提高查询效率,很容易从大数据集合中快速检索出特定日期的度量指标。

总的来说,年-日事实表是一种在维度建模中常用的设计方式,可以方便地记录和分析每天的度量指标,并支持基于时间的数据分析和趋势分析。

7.11        多遍SQL以避免事实表间的连接

        BI应用绝不应该跨事实表的外键处理两个事实表的连接操作。在关系数据库中,控制此类连接操作的回答集的基数是不可能的,将会产生不正确的结果。例如,如果两个事实表包含客户产品出货和返回,则这两个表不能按照客户和产品的外键直接连接。要采用跨钻方式使用两个事实表,并对结果按照公共行头指针属性值,进行排序-融合操作以产生正确的结果。

在维度建模中,为了提高性能和简化查询,可以使用多遍SQL(Multi-pass SQL)技术来避免事实表之间的连接。

传统的维度建模方法中,事实表和维度表之间通过连接进行关联,以获取所需的分析数据。这意味着在查询过程中,需要在多个表之间进行连接操作,这可能会导致性能问题,尤其是当数据量很大时。

为了解决这个问题,多遍SQL技术被引入。多遍SQL是一种策略,它通过多个独立的SQL查询来获取不同维度上的数据,并将这些数据合并为最终结果集。这样可以避免在事实表之间进行连接操作。

下面是一个简单的示例来说明多遍SQL的概念。假设有以下两个事实表:

  1. 销售事实表(sales_fact):包含有关销售交易的信息,如销售额、销售数量等。
  2. 库存事实表(inventory_fact):包含有关库存的信息,如库存数量、销售退货数量等。

如果需要获取特定时间范围内的销售额和库存数量,传统的查询可能需要连接这两个表。但是使用多遍SQL技术,可以进行如下操作:

第一遍SQL:

SELECT date_id, SUM(sales_amount) AS total_sales
FROM sales_fact
WHERE date_id BETWEEN '2021-01-01' AND '2021-12-31'
GROUP BY date_id

第二遍SQL:

SELECT date_id, SUM(inventory_quantity) AS total_inventory
FROM inventory_fact
WHERE date_id BETWEEN '2021-01-01' AND '2021-12-31'
GROUP BY date_id

通过这两个独立的SQL查询,我们分别获取了销售事实表和库存事实表上的数据。然后可以将这两个结果集进行合并,以获取最终的结果。

多遍SQL技术的优点是可以避免繁琐的连接操作,减轻数据库的负载和提高查询性能。然而,它也有一些缺点,例如需要多次查询和合并数据,可能会增加开发和维护的复杂性。

在实际应用中,是否使用多遍SQL取决于具体的业务需求和系统性能要求。需要综合考虑数据量、查询复杂度、运行时间等因素,选择合适的查询策略。

7.12        针对事实表的时间跟踪

        存在三种基本事实表粒度:事务级别,周期快照和累计快照。个别情况下,在事实表中增加行有效时期、行截至时期和当前标识是非常有用的,与采用类型2缓慢变化维度,在事实行有效的获取时间的方式类似。尽管不太常用,但该模型能够解决诸如缓慢变化库存平衡的场景,其中频繁周期快照可以在每个快照加载同一行。

事实表的时间跟踪是一种技术,用于跟踪和记录事实表中的时间相关信息。它允许我们在事实表中存储多个时间维度的数据,每个时间维度都有不同的属性和粒度。

事实表的时间跟踪对于进行时间相关的分析和查询非常有用。以下是一些常见的时间跟踪技术:

  1. 快照型时间跟踪(Snapshot Time Tracking):在事实表中,每个时间维度都有自己的列,并记录对应的日期或时间戳。这种方式适用于需要跟踪历史变化的数据,可以通过对比不同时间点的快照来分析数据的变化趋势。

  2. 移动窗口时间跟踪(Moving Window Time Tracking):在事实表中,维护一个时间窗口,记录从当前时间向前固定时间段内的数据。通过不断移动窗口,可以实时跟踪和分析最新的数据。

  3. 期限型时间跟踪(Interval Time Tracking):在事实表中,使用开始和结束日期来表示时间段。这种方式适用于记录时间段内的数据,如合同有效期、项目进度等。

通过在事实表中跟踪时间信息,可以更容易进行时间相关的查询和分析。例如,可以轻松获得某个时间段内的销售额、某个窗口期内的库存变化等。

此外,时间跟踪还允许我们创建多个时间维度,每个维度可以有不同的粒度和属性。例如,一个事实表可以有“日期”维度和“月份”维度,分别提供不同的时间分析视角。

维度建模中的时间跟踪技术为时间相关的数据分析提供了便利,使我们可以更好地理解数据的演化、趋势和变化。在设计时间跟踪时,需要根据具体业务需求和分析要求选择合适的时间粒度和跟踪方式。

7.13        迟到的事实

       迟到事实是指如果用于新事实行的多数当前维度内容无法匹配输入行的情况。这通常发生在当事实行延迟发生时。在此情况下,当迟到的度量事件出现时,必须搜索相关维度以发现有效的维度键。

迟到的事实(Late Arriving Facts)指的是在事实表中延迟到某个时间点才可用的事实数据。这种情况经常在日常业务操作中出现,例如由于数据提供商的延迟或手工录入错误等原因,导致事实数据在事实表中未能及时出现。

迟到的事实可能会对数据分析和决策造成影响,因为在某个时间点之前,事实表中的数据不完整或不准确。为了解决这个问题,可以采取一些策略来处理迟到的事实。

  1. 事后更新(Retroactive Update):当迟到的事实数据变得可用时,可以将其插入到事实表中,并根据需要更新相关的维度和聚合。这样可以确保事实数据与时间对齐,并保持一致性。

  2. 累积快照(Cumulative Snapshot):对于一些累积型的迟到事实,可以在事实表中添加附加的行或列来记录历史积累的数据。这种方式可用于跟踪累积的指标,如截止到某个时间点的总销售额。

  3. 预估填充(Estimate Filling):在迟到的事实数据还未到达时,可以引入预估填充的方法。根据历史数据或趋势,以估计值填充缺失的事实数据。当真实数据到达时,再进行更新。

  4. 时间调整(Temporal Adjustments):当有迟到的事实时,可以采用时间调整的方式,将迟到的事实数据与之前的数据按照适当的权重进行合并,以获得更准确的数据。

处理迟到的事实需要根据具体情况来进行决策,例如数据的重要性、可靠性以及数据的频率等。在进行迟到事实的处理时,需要注意数据的一致性和准确性,并确保所采取的策略与业务需求相符。

高级维度技术

8.1        维度表连接

        维度表可以包含到其它维度表的引用。尽管此类关系可以采用支架维度建模实现,但某些情况下,存在于基本维度上的指向支架维度的外键的存在将导致基本维度爆炸性增长,因为支架表中的类型2变化强制需要基本维度中对应处理类型2变化。如果通过将支架表中的外键放入事实表中而不是放置在基本维度表中,降低维度表之间的关联,则此类增长通常可被避免。该方法意味着发现维度直接的关联,仅需要通过遍历事实表,这是可以接受的,特别当事实表示周期快照,其所有维度的所有键都会在每个报表周期内出现时。

维度表连接是指将业务过程所涉及的多个维度表进行关联,以获得更完整和准确的数据分析结果的过程。

维度表通常包含有限的、离散的、唯一的值,如日期、用户、产品、地理位置等属性,并且它们之间具有支持数据分析的关系。在业务过程中,可能需要同时关注多个维度属性,例如在分析销售数据时需要同时考虑日期、销售员和产品等多个维度。这时,就需要将这些维度表进行关联,形成一个“星型”的模型。

在“星型”模型中,事实表是粘合维度表的核心,因为它们将事实与维度相关联。维度表之间的连接通常是通过事实表实现的。例如,在销售数据中,需要将销售事实表关联到日期、销售员和产品等维度表,以便分析每个维度对销售的影响。

维度表连接通常采用左外连接(Left Outer Join)或内连接(Inner Join)的方式实现。左外连接可以保留左表(维度表)中的所有记录,即使右表(事实表)中没有匹配的记录也会显示,并且将右表中与左表匹配的记录合并,以保证查询结果的完整性。内连接则只返回两个表中共同拥有的记录,可以用于过滤掉不相关或不存在的维度属性。

维度表连接对于数据分析和决策支持非常重要,因为它可以通过关联多个维度表并汇总事实数据来提供更全面、准确和可靠的分析结果。同时,维度表连接需要根据具体情况进行调整和优化,以保证查询效率和数据质量。

8.2        多值维度与桥接表

        经典维度模式中,每个与事实表关联的维度都有一个与事实表粒度一致的单一值。但是某些情况下,维度存在合理的多值。例如,某个病人接受了一次健康体检,可能出现多个诊断。在此情况下,多值维度必须通过一组维度键通过桥接表使一组中的每个诊断与事实表一行关联。

多值维度和桥接表是两个相关的概念,用于处理一个实体或事实与多个相关属性之间的多对多关系。

  1. 多值维度(Multi-Valued Dimension):在某些情况下,一个实体或事实可能与多个相同类型的属性相关联。例如,在一个电商数据模型中,一个订单可能涉及多个产品,这些产品之间是一个多对多的关系。传统的维度建模只能处理一对一的关系,为了解决这个问题,可以引入多值维度。多值维度是一个包含多个重复属性值的维度表,每个属性值对应一个相关实体或事实。在订单和产品的例子中,可以创建一个多值维度表来存储订单-产品关系,并且每个订单会在此表中重复出现多次,对应不同的产品。

  2. 桥接表(Bridge Table):当存在多值维度时,可以使用桥接表来处理多对多关系。桥接表是一个连接多值维度表和其他维度表的中间表。它包含了多值维度表和其他维度表的主键,并用于建立它们之间的关联。在订单和产品的例子中,桥接表将订单和产品的主键作为外键,用于关联订单表和产品表。桥接表可以通过连接其他维度表,形成一个多维度的星型模型。

使用多值维度和桥接表的好处是可以解决多对多关系的建模问题,并且可以更灵活地进行查询和分析。同时,多值维度和桥接表需要在数据模型和查询设计过程中进行适当的处理,以确保性能和数据一致性。

总结:多值维度和桥接表是维度建模中处理多对多关系的技术,多值维度用于表示一个实体与多个相同类型的属性的关系,桥接表用于连接多值维度表和其他维度表,建立多对多关系的链接。

8.3        随时间变化的多值桥接表

        多值桥接表可能需要基于缓慢变化类型2维度。例如,实现银行账户与单独客户的多对多关系的桥接表,通常必须基于类型2的账户与客户维度。在此情况下,为防止账户与客户之间的不正确连接,桥接表必须包含有效期和截止日期/时间戳,请求的应用必须约束桥接表,使其满足特定时刻以产生一致的快照。

在维度建模中,当需要表示多值属性随时间发生变化时(例如一些角色或标签随时间而变化),可以使用随时间变化的多值桥接表(Time-Variant Bridge Table)来存储这种多维度的变化情况。

随时间变化的多值桥接表是一种桥接表,它与普通桥接表的不同之处在于,它记录了多个维度表的多个属性值随时间的变化情况,可以更好地反映现实世界的变化。它通常使用起始和结束日期两个时间列来标识一个维度属性的有效时间范围,以便查询时可以给出查询时间点,查询在某一时刻该属性的值是什么。

举个例子,假设我们有一个医院数据模型,需要记录一个病人可能有多个诊断结果。同时,这个诊断结果可能会随着时间的推移而改变。这时,可以设计一个随时间变化的多值桥接表,将病人、诊断、起始和结束日期作为主键,在病人、诊断两个维度表之间建立多对多关系。这个桥接表可以记录每个诊断结果的有效时间范围,在查询时可以根据某个时间点查询病人所接受的诊断结果。

使用随时间变化的多值桥接表可以更好地表示多个维度属性随时间变化的情况,并可以在设计时间序列分析模型时提供更准确的数据来源。但同时需要注意,设计和维护这种桥接表需要更多的工作和深入的理解,同时查询也需要特别注意时间维度的处理,以免造成计算错误和过度复杂的查询。

8.4        标签的时间序列行为

        数据仓库中几乎所有的文本都是维度表中的描述性文本。数据挖掘客户聚类分析通常产生文本化的行为标签,通常可以用工作区分周期。在此情况下,跨时间范围的客户行为度量成为有这些行为标签构成的一种序列,该时间序列应该以位置属性存储在客户维度中,包括可选文本串,构成完整的序列标签。行为标签在位置设计时进建立,因为行为标签是复杂并发查询而不是数字计算的目标。

维度建模中,标签是指对实体或事实的一个描述性的词语或短语。标签是一种非常常见的多值属性,通常会随着时间的推移发生变化。例如,一个商品可能在不同的时间段被打上不同的标签,如“促销”,“新品上市”,“热销商品”等。

标签的时间序列行为指的是对于一组特定的实体或事实,标签随着时间变化的情况。为了建模标签的时间变化行为,通常需要引入时间维度。经典的做法是使用一个包含起始日期和结束日期的桥接表,用于记录标签的时间有效期。例如,在一个商品数据模型中,可以设计包含商品ID、标签、起始日期和结束日期的桥接表,用于表示商品的不同标签随时间变化的情况。

当需要进行时间序列分析时,可以使用该桥接表的时间信息来确定在某个时间点上每个商品拥有的标签是什么。可以使用数据库中的时间函数来过滤出包含某个时间点的标签记录,如使用SQL语句中的“BETWEEN”或者“>= and <=”来找到某个时间点内的有效标签。

需要注意的是,在处理标签时间序列行为时,需要保证数据的正确性和一致性。需要在桥接表中提前设置好标签的时间有效期,防止标签被重复关联或出现时间上重叠。此外,在查询时,需要根据具体需求选择恰当的时间周期,对数据进行合适的聚合,以获取准确和完整的结果。

8.5        行为研究分组

        有时可以通过多次迭代分析,来发现复杂的客户行为。在此情况下,将行为分析嵌入到BI应用,以约束所有客户维度的成员,获取复杂的行为,这样的作法是不现实的。复杂行为分析的结果,可以通过某些简单表获取,这些表称为研究分组,仅包含客户的持久键。在查询时,通过约束研究组表的列与目标模式中客户维度的持久键,该静态表可当成一种可应用于任何带有客户维度的维度模式过滤器。可以定义多个研究组,导出的研究组可以通过遍历、联合、设置差异等方式建立。

行为研究分组是指对某个特定行为的参与者进行分组,并对其进行行为分析和研究。它是一种通过对行为参与者的特征进行分类和分析,以便于更好地理解和解释行为模式和趋势的方法。

行为研究分组可以基于参与者的不同维度进行,如人口统计学特征(年龄、性别、地理位置等)、行为特征(消费习惯、兴趣爱好等)、社交关系特征(社交群体、关系网络等)等。通过将参与者进行分组,可以更好地理解不同群体之间的行为差异和行为变化趋势。

行为研究分组可以辅助决策制定、市场营销、产品定位等方面的分析和策略制定。通过分组分析,可以更好地理解目标群体的需求和偏好,从而制定针对性的营销策略、产品个性化推荐等,从而提升行为表现和市场效果。

在度建模中,可以通过构建相应的维度表和桥接表来实现行为研究分组的建模。可以根据不同的分组特征,设计相应的维度表来记录参与者的特征信息。同时,可以通过桥接表来建立参与者和行为事实的关联关系,记录参与者在不同行为活动中的表现和结果。

需要注意的是,设计行为研究分组时,要根据具体的业务需求和分析目的,选择合适的维度和分组方式,并保证数据的准确性和一致性。同时,在查询和分析过程中,需要结合合适的统计方法和分析模型,以获得有效的分析结果和洞察。

8.6        聚集事实作为维度属性

         商业用过户通常对基于聚集性能度量的客户维度感兴趣,例如,过滤去年或整个阶段所有花费超过一定数额的客户。选择聚集事实可以放入作为越苏和作为表示报表的目标维度。度量通常表示为维度表中的带状范围。维度属性表示聚集性能度量将增加ETL处理的负担,但是可以方便BI应用层的分析功能。

聚集事实作为维度属性是指将某个维度的聚集(即聚合)数据作为该维度的一个属性进行建模和分析。

通常情况下,维度表中的属性是描述和划分该维度的特征属性,而事实表则包含了与维度表关联的度量指标。然而,在某些情况下,我们希望将某个维度的聚合指标作为该维度的一个属性,以方便查询和分析。

举个例子来说,假设我们有一个销售数据模型,其中包含了销售事实表和与之关联的商品维度表。该商品维度表包含了商品的各种属性,如商品名称、商品分类、商品价格等。如果我们希望在查询商品维度时,能够方便地获取到该商品的销售总额或销售数量等聚合指标,那么可以将这些聚合指标作为商品维度表的一个属性,即聚集事实作为维度属性。

通过将聚集事实作为维度属性,可以方便地在维度查询时获取到聚合指标的信息,而不需要通过关联事实表进行聚合计算。这样可以简化查询逻辑并提高查询性能。

需要注意的是,聚集事实作为维度属性需要保证数据的一致性和准确性。聚合指标要与事实表中的聚合结果保持一致,并在数据更新时及时更新维度表中的聚合属性。此外,还需要根据具体的业务需求选择合适的聚合指标作为维度属性,并在维度模型设计中进行合理的分层和拆分,以达到更好的查询性能和数据管理效果。

8.7        动态值范围

        动态值范围报表有一系列报表行头组成,这些报表的行头为目标数字化事实定义了范围不断变化的集合。例如,一个银行的公共值范围报表包含带有标签的多个行,例如,“从0到¥10的平账”,“从¥10.01到¥25的平账”等等。此类报表是动态报表,因为每次查询时都定义了特定的行头,而不是在ETL过程中定义的,行定义可以通过在小值范围维度表实现,通过大于连接或小于连接而与事实表实现连接,定义可以仅存在于SQL CASE 语句中。该值范围维度方法可能会获得更高的性能,特别时针对数据库,因为CASE语句方法包含针对几乎所有事实表的无约束关系扫描。

在维度建模中,动态值范围是指某个维度属性的值会根据时间(或其他条件)的变化而动态调整的情况。

在某些业务场景下,维度的某个属性值可能会随着时间的推移而发生变化。这种变化可以是周期性的,比如季节属性;也可以是非周期性的,比如产品价格、地理位置等。

举个例子来说,假设我们有一个销售数据模型,其中包含了销售事实表和与之关联的日期维度表。日期维度表中的一个属性是季节,根据日期来划分为春季、夏季、秋季和冬季。在这种情况下,季节属性就是一个动态值范围。每年的日期与季节的对应关系是固定的,所以在设计维度模型时,可以将季节作为日期维度表的一个属性,并通过配置或规则来确定日期与季节的对应关系。

另一个例子是产品价格,在某些业务场景下,产品的价格可能会随着时间而变化,比如因为促销、涨价等原因。在这种情况下,产品价格就是一个动态值范围。为了在维度模型中表示这种动态变化,可以将产品价格作为产品维度表的一个属性,并将它设计为在时间维度上变化的。

在度建模中,处理动态值范围的关键是确定属性值的有效时间范围和变化规则,并将其与事实表进行关联。这样,在查询和分析时,可以根据特定的时间点来获取相应的属性值,以及与之关联的事实数据。

需要注意的是,动态值范围的处理需要确保维度数据的一致性和准确性。在数据更新时,需要相应地更新维度表中的属性值,并确保时间点的正确性。此外,在查询和分析过程中,也需要根据实际情况进行适当的时间过滤或条件过滤,以获取正确的结果。

8.8        文本注释维度

        与其将自由注释作为事实表的文本度量,不如将它们存储于事实表之外的不同的注释维度(或作为维度属性,每个事务一行,但需要注释的粒度满足唯一事务的数目),使该注释维度对应事实表中的一个外键。

在维度建模中,文本注释维度是指将某个维度的注释信息作为一个维度来建模和存储。

在数据分析和查询过程中,经常需要对某个维度或度量指标进行解释或说明,以便更好地理解和解释数据。这些解释或说明通常以文本形式存在,比如描述、备注、解释等。而文本注释维度的作用就是将这些文本注释信息作为一个独立的维度进行管理,以便快速、灵活地查询和访问这些注释信息。

举一个例子来说,假设我们有一个销售数据模型,其中包含了销售事实表和与之关联的商品维度表。商品维度表中的一个属性是商品名称。为了更好地描述商品,我们可以为每个商品名称添加一个注释或说明,用来解释商品的特点、功能、用途等相关信息。这些注释或说明可以是文本内容,如商品描述、特性等。

为了实现文本注释维度,我们可以创建一个独立的文本注释维度表,其中包含了注释文本、关联的维度属性(如商品名称)、时间信息等。文本注释维度表可以作为一个与商品维度表关联的维度表,通过维度关联键与商品维度表进行关联。这样,在数据分析和查询时,可以使用文本注释维度表来获取商品的注释信息。

文本注释维度的优势在于,它能够将注释信息与维度数据解耦,使得注释信息可以独立存储和管理,并且可以在维度查询中快速访问和获取。此外,文本注释维度还可以支持多语言、多版本等需求,以适应不同的业务和用户需求。

需要注意的是,在设计文本注释维度时,需要考虑注释信息的存储和管理方式,以及与维度表的关联方式。同时,为了保证注释信息的准确性和一致性,需要制定相应的维护和更新策略,并及时更新注释信息。

8.9        多时区

        为在多时区应用中获得通用标准时间以及本地时间,应该在受影响的事实表中设置双外键,用以连接两个不同角色的日期(和可能的当天时间(time-of-day))维度表。

8.10        度量类型维度

        有时当事实表每行包含一长列稀疏存储的事实时,可以建立度量类型维度,通过度量类型维度将事实表行变成单一通用事实。我们一般不推荐采用该方法。尽管它消除了所有空的事实表列,但按照每行占用列的平均数量,这增加了事实表大小,并且使内部列的计算更加困难。当潜在事实的数量达到极限(几百个),但是没有多数需要应用到任何给定事实表行时,可采用该技术。

稀疏存储(Sparse Storage)是一种数据存储方式,常用于在大规模数据处理和分析中,减少存储空间和加速运算。

在稀疏存储的方案中,数据通常是稀疏的(即为大部分数据都为0),而开发者只需存储非零值的位置和值即可,这样可以有效节约存储空间。在进行数据计算时,可以只处理非零值的位置和值,从而加速计算过程和减少内存使用。

稀疏存储适用于各种数据类型,如矩阵、图像、音频、文本等。在矩阵处理中,大部分情况下矩阵都是稀疏的,因此使用稀疏矩阵存储可以大大降低内存占用,提高计算效率。在图像、音频、文本等处理中,常常会出现多个元素都为0的情况,稀疏存储也可以有效提高处理速度和节省存储空间。

常见的稀疏存储格式有CSR(Compressed Sparse Row)、CSC(Compressed Sparse Column)和COO(Coordinate)。其中,CSR和CSC通常用于矩阵处理,COO则可以用于多种数据类型的稀疏存储。

需要注意的是,在应用稀疏存储的方案时,需要根据具体的场景和需求选择合适的算法和数据结构,以保证数据的正确性和程序的稳定性。同时,也需要进行充分的测试和性能优化,确保程序可以快速、准确地处理大规模数据。

在维度建模中,度量类型维度(Measure Type Dimension)是一种用于描述度量(Measure)的特性或属性的维度。度量类型维度用于为度量提供更加丰富的分析和查询选项,可以对度量进行分类和分组,使得用户能够更好地理解和分析数据。

通常,在一个数据仓库或数据模型中,度量是与事实表(Fact Table)相关联的数值数据,用于表示业务的度量指标。例如,销售额、利润、订单数量等都可以作为度量。

然而,有时候在分析和查询数据时,仅仅使用度量本身可能无法满足用户的需求,因为度量可能有不同的计算逻辑、不同的聚合方式、不同的单位或格式等特点。这时,可以引入度量类型维度来描述度量的特性和属性。

度量类型维度可以包含以下信息:

  • 名称:用于描述度量类型的名称,例如“销售额”、“利润”等。
  • 计算方式:描述度量值的计算方式,例如总和、平均值、最大值、最小值等。
  • 单位:描述度量值的单位,例如美元、数量、百分比等。
  • 格式:描述度量值的展示格式,例如货币格式、整数格式、小数点精度等。
  • 聚合层次:描述度量值在多个层次上的聚合方式,例如按年、按季度、按月份等。
  • 关联信息:与度量类型相关联的其他维度或属性,例如产品类别、地理区域等。

通过引入度量类型维度,我们可以对度量进行更加灵活和细粒度的分析。用户可以根据需要选择特定的度量类型,进而在分析和查询过程中更好地理解和解释度量数据。

需要注意的是,在设计度量类型维度时,需要根据具体业务需求进行合理的分类和定义,以及与度量表和其他维度表的关联关系。正确设计和使用度量类型维度可以使数据模型更加灵活、易于理解和使用,从而支持更好的分析和决策。

8.11        步骤维度

        序列过程(类如,Web页事件)通常在事务事实表中给用不同行表示过程中的每一步。为了告知哪个步骤满足整个会话,使用步骤维度展示当前步骤的步骤号以及完成该会话用共有多少步骤。

在维度建模中,步骤维度(Step Dimension)是一种用于描述业务流程或过程的维度。步骤维度用于记录一个业务过程中每个步骤的相关信息,可以帮助用户更好地理解业务流程,并对其进行分析、优化和监控。

步骤维度通常用于记录多个连续的事件或活动,例如在线购物流程中的各个步骤(选择商品、填写地址、支付等),或医疗流程中的各个步骤(挂号、检查、诊断、治疗等)。每个步骤都可以包含以下信息:

  • 步骤编号:用于标识每个步骤的唯一编号,可以作为事实表中的外键。
  • 步骤名称:用于描述每个步骤的名称或标题,例如“添加商品到购物车”、“支付订单”等。
  • 步骤开始时间和结束时间:用于记录每个步骤的开始时间和结束时间,以便进行时间分析和监控。
  • 步骤状态:用于描述每个步骤的状态,例如“进行中”、“已完成”、“已取消”等。
  • 步骤持续时间:用于记录每个步骤的持续时间或耗时,以便进行性能分析和优化。
  • 关联信息:与步骤相关联的其他维度或属性,例如用户、产品、地理区域等。

通过引入步骤维度,我们可以对业务流程进行更加灵活、精细和全面的分析。用户可以根据需要选择特定的步骤,进而在分析和查询过程中更好地理解和解释业务流程。

需要注意的是,在设计步骤维度时,需要根据具体业务需求进行合理的分类和定义,以及与事实表和其他维度表的关联关系。正确设计和使用步骤维度可以使数据模型更加精细、具有可扩展性和易于理解和使用,从而支持更好的分析和决策。

8.12        热交换维度

        当同一个事实表于相同维度的不同拷贝交替搭配时,可使用热交换维度。列入,某事实表包含股票行情,可以同时展示给不同的投资人,不同的投资人对不同的股票有不同的属性要求。

在维度建模中,热交换维度(Rapidly Changing Dimension,RCD)是指在事实表的日期或时间粒度内,维度属性经常变化的维度。即某个维度表中的某些属性在时间粒度内的值是可变的,这个属性是热交换的。

例如,在销售数据仓库中,订单维度可能包含一些可变的属性,例如订单状态、订单优惠等。这些属性在订单创建后可能会多次改变,因此称之为热交换维度。

热交换维度通常需要特殊的处理机制,以便对其进行有效的管理和分析。常用的处理方式包括:

  • 历史记录:通过记录每次属性变化的时间点和值,可以在某个时间点上回溯查看维度的历史状态。这种方式可以保留所有的属性值,但会增加数据冗余和查询复杂度。
  • 最新值:只保留每个维度的最新值,可以简化数据模型和查询复杂度,但会失去历史数据。
  • 版本号:通过引入版本号,可以同时兼顾历史记录和最新值,使得数据模型更加灵活和可扩展,但需要在维度表中引入新的字段和维护机制。

使用热交换维度可以增强数据模型的灵活性和可扩展性,支持更加细粒度的分析和处理。但需要采用合适的处理方式和策略,以平衡数据冗余、查询复杂度和查询效率等方面的要求。

8.13        抽象通用维度

        一些建模者喜欢使用抽象通用维度。例如,他们的模式包含单一通用位置维度而不是关于商店、仓库和客户维度的嵌入式的地理属性。类似地,其人员维度包含雇员、客户和供应商,因为尽管每种类型都包含显然不同地属性,但他们都是人。在维度建模时应尽量避免使用抽象通用维度。与每种使用类型关联的属性集合通常存在差异。如果属性是通用的,例如,地理州,应将它们唯一标识以区分商店所在的州和客户所在的州。最后,将所有不同的位置、人员、产品放入单一维度将产生大型的维度表。数据抽象可以适当运用于操作型源系统或ETL处理,但对查询性能有负面影响,并会对维度模型的易读性带来负面影响。

在维度建模中,抽象通用维度(Abstract Generic Dimension)是指将多个具体维度合并为一个通用的维度,以简化数据模型的复杂性和提高可维护性。抽象通用维度的目的是将多个具体维度之间的共性和相似性抽象出来,使得数据模型更加灵活、可扩展和易于理解。

通常情况下,不同的维度可能具有一些相同的属性,例如商品维度和客户维度都有名称、代码、描述等属性。抽象通用维度将这些共同的属性提取出来作为通用属性,并将其作为单独的维度表存在。然后,具体的维度表与通用维度表建立关联,通过外键将其连接起来。

通过抽象通用维度,可以实现以下优势:

  1. 数据模型简化:将多个具体维度合并为一个通用维度,减少了数据模型中的冗余维度表,使得模型更加简洁和易于理解。
  2. 数据一致性:通用维度可以提供标准化的属性,确保与之关联的所有具体维度表中的相同属性值保持一致,提高数据一致性。
  3. 可维护性增强:当需要对某个属性进行修改时,只需在通用维度表中进行一次修改,而不需要逐个修改所有具体维度表,简化了维护工作。
  4. 灵活性提高:通过引入通用维度,可以轻松地添加新的具体维度,而不需要对已有的数据模型进行大规模修改。

需要注意的是,在设计抽象通用维度时,需要根据具体业务需求和维度之间的共性进行合理的抽象和设计。同时,还需要考虑到通用维度与具体维度之间的关联关系,以及在查询和分析过程中的性能问题。正确设计和使用抽象通用维度可以使数据模型更加灵活、可扩展,同时提高开发和维护效率。

8.14        审计维度

        当事实表含给是在ETL之后建立的,建立包含当时已知的ETL过程元数据的神基维度是很好的方法。简单的审计维度行可包含一个或多个数据质量的基本标识,也许来自对错误事件模式的检验,记录数据处理是发现的数据质量问题。另外,使用审计维度属性可以包含描述建立事实行或ETL执行时间戳的ETL代码版本环境变量。这些环境变量对审计意图特别有用,因为它们确保BI工具下钻以确定哪些行是有哪些ETL软件版本建立的。

审计维度(Audit Dimension)是指用于捕获和记录数据变更历史的维度。它用于跟踪和管理事实数据和维度数据的变化情况,以满足审计和数据溯源的需求。

审计维度一般包含以下属性:

  1. 时间戳(Timestamp):记录数据变动的时间点或时间段。
  2. 操作类型(Operation Type):记录数据变动的类型,例如插入、更新、删除等。
  3. 操作用户(User):记录进行数据变动的用户或系统。
  4. 操作详情(Operation Details):记录具体的数据变动细节,例如修改前后的数值、变动原因等。

审计维度常用于以下场景:

  1. 数据追溯:通过审计维度,可以追溯每个数据点的变化历史,了解数据在不同时间点的变动情况,方便进行数据分析和溯源。
  2. 数据一致性验证:通过审计维度可以验证数据的合法性和一致性,当数据变动发生时,可以通过审计维度进行对比和验证。
  3. 审计和合规需求:审计维度可满足审计和合规性的要求。通过记录数据的变动情况,可以进行数据审计、合规性验证和报告生成等。
  4. 数据修复和还原:当数据发生错误或异常时,可以通过审计维度找出问题所在,并进行数据修复和还原,确保数据准确性和一致性。

在实际应用中,审计维度的设计需要根据具体业务需求进行灵活的设计和扩展。可以根据需要增加或修改审计维度的属性,以满足不同的审计和数据追溯需求。同时,需要注意在数据模型设计和查询优化过程中,如何合理利用审计维度,以保证数据加工过程的准确性和效率。

8.15        最后产生的维度

        有时来在操作型业务过程的事实在关联维度内容前,以分钟、小时、天或周产生。例如,在实时日期发布环境下,订单消耗行可能会到来,显示客户提交的购买特定商品的自然键。在实时ETL系统中,改行必须提交到BI层,即使客户或产品还不能立即确定下来。在此情况下,建立特殊的维度行,包含作为属性的未分解的自然键。当然,这些维度行必须包含通用未知值,用于多数描述性列;推测适当的维度内容将会从源获得。当这些维度内容最后获得时,占位维度行用类型1重写。当采用类型2维度属性的追溯性变化发生后,最后达到的维度数据也会产生。在此情况下,新行需要插入维度表中,然后需要重新定义关联事实行。

在维度建模中,最后产生的维度(Conformed Dimension)是指在一个数据仓库中被多个事实表共同使用的维度。最后产生的维度具有高度标准化和一致性,可用于多个数据集和指标。

最后产生的维度通常包括以下特点:

  1. 具有标准属性:最后产生的维度通常包括标准属性和统一性的属性,例如时间、地点、客户、产品、销售渠道等。
  2. 质量高:最后产生的维度具有高数据质量和精度,可以作为所有事实表查询和分析的基础数据。
  3. 可重用:由于最后产生的维度在不同的事实表中均可使用,因此可以在多个数据集中重复使用。这有助于提高数据仓库的可维护性和可扩展性。

最后产生的维度在实际应用中具有重要的作用。例如,时间维度通常被多个事实表使用,例如销售、库存、财务等。由于时间维度的标准化和一致性,可以轻松地将数据集成到同一个数据仓库中进行分析和对比。另一个例子是产品维度,不同的事实表可能涉及不同类型的产品,但最后产生的产品维度可以将它们统一为一组产品维度,便于数据分析和查询。

需要注意的是,在设计最后产生的维度时,需要根据不同事实表的特定需求进行灵活的设计和扩展。同时还需要考虑维度的切片和缩放等问题,在查询优化过程中使用合适的索引和聚合方式,以提高查询性能和数据加工效率。

        特殊目的模式

9.1        异构产品的超类与子类模式

        金融服务与其他商业通常提供不同业务类型的广泛的产品。例如,零售银行可以提供许多不同类型账目,从支票账户到抵押贷款到商业贷款。但是所有这些都是账户的实例。视图建立单一的、固定的事实表,将所有可能的事实都包含在内,联系维度表包含所有不同产品的属性,时不会成功的,因为存在大量的不兼容事实和属性。解决方案是建立单一的超类事实表,该事实表遍历所有账户类型的事实表(以及包含公共属性的超类维度表),然后系统化地为不同子类建立不同地事实表(与维度表关联)。超类与子类事实表也被称为核心或自定义事实表。

在维度建模中,异构产品的超类与子类模式(Supertype-Subtype Pattern)是一种用于建模具有不同属性或行为的相关产品的一种模式。这种模式适用于多个产品共享一些共同特征,但又具有各自的特定属性或行为的情况。

在这种模式下,一个超类(Supertype)代表了所有相关产品的共同特征,而每个子类(Subtype)则代表了每个具体产品的特定属性和行为。

具体来说,异构产品的超类与子类模式使用继承(Inheritance)的概念,其中超类拥有一组通用的属性和行为,而子类根据其自身特点具有独特的属性和行为。这种模式使得我们可以将异构产品归类为一个共同的超类,并且在查询和分析时可以共用某些维度和指标。

例如,以电子产品为例,我们可以将超类定义为“电子产品”,其中包含所有电子产品的共同属性,如序列号、生产日期和制造商。然后,我们可以针对每种具体的电子产品(如手机、电视、笔记本电脑等)创建相应的子类,并添加子类特有的属性,如手机的屏幕大小和电视的分辨率。

这种模式的优势在于:

  1. 提高数据模型的可维护性和可扩展性,减少重复设计和冗余字段。
  2. 便于数据集成和查询,可以通过超类的公共属性和行为对所有子类进行统一分析。
  3. 使得数据仓库的数据模型更符合现实世界的业务逻辑。

需要注意的是,异构产品的超类与子类模式的设计需要根据具体的业务需求和产品特点进行灵活调整。在数据模型设计过程中,要合理选择超类和子类的属性,避免属性冗余和不当继承关系。同时,在查询和分析时,要根据具体需求合理使用维度和指标,以保证查询结果的准确性和有效性。

9.2        实时事实表

        实时事实表需要比传统地夜间批处理过程更频繁地被更新。有许多技术可用于支持这一需求。采用何种技术需要考虑最后部署到BI报表层地DBMS或OLAP多维数据库地能力。例如,“热分区”可以定义一个事实表占用专用物理内存。不用在该分区上建立聚集和索引。其他DBMS或OLAP多维数据库可能支持延迟更新,允许已存在地运行完毕地查询,仍然可执行更新。

实时事实表(Real-Time Fact Table)是指用于记录和存储实时数据的事实表。与传统的批处理形式相比,实时事实表能够实时地捕捉和处理数据变化,使数据仓库可以及时反映最新的业务情况。

实时事实表具有以下特点和用途:

  1. 实时数据捕捉:实时事实表能够及时捕捉、记录和存储最新的业务事件和数据变化,不需要进行批量处理,使得数据仓库具有更高的数据更新频率和及时性。
  2. 事务级别的数据精度:实时事实表记录的数据反映了业务事件的实时状态,可以提供更加精确和准确的数据分析和决策支持。
  3. 近实时查询和报表:实时事实表的数据可以直接用于实时查询和报表生成,帮助用户及时获得最新的业务数据。
  4. 高并发处理能力:实时事实表需要具备高并发处理能力,能够处理大量的实时数据流,以确保业务的时效性和一致性。
  5. 与其他事实表联合分析:实时事实表可以与其他批处理的事实表联合使用,进行整体的数据分析和综合报表的生成。

需要注意的是,实时事实表的设计和实现需要根据具体的业务需求和系统架构进行调整。对于高并发和大数据量的场景,可能需要采用流式计算框架(如Apache Kafka、Apache Flink等)进行数据传输和处理。同时,为了确保数据一致性,通常需要设计相应的数据同步和更新机制,以防止数据重复或数据丢失。

9.3        错误事件模式

        数据仓库中数据质量的管理需要一个综合性系统,管理数据质量通过屏幕或过滤器来实现,用于测试从源系统到BI平台的数据。当数据质量屏幕检测到错误时,该事件被记录在特殊的维度模式中,该维度模式仅能被ETL后端处理系统处理。这一模式包含错误事件事实表,其粒度为单独错误事件和相关错误事件详细事实表,相关错误事件详细事实表粒度为参与错误事件的每个表中的列。

在维度建模中,错误事件模式(Error Event Pattern)是一种用于处理和记录错误或异常事件的模式。它用于捕捉和跟踪数据仓库中发生的错误事件,帮助评估和改进数据质量。

错误事件模式的设计和实现包括以下几个方面:

  1. 错误事件表:设计一个专用的错误事件表,用于记录每个错误事件的相关信息。这些信息可包括错误类型、发生时间、错误的原因、错误发生的位置等。错误事件表应该有适当的维度和指标,以便对错误事件进行分类和分析。
  2. 错误事件维度:定义错误事件维度,其中包含与错误事件相关的维度属性。例如,错误事件的类型、级别、源系统、错误代码等。错误事件维度将错误事件与其他事实表进行关联,以便进行分析和修复。
  3. 错误事件事实:具体的错误事件可能需要记录一些相关的度量或指标,以便后续跟踪和分析。例如,错误事件的发生次数、影响的记录数量、修复所需的时间等。
  4. 错误事件处理:针对不同的错误事件,需要制定相应的处理和修复策略。这可能包括数据修复、重跑数据加载过程、更新数据质量规则等。
  5. 错误事件追踪和监控:为了及时发现和处理错误事件,需要建立适当的错误事件追踪和监控机制。这可以通过日志记录、报警系统、监控仪表板等手段来实现。

错误事件模式的目的是增强数据质量管理,帮助发现和解决数据仓库中的问题。通过使用错误事件模式,可以更好地理解和处理数据质量问题,提高数据仓库的可靠性和稳定性。同时,错误事件模式也可以作为数据质量改进过程的一部分,帮助建立数据质量规则和流程,以确保良好的数据质量管理。

  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值