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

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(使用前将#替换为@)

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

  • 将查询结果作为 CSV 文件从 Docker PostgreSQL 容器导出到本地计算机

    我不确定这是否可能 或者我是否做错了什么 因为我对 Docker 还很陌生 基本上 我想将 PostgreSQL docker 容器内的查询结果作为 csv 文件导出到本地计算机 这就是我到目前为止所得到的 首先 我使用以下命令运行 Pos
  • CHAR(64) 或 BINARY(32) 在 SQL SERVER 中存储 SHA256 哈希

    我正在讨论在 SQL Server 中存储 SHA256 哈希时使用哪种数据类型 应该是 CHAR 64 还是 BINARY 32 该列将成为唯一聚集索引的一部分 我知道此时我可能会吹毛求疵 但是我想第一次就把这件事做好 而且我知道有时原始
  • 将日期时间列拆分为年、月和周

    我想拆分日期时间列 以便年份和月份在 select 语句输出中都有自己的列 我还希望有一个按一年中的一周而不是特定日期的专栏 基本上 我希望单独的年 月和周列显示在我的 select 语句输出中 尝试使用DatePart http msdn
  • 两个表中两个字段的总和

    我的数据库中有四个表 如下所示 表格发票 invcid customerid invoicedate tblInvc详细信息 ID invcid item itemprice itemquantity tblPay payid invcid
  • Bool类型返回规则

    我使用 dapper ORM 所以我使用两个规则Query
  • WHERE 子句中的可选参数[重复]

    这个问题在这里已经有答案了 假设有一个具有 3 个参数的存储过程 在所有可能性中 我希望通过一个单一的方法来实现这一目标WHERE子句不会失去对 using 的控制 AND OR 太多了 Example Params CITY VARCHA
  • SQL - 每个级别都有记录的递归树层次结构

    尝试使用 SAS 据我所知 不支持WITH RECURSIVE 在 SQL 中创建经典的层次结构树 这是现有表中的简化数据结构 USER ID SUPERVISOR ID 因此 要构建层次结构 您只需递归连接 x 次即可获取您要查找的数据
  • 无法从 CursorWindow 读取第 0 行,第 -1 列?

    我在使用数据库时遇到问题 当我运行 SQLView java 时 出现致命异常 java lang RuntimeException Unable to start activity ComponentInfo com jacob eind
  • 如何证明2条sql语句是等价的

    我开始用连接和子语句重写一个复杂的 SQL 语句 并获得一个看起来更简单的语句 我通过在相同的数据集上运行并获得相同的结果集来测试它 一般来说 我如何 概念上 证明这两个陈述在任何给定数据集中都是相同的 我建议学习关系代数 正如 Mchl
  • Laravel - LIKE 运算符来搜索加密值

    我正在尝试在 Laravel 应用程序中实现一个搜索模块 可以按名称过滤用户 为了保护用户 name 列行在数据库上加密 我面临的问题是下面的查询总是返回 0 结果 我在搜索数据库之前对搜索输入值进行加密 patients DB selec
  • Oracle SQL 查询日期格式

    我总是对 ORACLE SQL 查询中的日期格式感到困惑 并花几分钟时间去谷歌 有人可以向我解释当数据库表中有不同格式的日期时解决问题的最简单方法吗 例如 我有一个日期列为 ES DATE 保存的数据为 27 APR 12 11 52 48
  • 如何为不存在的值创建一行并用 0 值填充计数?

    在 SQL Server 中 我对数据上的用户年龄组运行查询 其中 在某些年里 每个年龄组的用户数为零 例如 2013 年有 18 21 年龄组的用户 因此查询返回下一个年龄组 22 25 作为第一行 因为没有包含 18 21 的条目 相反
  • Presto 数组包含一个喜欢某种模式的元素

    例如 我的表中的一列是一个数组 我想检查该列是否包含包含子字符串 denied 的元素 因此 在中午 12 00 拒绝 被管理员拒绝 等元素都将计数 我相信我将不得不使用 like 来识别模式 这个sql该怎么写呢 使用急板数组函数 htt
  • 编写 PHP SQL 更新语句的最佳方法

    我有这个 PHP SQL 语句 updateCategory UPDATE category SET name name description description parent parent active active WHERE i
  • 使用每个单独行的多个“where”子句更新多行

    我正在尝试像这样更新我的表 Update MyTable SET value 1 WHERE game id 1 x 4 y 8 SET value 2 WHERE game id 1 x 3 y 7 SET value 3 WHERE g
  • 在自定义条件下清理 SQL

    我需要创建一个简单的搜索 但我无法使用 Sphinx 这是我写的 keywords input split s queries keywords each do keyword queries lt lt sanitize sql for
  • T-SQL - 字符串连接

    希望有人可以提供帮助 我是一个新手 SQL 黑客 而且确实很糟糕 我在 SQL Server 2005 上有两个表 TABLE 1 和 TABLE2 TABLE1 COL1 COL2 1 10 2 20 3 30 4 10 4 20 5 2
  • SQL 选择与带有通配符的 URL 匹配的行

    我在数据库中有一个表 其中一列包含一个 URL 例如http example com users http example com users 轮廓 我得到了一个 URL 例如http example com users 234 profi
  • SQL 语法检查器和验证器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有类似 SQL 的 lint 语法检查器和验证器 之类的东西 有一个项目 SQLLint 检测 S
  • 在旧版本的 MySQL (<5.5.0) 中模拟 TO_SECONDS()

    出于性能和简单性的原因 我想以秒的形式获取 MySQL 3 x 服务器中 DATETIME 列的内容 或者实际上任何数字类型 我只是想在使用 UNIX TIMESTAMP 时避免所有明显的时区问题 the我表中的日期确实来自不同的区域设置

随机推荐

  • 如何使用 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 问题在于 出价