问题标签 [scd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
435 浏览

mysql - 在 MySQL 中查询 SCD 类型 2 表

想象一下下表:

根据作为参数发送的日期,我想知道是否有任何方法可以构建返回正确类型的视图。例如:

SELECT Type WHERE date_to_analyse = '21/06/2010'应该返回 'Retail'
SELECT Type WHERE date_to_analyse = '18/06/2012' 应该返回 'Corp'

Date_to_analysis 不是表的列,我想避免使用存储过程。
我的想法是使查询“干净”,而不是使用以下查询

这甚至可能吗?

谢谢

0 投票
0 回答
199 浏览

ssis - BIML SCD 组件

在 SSIS 中,我们有基本的 SCD 组件来刷新维度表。我希望通过 BIML 使用它,但该组件似乎不存在...... BIML 中有没有办法刷新 Dim ?

提前致谢

0 投票
1 回答
60 浏览

sql-server - 获取表格中的所有有效时间片

我有一个表,其中的条目使用 SCD 2 进行历史记录现在我正在寻找一种可能性来获得同时有效的 Alle PK:

例如我的表看起来像这样:

选择应该给我两个粗体行

感谢您的帮助

0 投票
1 回答
301 浏览

sql - 更新 SCD2 表中的记录

我有一个表,其中的条目使用 SCD 2 进行历史记录,该表如下所示:

标有箭头的记录不正确 此记录将通过更新更正。所以在更新记录之后看起来像这样:(下一条记录中的 ValidTo = ValidFrom -1)

如果有多个不正确的记录,也必须通过更新来更正这些记录 ValidFrom 是正确的并且不必进行调整

有人可以帮帮我吗?谢谢

0 投票
0 回答
64 浏览

sql-server - SCD 在 BIDS 2016 SSIS 中

我正在尝试使用 SCD 转换来实现 2 型 SCD。当我更新源中的某些内容时,SCD 转换不是单独更新该行,而是更新并插入所有行。

例如,在第一次运行后,源有 50 行,目标有相同的 50 行。现在我更新了源中的第 1 行并运行了包,然后再次插入所有行,而不是更新那一行。

知道为什么吗?

0 投票
0 回答
102 浏览

sql-server - SQL Server SCD II 实施困境

我有一个包含 80 个字段以北的患者表,其中我需要保留所有字段的历史数据。为澄清起见,并非所有字段都“需要”版本控制,尽管决定简单地保留旧记录的完整副本。

为澄清起见,这是针对 ETL 流程,该流程将在非工作时间进行。

这里似乎有一些方法,虽然我不知道哪种方法最适合我,因为我以前没有这样做过。

选项 1:将 SSIS 用于 SCD 实施。
优点:由于我们无论如何都在使用 SSIS 来获取数据,所以继续使用相同的工具是有意义的
缺点:我已经阅读了一些关于 SSIS 中 SCD 性能的文章 - 例如:https ://chrisjarrintaylor.co .uk/2012/07/03/ssis-scd-vs-merge-statement-performance-comparison/

选项 2MERGE在 tsql 语句中使用。
优点:编写简短,易于理解 - 一个步骤完成所有步骤 缺点
:如果我们尝试在 80 多个字段上编写条件,可能会很麻烦。我们也可能OR在这么多字段上执行性能问题(如在,如果有的话)
下面的方法对我有用,虽然这样写,但意味着一个很长的合并语句:需要帮助理解 scd 的替代方案在SSIS

选项 3INSERT所有新记录,使用 CTE 清理重复项(那些没有更改的记录),UPDATE停用那些更改的记录的声明
Pro:没有杂乱OR的声明,不太难写或理解 - 性能不会似乎这将是一个问题(我们过去使用过 CTE 方法)
Con:不知何故,这是一种非常笨拙的方法

考虑到这些方法或您可能拥有的其他方法,是否有一种更易于维护、扩展性更好的方法?

小数据样本 - 源数据中有 80 多列(我无法控制)和更多行:http ://rextester.com/live/AYQUT28070

0 投票
0 回答
716 浏览

sql-server - SSIS SCD 转换开始日期和结束日期相同 - 这怎么可能?

我的 ETL 有问题。我有一个维度表,其中包含一些 SCD 1 和 SCD 2 列 - 我已在 SCD 转换中分别正确映射这些Changing AttributeHistorical Attribute

然后在“历史属性选项”页面上,我检查了Use start and end dates to identify current and expired records,将我的 ValidFrom 列输入为 ,Start date column并将我的 ValidTo 列输入为End date column

据我了解,这应该意味着任何插入的记录都会被赋予当前日期时间值的 ValidFrom ,并且它们的 ValidTo 列保持不变NULL。对于那些已经存在但已经过时的记录,他们的 ValidTo 成为当前的日期时间值。

但是,在某些但不是所有导入的记录上 - 插入的最新记录在 ValidFrom 和 ValidTo 记录中以完全相同的日期时间插入。这成为一个巨大的痛苦,因为我不得不在我的查询中将该记录视为无效,以及对事实表加载的连锁反应。

任何人都可以帮助解释为什么会这样吗?

0 投票
0 回答
540 浏览

sql - SCD 类型 2 结束日期问题

我正在努力录制缓慢变化的维度 (SCD)。我有一个日常 ETL 作业,根据更改注册记录版本。

问题是我得到的结束日期大于当前版本的开始日期。我应该看到的是,非当前记录的结束日期至少是当前记录开始日期的前一天。

相反,这就是我得到的

我知道造成这种情况的是 ETL 工作。出于某种原因,它将非当前记录 EndDate 更新为今天的日期。一旦记录是非当前的,它就不应该再次更改它的 EndDate。

有人可以指出我在代码中做错了什么吗?

这是我认为问题所在,但我不知道如何解决它:

0 投票
1 回答
48 浏览

sql-server - 删除重复间隔/历史重复

为该问题设置正确的标题有点挑战,因此我将尝试解释该问题。我们使用JCC进行Oracle --> SQL Server复制。它的工作方式是读取 Oracle 中的事务日志,然后在每次更改时发送 2 个语句:INSERT + UPDATE。因此,如果没有这样的记录,如果SQL Server中的记录已经存在,它将被插入,所以第一次INSERT将因为PK冲突而失败,然后它会尝试UPDATE记录。

现在我们正在尝试使用SQL Server 时态表进行历史跟踪。当JCC(复制)失败时问题就开始了,因为我们需要重新播放日志。例如,复制在上午 11:01 失败。为了确保我们不会错过任何记录,我们需要重播,例如从上午 10:45 开始。它适用于普通表,但是当我们处理临时表时,它只会使历史变得错误并且历史变得不准确。

所以,现在的问题。如何识别这些记录并清理它们?

在此处输入图像描述

预期成绩: 在此处输入图像描述

0 投票
0 回答
65 浏览

data-warehouse - 数据仓库:多值渐变维度

我目前正在为拉丁美洲的(咖啡)聚合器创建一个数据仓库。他们有两个主要业务:

  1. 从农民那里购买咖啡并在国际市场上销售
  2. 向这些农民提供小额信贷以增加他们的产量。

我的计划是在他们的操作系统/数据库之上创建一个数据仓库。

我将整合的第一个业务流程是信用操作,然后我将添加个体农民的咖啡购买。

对于信贷操作,我设想一个单一的事实表,其中包含贷款金额、农民、贷款官员等维度。但在进入有关贷款的事实表之前,我目前正在创建农民维度。

我有一个不错的小农民维度,有一些钥匙、地理位置、性别、教育等

我还想包括农民的“经济生产”。这是在贷款申请过程中捕获的信息,基本上说明了他们生产什么样的咖啡以及他们生产咖啡的土地面积。因此,农民与经济生产之间的关系为 1:n

此外,这种情况每年都在变化,显然只有完成贷款申请的农民才知道。

此信息的目标是能够(甚至在创建信用事实表之前)创建一些关于农民、他们的空间分布和他们的经济活动/产出的基本数据/见解。

因此,我正在考虑将农民维度与“生产维度”相关联。该生产维度将是 (1) 时变的和 (2) 多值的。我计划根据类型 2(valid_from、valid_to 和 current_valid 列)实现的时间差异。

由于我对整个数据仓库场景相当陌生,因此我一直在阅读很多关于常用技术和原则的内容,主要来自 Kimball 的优秀(!)书。但是,我还没有遇到任何描述这种维度 - 维度连接的东西。

因此,我的问题是:

  1. 这是常见的并被认为是一种好方法吗?
  2. 我在哪里可以找到有关此问题的最佳实践的一些信息

编辑:我正在考虑的第二种可能性是创建某种处理“客户交互”的无事实事实表(例如,收集来自农民的此类信息的贷款申请流程)。然后,该事实表将具有对农民的 FK、对生产维度的 FK 以及对时间维度表的 FK。由于它没有与之相关的事实,这只会形成某种 1:n 链接表。与前一种方法的唯一区别是时间维度现在在一个单独的表中,而不是在我看来包含在生产表中。

EDIT2:或者我应该创建一个生产事实表,尽管它与聚合器的业务流程不一致。在那种情况下,生产某种作物的表面积可能会成为衡量标准,并且作物类型/品种等可能会进入一个单独的维度。