包含可在源系统中定期更新的信息的事实表

2024-04-01

我正在构建一个维度数据仓库,并学习如何从仓库中的源系统对各种业务流程进行建模。

我目前正在将数据仓库中源系统的“投标”(工作投标)建模为事实表,其中包含以下信息:

  • 投标金额
  • 预计收入
  • 销售人员
  • 出价状态(有效、待定、拒绝等)
  • etc.

问题在于,出价(或我尝试建模的大多数其他流程)可以经历各种状态,并在源系统中的任何给定时刻更新其信息。根据 Ralph Kimball 的说法,事实表只有在被视为“累积快照”时才应更新,并且我确信并非所有这些进程都会根据下面的定义被视为“累积快照”。

根据 Kimball 小组的建议,应如何在数据仓库中对这些类型的流程进行建模?此外,什么类型的事实表适用于出价(考虑到我上面概述的事实)?

摘自http://www.kimballgroup.com/2008/11/fact-tables/ http://www.kimballgroup.com/2008/11/fact-tables/

交易粒度对应于在单个交易中进行的测量 立即的。杂货店的蜂鸣声是一种交易谷物。测得的 事实仅对该时刻和该事件有效。下一个 测量事件可能会在一毫秒后或下个月发生,或者 绝不。因此,事务粒度事实表是不可预测的稀疏或 稠密。我们不能保证所有可能的外键都会被 代表。事务粒度事实表可能非常庞大, 最大的包含数十亿条记录。

周期性快照粒度对应于预定义的时间跨度, 通常是一个财务报告期。图 1 说明了每月 账户定期快照。测量的事实总结了活动 在时间跨度期间或结束时。周期性快照粒度 为所有报告实体(例如 (如图 1 中的银行帐户)将出现在每个快照中,即使 没有活动。周期性快照的密度是可以预见的,并且 应用程序可以依赖始终存在的按键组合。 定期快照事实表也可能变得很大。一家银行有20 万个账户和 10 年历史将有 24 亿条记录 在每月帐户定期快照中!

累积快照事实表对应于可预测的 具有明确定义的开始和结束的过程。订单处理, 索赔处理、服务呼叫解决和大学招生 典型的候选人。订单累积快照的粒度 例如,处理通常是订单上的行项目。注意 图1中有多个代表标准的日期 订单所经历的场景。累积快照记录为 随着流程的逐步进展而重新访问和覆盖 从开始到结束。累积快照事实表一般是 由于这种覆盖,比其他两种类型小得多 战略。


就像其中一条评论提到的那样,更改数据捕获是一个相当通用的术语,表示“随着时间的推移,我如何处理数据实体的更改”,并且有关于它的整本书(以及无数的帖子和文章)。

不管任何似乎暗示一个明确的黑白或总是这样做的答案的陈述,真正的答案,像往常一样,是“这取决于” - 在你的情况下,取决于你需要什么谷物您的特定事实表。

如果您的数据以不可预测的方式或非常频繁地发生变化,can实施 Kimball 的版本变得具有挑战性累积快照(想象一下您最终可能需要多少个“里程碑”日期列等)。

因此,如果您愿意,您可以决定将事实表设为事务事实表而不是快照,其中事实键为(出价键、时间戳),然后在您的应用层(无论是视图、mview、实际应用程序还是其他),您可以确保给定的查询仅获取最新的version每个出价(请注意,这可以被认为是一种虚拟的累积快照)。如果您发现不需要以前的版本(history每个出价的),您可以有一个例程来修剪它们(即删除或将它们移动到其他地方)。

或者,您只能允许在事实(出价)处于最终状态时添加事实(出价),但是这样您可能会出现明显的滞后,新的(可更新的)出价在一段时间内无法进入事实表。

无论哪种方式,都有几种可靠且经过验证的技术来处理此问题 - 您只需清楚地识别业务需求并进行相应的设计即可。

祝你好运!

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

包含可在源系统中定期更新的信息的事实表 的相关文章

  • 如何在SSRS中的表上创建热图?

    如何在 SSRS 中创建这样的内容 颜色将根据行中的值 承销商 从红色变为绿色 所有这些都在一个组中 您可以通过右键单击各个单元格并根据表达式设置填充颜色来完成此操作 In the Image below I ve mistakingly
  • 如何使用 MySQL 的 LOAD DATA LOCAL INFILE 在导入 CSV 时将字符串日期更改为 MySQL 日期格式

    我正在使用 MySQL 的 LOAD DATA LOCAL INFILE SQL 语句将数据从 CSV 文件加载到现有数据库表中 下面是一个 SQL 语句示例 LOAD DATA LOCAL INFILE file csv INTO TAB
  • 复选框上的数据绑定

    我目前正在将数据从 SQL 数据库之一提取到我的应用程序中 我可以让它适用于我的文本框和其他项目 但是 我似乎无法让它适用于复选框 这是我正在使用的代码 DataTable dt new DataTable dt using SqlConn
  • 查找 PostgreSQL 中所有范围集合的所有交集

    我正在寻找一种有效的方法来查找时间戳范围集之间的所有交集 它需要与 PostgreSQL 9 2 配合使用 假设这些范围代表一个人可以见面的时间 每个人都可以有一个或多个空闲时间范围 我想找到all可以召开会议的时间段 即所有人都有空的时间
  • 如何将可视选择的文本通过管道传输到 UNIX 命令并将输出附加到 Vim 中的当前缓冲区

    使用 Vim 我尝试将在可视模式下选择的文本通过管道传输到 UNIX 命令 并将输出附加到当前文件的末尾 例如 假设我们有一个 SQL 命令 例如 SELECT FROM mytable 我想做如下的事情
  • 拆分列中的字符串并在列中添加值

    我有一个包含几行数据的表 如下所示 16 W 2 Work ALBO 00 Proposal ALxO Amendement 1 20091022 signed pdf 17 W 2 Work ALBO 00 Proposal Level1
  • Mysql 检索所有有限制的行

    我想检索特定用户的所有行 限制为 0 x 所以我只是想问是否有任何方法可以检索 mysql 中的所有行 而不调用返回 x 的 count id 的方法 而不重载现有函数 该函数在查询中根本没有限制 与我们的 string Relace 功能
  • 如何在使用连接池时强制 SqlConnection 物理关闭?

    我明白 如果我实例化一个 SqlConnection 对象 我实际上是从连接池中获取一个连接 当我调用 Open 时 它将打开连接 如果我对该 SqlConnection 对象调用 Close 或 Dispose 方法 它将返回到连接池 但
  • 分层查询

    我希望我能够解释困扰我的问题 我有以下分层数据集 这只是 34K 记录的子集 PARENT ID CHILD ID EXAM TUDA12802 TUDA12982 N TUDA12982 TUDA12984 J TUDA12984 TUD
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • sql server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • PHP 通过 SSL 连接到 MS SQL

    我想要实现的目标非常简单 我想通过安全连接从 PHP 脚本连接到外部 MS SQL 数据库 然而 这已被证明是有问题的 到目前为止 经过三个小时的研究 我不知所措 客户端的平台是Ubuntu 这意味着我无法使用SQLSRV 安全连接已经在不
  • 为什么 SqlClient 在传递 SqlXml 时使用不必要的 XML 转换?

    我有一个关于从 C 代码将 xml 数据类型传递给查询的问题 首先 这是 SQL Server 上的一个表 CREATE TABLE dbo XmlTable id int IDENTITY 1 1 NOT NULL dat xml NOT
  • MySQL 查询到 CSV [重复]

    这个问题在这里已经有答案了 有没有一种简单的方法来运行MySQL查询来自linux命令行并以csv格式输出结果 这就是我现在正在做的事情 mysql u uid ppwd D dbname lt lt EOQ sed e s g tee l
  • SELECT 语句会受到 SQL 注入攻击吗?

    实际上有2个问题 我知道我必须尽可能多地使用存储过程 但我想知道以下内容 A 我可以从 SELECT 语句 例如 Select from MyTable 获得 SQL 注入攻击吗 B 另外 当我在 ASP NET 中使用 SQLDataSo
  • 为表中的每个组选择前 N 行

    我面临一个非常常见的问题 即 为表中的每个组选择前 N 行 考虑一个表id name hair colour score列 我想要一个结果集 对于每种头发颜色 都能得到前 3 名得分手的名字 为了解决这个问题 我得到了我所需要的Rick O
  • 计算运行总计时出错(之前期间的累计)

    我有一张桌子 我们称之为My Table有一个Created日期时间列 在 SQL Server 中 我试图提取一个报告 该报告显示历史上有多少行My Table按月在特定时间 现在我知道我可以显示有多少added每个月 SELECT YE
  • 使用 postgres 和 node js 在单个语句中执行多个查询

    我需要在像这样的单个语句中执行插入和删除查询 INSERT INTO COMPANY ID NAME VALUES 1 Paul DELETE FROM COMPANY WHERE ID 12 这是我用于执行查询的 node js 代码 p

随机推荐

  • 如何使用 SBT 在依赖项中找到重复的类[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在将一个项目从 Apache Maven 迁移到 sbt 我的项目有很多依赖项 超过 200 个
  • 使用 @keyup 事件输入在 Vue 中不起作用

    我试图在按 Enter 键时调用方法 但它不起作用 代码如下
  • 使用比较器对列表列表进行排序

    我正在考虑使用比较器对列表列表 在 ArrayList 上 进行排序 顺序最大的优先 所有子列表的大小始终相同 例如 一个列表 4 5 6 7 9 10 4 7 8 1 2 3 7 9 12 这应该 7 9 12 7 9 10 4 7 8
  • 调用不带括号的函数将整个函数作为字符串返回

    我创建了一个像这样的 JavaScript 对象 var obj a 10 b 20 add function return this a this b 我将函数执行为obj add它将整个函数作为字符串 a 返回 如下所示 functio
  • 我可以使用某些语法访问匿名内部类中的新方法吗?

    是否有任何 Java 语法可以从外部类访问匿名内部类中定义的新方法 我知道可以有多种解决方法 但我想知道是否存在特殊语法 例如 class Outer ActionListener listener new ActionListener O
  • XAML 文件 (WPF) 的编译

    我想了解XAML文件的编译过程 很抱歉将这个问题放在这里 但我确实没有找到任何资源深入解释这个过程 我知道 XAML 被编译成 baml 文件 但是 baml 是从生成的 g cs 文件编译而来的吗 或者 baml 是独立的 并且是从生成的
  • 是否可以使用 Sitemesh 直接在 JSP 中定义装饰器?

    我知道我应该在配置文件或我自己的子类中定义装饰器ConfigurableSiteMeshFilter 例如 public class SitemeshFilter extends ConfigurableSiteMeshFilter Ove
  • iOS/iPhone:当应用程序处于“拒绝”状态时,应用程序内购买沙箱被破坏?

    See 主要推力下面跳到我问题的主要内容 我的 iOS 应用程序在 Apple 审核过程中被拒绝 原因很简单 但很容易修复 但是 我想对新版本进行一次测试 包括重新测试我们的应用内购买 应用程序中只有一个可购买的项目 现在 应用程序在初次检
  • Python astimezone() 意外结果

    给定一个变量 其中包含巴黎时区 2000 01 01 00 01 的日期时间 据我所知 冬季为 UTC 2 datetime datetime 2000 1 1 0 1 tzinfo pytz timezone Europe Paris 我
  • jquery mobile 1.4页面多页面onpagecreate管理以避免双触发器火灾

    有人可以清除多页中事件处理程序的使用吗 文档很好 但不要警告混合使用时可能出现的冲突 例如 作为一个新手 我注意到如果我将事件处理程序放在这个 html 结构中 我会得到双重触发 该结构来自以下 或此时忽略 文档的逻辑 div div di
  • 在 PHP 中使用单引号(转义)

    我正在 PHP 标签内编写 HTML 代码 已经编写了锚标记样式 如果我更改某些部分将会影响 所以我试图在跨度 onclick 事件中编写我的代码 这是我的代码 div span array1 i name span div 如果单击该数组
  • 将几何图形转换为 BufferGeometry

    据我了解 Geometry 存储顶点和面的 javascript 对象结构 而 BufferGeometry 仅通过 Float32Arrays 等存储原始 gl 数据 有没有什么方法可以将标准 Geometry 转换为 BufferGeo
  • html5 Android 应用程序上的 Google 导航

    我只是想知道是否有人可以解释为什么这种情况发生在我身上 我正在使用phonegap 和jquerymobile 开发一个移动应用程序 该应用程序的功能之一是引导用户使用导航工具 对于 iOS 我们选择 Waze 添加它真的很容易 a hre
  • 平板电脑和手机中导航抽屉的宽度不同

    我试图为我的一个项目实施材料设计 here http www google com design spec patterns navigation drawer html 下面提到了 导航抽屉最大宽度是标准的5倍 增量 移动设备上为 56d
  • 如何将列表转换为字符串[重复]

    这个问题在这里已经有答案了 如何使用 Python 将列表转换为字符串 Use join xs 1 2 3 s join xs 如果列表包含整数 请在连接元素之前将元素转换为字符串 xs 1 2 3 s join str x for x i
  • Xcode 7,资产目录通用设备背景图片支持吗?

    我看过各种有关图像尺寸的旧帖子 但我找不到任何最新内容 甚至不知道是否可以仅使用资产目录来提供所有 iPad 和 iPhone 屏幕尺寸的图像 这是我找到的最好的帖子 但在 Xcode 7 中它没有显示 Retina 4 2x 或 iPho
  • Google 应用脚本、Gmail 中的 getBody()、正则表达式 \n

    晚上好 Google 应用程序脚本中的正则表达式换行符 n 存在此类问题 我正在使用 getbody 方法进行邮件解析并获取其中的一些 td valign middle width 43 align left img src http im
  • CoreBluetooth 应用程序在后台到底可以做什么?

    主题已经说明了一切 真的 就其存在而言 文档表明针对 iOS 设备上运行的 CoreBluetooth 框架编写的应用程序可以将 bluetooth central 添加到其后台权限列表中 从而在不活动时处理某种蓝牙事件 但exact事件是
  • OpenCL:为什么指向指针的指针不能作为参数传递给内核函数?

    你好 我只是想澄清一下为什么我们不能将 2D 数组指针作为参数传递给内核 为什么不允许 如果我使用它作为参数会发生什么 在内部 因为我知道代码会给出一些错误 请只做那些需要的 因为在 OpenCL 1 x 中设备有一个独立的地址空间 在设备
  • 包含可在源系统中定期更新的信息的事实表

    我正在构建一个维度数据仓库 并学习如何从仓库中的源系统对各种业务流程进行建模 我目前正在将数据仓库中源系统的 投标 工作投标 建模为事实表 其中包含以下信息 投标金额 预计收入 销售人员 出价状态 有效 待定 拒绝等 etc 问题在于 出价