问题标签 [star-schema]

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 投票
2 回答
324 浏览

data-warehouse - 设计事实表以允许对事实类别进行简单的最新检测

我正在为联系历史事实表设计数据仓库事实表。我当前的架构看起来像这样:

我的应用程序要求之一是为维度ContactResult上的选择列表找到最新的。ContactTypeContactType维度具有一个ContactClass属性,该属性将用于标识要作为过滤依据的值范围。

上述结构让我可以通过 获取ContactType选择的所有联系信息ContactClass,并且我可以处理该列表以获取最新值。

问题是,任何人都可以建议对上述内容进行修改,以便更轻松地获取特定的最近联系事件ContactClass吗?目前这是一个事务性事实表,但如果它可以提高可用性,我很乐意对其进行更改。

此操作将针对广泛的客户 (200K+) 相当频繁地运行,因此性能很重要。该操作将在 Web 界面上以 C# 代码完成,因此在这种情况下,特定于 BI 工具的解决方案对我没有用处。

到目前为止,我想出的唯一想法是一个累积事实表,它只记录每个ContactClass. 对此选项的任何改进将不胜感激。

0 投票
1 回答
12341 浏览

data-modeling - 如何在大型数据仓库中为发票创建数据模型?

我正在为大型数据仓库中的客户发票创建数据模型。

下面显示了典型发票上的字段:

在此处输入图像描述


以下是迄今为止我为发票建模而制定的数据模型:

在此处输入图像描述

传统观念是大型数据仓库应该使用星型模式,这意味着一个事实表,但似乎要为发票建模,我需要两个事实表,如上所示。使用两个事实表是否正确?

0 投票
3 回答
86 浏览

mysql - 这是一个 MySQL JOIN 吗?

由于我没有使用该JOIN命令,我想知道这是否确实是一个JOIN(如果不是,该怎么称呼它)?

这是一个维度模型,通过使用代理键和主键来匹配细节

0 投票
1 回答
782 浏览

mysql - MySQL 查询停留在单行结果集的“排序结果”

我正在构建一个星型模式作为我正在构建的分析应用程序的后端。我的查询生成器正在使用常规星型连接模式构建查询。下面是一个示例查询,其中一个事实表连接到两个维度表,维度表由最终用户选择的常量值过滤。

我正在使用 MySQL 5.5,所有表都是 MyISAM。

在这个问题中,我只是想拉前 N 行(在这种情况下,前 1 行)

解释输出如下。两个维度键都解析为常量值,因为有一个唯一键应用于它们的值。

这是事实表上的索引:

在分析此查询时,我看到查询花费大部分时间执行文件排序操作“排序结果”。我的问题是,即使使用正确的索引,为什么这个查询不能简单地提取第一个值而不进行排序?my_idx 已经在右列排序,索引中首先出现的两列解析为常量,如计划所示。

如果我重写查询,如下所示,我可以得到我想要的计划,而不需要文件排序。

更改生成这些 SQL 命令的工具会很昂贵,所以即使查询是以原始格式编写的,我也想避免这种文件排序。

我的问题是,为什么即使索引上的第一个键是常量(通过 INNER JOIN)并且索引按正确的顺序排序,MySQL 仍然选择进行文件排序?有没有解决的办法?

0 投票
1 回答
1366 浏览

postgresql - Postgres 中分析表的架构

我们使用 Postgres 进行分析(星型模式)。每隔几秒钟,我们就会收到大约 500 种指标类型的报告。最简单的模式是:

我们的 DBA 提出了一个建议,将相同 5 秒的所有报告扁平化为:

一些开发人员反驳说这增加了开发的巨大复杂性(批处理数据以便一次性编写)和可维护性(仅查看表格或添加字段更复杂)。

DBA 模型是此类系统中的标准实践,还是仅在原始模型明显不够可扩展时才采取的最后手段?

编辑:最终目标是为用户绘制折线图。因此,查询将主要选择一些指标,按小时折叠它们,并选择每小时(或任何其他时间段)的最小/最大/平均值。

编辑:DBA 参数是:

  1. 这与第 1 天相关(见下文),但即使这不是系统最终需要做的事情,从另一个模式迁移也会很痛苦

  2. 将行数减少 x500 倍将允许更高效的索引和内存(在此优化之前该表将包含数亿行)

  3. 选择多个指标时,建议的架构将允许一次传递数据,而不是对每个指标进行单独查询(或 OR 和 GroupBY 的一些复杂组合)

编辑:500 个指标是“上限”,但实际上大多数时候每 5 秒只报告约 40 个指标(虽然不是相同的 40 个)

0 投票
0 回答
808 浏览

mondrian - 具有多层蒙德里安的雪花维度

我的表结构如下

现在我必须将等级和级别作为维度的级别。

写在“dim_question_tbl”表上的多维数据集。

我把维度写成

这不起作用。我得到的例外是“[等级]”必须至少有一个级别。

我也试过用sql查询

使用 sql 查询也是我得到的相同异常。

谁能帮助我如何使用雪花模式获得多个级别?

0 投票
1 回答
129 浏览

sql-server - 设计 BI 启动模式时,维度表是否应仅使用用户友好的属性值?

我正在为我的 BI Start 架构设计维度表。我已经观察到与每个 Dimension 值关联的用户友好属性值的值,因为这些值可以很容易且有效地用于报告。

我想知道,包含/公开源系统的编码值是否有任何好处(当然不包括源系统的唯一键)?

例如,如果我有一个名为 Color 的属性,其源系统中的本机代码值为:x2、x7、x9 分别代表 Red、Blue、Green - 在 Dimension 表中维护 2 列是否有任何价值:一个用于源系统代码值(例如 x2)一个用户友好值(例如红色)?

在 BI 报告中(我们目前在星型模式上使用 Cognos)连接回源系统以获取其他属性是否常见?

这些“其他”属性是否应该始终出现在 BI 模式中,从而永远不会重新连接到源系统?

0 投票
1 回答
406 浏览

database-design - 星型模式设计:当源系统与多对一(N:1)相关时,使用 2 维还是 1 一致维?

我正在创建一个星型模式来为学校的术语和课程建模。

学习管理系统 (LMS) - 上课的地方,将每个课程与特定的 LMS 术语相关联。

学生信息系统 (SIS) - 学生注册课程的地方,以比 LMS 更精细的方式对术语进行建模。因此,每个 LMS 术语都有多个 SIS 术语。

每个事实记录都以班级内的学生为粒度,并与 1 个 LMS 学期相关联。

看来我可以制作二维表:DimSisTerm 和 DimLmsTerm。

或者,我可以制作 1 个符合要求的维度表:DimTerm

在单个符合维度的情况下,每个 SIS 术语将有 1 条记录,但是 LMS 术语键及其属性将针对所有相关的 SIS 术语记录重复。

之前经历过这种情况的人可以就这两种情况之间的权衡提供指导吗?

0 投票
1 回答
366 浏览

database - 在 OLAP 系统中实现日期范围

如果这是一个微不足道的问题,请多多包涵,我是一只新蜜蜂,我正处于 OLAP 系统的设计阶段,我需要显示某个日期范围的成本。我有其他三个维度,如产品、供应商和语言。我应该将日期添加为一个维度吗?我的查询主要花费在从 5-11-1997 到 01-09-2-13 这样的日期范围内,这是最好的方法。

0 投票
2 回答
145 浏览

olap - 多维数据建模设计——数据仓库

我有

维度表

事实表

我的问题是,如果我想查找某个位置一个月的平均销售额,我应该在事实表中添加 average_sales 列吗?如果我想查找使用会员卡完成的销售额,我应该在事实表中添加相应的字段吗?

到目前为止,我的理解只是可数的措施应该是事实表,所以我猜 member_card 不应该出现在事实表中。

如果我错了,请告诉我。