问题标签 [dimensional-modeling]
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.
ssas - 如何建模和定义可以在 ssas 多维数据集中的维度具有多个值的事实
我遇到了一个问题,我的销售可能是多个促销活动的一部分。我正在尝试使用一个销售事实表,该表将在多个促销中包含多行销售。因此,多维数据集只能准确地用于汇总促销中的销售额,而不是跨促销。
例如,以下是可能出现在事实表中的几行:
这是一项为公司带来 10 美元收入的销售,但它是两个不同促销活动的一部分。我想让用户能够将促销 1 的销售额和促销 2 的销售额相加,但不能同时计算所有促销(这表明总销售额为 20 美元)。
我认为这应该可以在 SSAS 中完成,但我不知道该怎么做。理想情况下,将定义多维数据集,以便用户只能将其与促销维度(以及所需的其他维度)结合使用,但我会满足于定义事实,以便它们不能跨促销求和。
谢谢,--sw
database - 我应该跟踪关系/事务数据库中缓慢变化的维度吗?
让我们以人力资源数据库为例。人力资源人员日常使用的事务数据库处理每天发生的所有招聘和解雇。还有一个从该事务数据库中提取的维度数据仓库。
假设延迟足够低,以下哪个论点将被视为“最佳实践”?
1)事务数据库应该只需要跟踪该数据当前的状态。它不应该跟踪缓慢变化的数据(例如,特定员工曾担任过哪些经理的历史,他的薪水如何随着时间的推移而变化,等等)。ETL 过程应该检测过渡数据库中的变化,并更新数据仓库中缓慢变化的维度。
2)事务数据库不仅能够跟踪它自己的历史信息。如果某些东西在 ETL 会话之间发生了两次更改,那么您将永远失去第一次更改。Dimensional 数据库的主要目的是提高报表中的查询性能,因此它仍在发挥作用。这也使 ETL 过程更快、更简单。
我觉得这两个论点都有优点,如果它们都是有效的论点,我很乐意在它们之间进行选择。
我错过了一些没有被考虑的东西吗?
其中一个论点是完全错误的吗?
relational-database - 为什么我们使用维度模型而不是非规范化关系模型?
我对一些问题感到困惑。我需要他们的答案。如果我们的关系模型也是去规范化的,那么为什么我们更喜欢维度模型?我们更喜欢维度模型而不是关系模型的原因是什么?您的历史数据也可以存储在 OLTP 中,您可以轻松地在任何 OLTP 上执行报告,那么为什么我们使用维度模型和数据仓库?维度和非规范化表有什么区别?
提前致谢
ssas - 人口稀少的百分比值的“平均”聚合
我有当前已完全填充的成本中心分配数据,每天一条记录,每条记录都有一个成本中心维度键。多维数据集有一个人头计数度量(数据设置为“1”),聚合函数设置为“LastChild”。这意味着在任何给定时间段内,人头统计报告只会在成本中心统计一次人员。
引入部分分配 - 一个新的衡量标准将具有分配的百分比值,允许多个并发成本中心,其中分配的总和应达到 100%(“天”是粒度级别)。我试图弄清楚如何在其他时间段内配置聚合。我认为“平均”应该可以正常工作,即在一半时间段内以 50% 分配到成本中心的人将在该期间报告为 25%。我看到的问题是,在分配给成本中心的日期为 0% 的日子里,我的事实没有填充。为了显示:
上述按月报告的数据显示,分配给 CostCenterB 的比例为 50%,即使此人只分配了一天,每月的平均百分比应为 1.6%。
我想我可以在数据中生成 0% 的分配,但我的事实表会因此爆炸,所以我宁愿改变“平均”聚合如何处理人口稀少的事实中的百分比值,即平均值应该根据报告期间的细化单元数(一个月中的天数,在本例中为 0.5/31)而不是事实表中的行数(0.5/1)来计算。这可以在 SSAS 中完成吗?
ssas - 过滤 MDX 层次结构,但仍显示休假总数 - 层次结构参差不齐?
以下查询
产生以下结果:
我的问题是,由于我正在过滤 [Dim User].[UserTypeHierarchy],因此显示的度量值仅属于具有 [Commercial Partner].&[Agent] 类型的度量值。我希望即使我正在显示用户树,正在显示的数字也显示了所有度量,就好像它像后代([Hierarchy],0,self_and_after)。
我如何实现这一目标?我已经尝试使用计算成员,但显示的数字并未聚合 [Dim User].[UserTypeHierarchy] 层次结构下所有用户类型的后代。
为了更好地解释我自己,下图没有用户类型过滤器:
所以我想要的结果是第一张图片,我只显示用户类型的商业合作伙伴的用户,但是第二张图片的数字,例如
513 将显示所有数字聚合后代
100310 将显示在第三层聚合他下的所有用户的所有数字
就这样第四个。
database-design - 交叉引用表...维度还是事实?
初学者维度建模问题:
您如何在正式的“业务流程”之外对维度之间的关系进行建模?例如,假设您正在为梦幻棒球联盟建模。一些明显的维度是团队和球员,一个示例事实是球员击球的结果。我感到困惑的是如何简单地跟踪哪些球员在哪支球队。
在第三范式中,我将有一个包含团队和球员 FK 的交叉引用表,以及专门与两者组合相关的任何附加字段(招募日期、替补球员指标等)。这与星型模式有什么不同吗?如果不是,那么该表是否被视为事实表,没有数字属性?
让我感到困惑的是,这个交叉引用表本身并没有多大用处。只有在加入其他事实表时才有意义,以获取与另一个事实/流程相关联的团队中的球员列表。这使它感觉更像是一个维度而不是事实。
sql-server - 缓慢变化的维度与事实
我是DW的菜鸟。我有一个 Customer 表,其中包含很少更改的基本列,例如 Name、JoinedOn 等。还有另一组可以随时间变化的列,例如“Status”、“CustomerType”、“PublishStatus”、“BusinessStatus”、“CurrentOwner”等。在没有历史的那一刻。在 DW 中,我想跟踪以下列何时更改“Status”、“CustomerType”、“PublishStatus”、“BusinessStatus”、“CurrentOwner”。我觉得如果我创建另一个表来跟踪这些会更好,该表将具有以下列:
“CustomerId”、“Status”、“CustomerType”、“PublishStatus”、“BusinessStatus”、“CurrentOwner”、“ExpiredOn”、“IsCurrent”
这是正确的方法吗?如果是,那么这个新表是一个事实还是一个缓慢变化的维度?我想运行查询,例如 CustomerType 何时从 A 更改为 B?什么时候出版的?当 BusinessStatus 更改时,谁是所有者?
join - 什么是数据库 n 路连接?
什么是数据库 n 路连接?
搜索了很多,但找不到定义或示例。
将此发布在 SO vs dba.stackexchange 上,因为它更像是一个数据库开发问题,而不是数据库管理问题。
资料来源:Ralph Kimball 的数据仓库工具包,第 16 页。
business-intelligence - 事实表事件使用什么维度”
我想建立一个包含事件信息的事实表。我建议的尺寸:
但我不明白的是,数据集市应该保存有关事件的信息,而且我在一些 DWH 设计中注意到事件也被用作维度。我告诉自己,如果事实表上的所有信息都已经在“事件”维度上,那么其他维度(即位置维度、时间维度)会有什么好处?计算的措施是“事故成本”(每月)和事故数量(每月)
database - 在 Qlikview 中处理多个事实表
我有一个 PostgreSQL 数据库,其中包含各种教育数据,例如学校级别的考试成绩和入学人数。我需要将入学与考试成绩分开,因为数据来自不同的谷物。尽管注册与考试分数数据的粒度不同,但许多维度是相同的。例如,我有:
这种结构在后端很好,但在 Qlikview 中,这会创建一个合成密钥。合成密钥的解决方案似乎通常是通过 Qlikview 脚本将其替换为链接表,这也是我的方法。但这似乎无法扩展,因为当我添加包含更多相同维度的第三个事实表(在另一个粒度上)时,如果我创建另一个链接表,现在我的两个链接表开始关联,因为它们包含几个常见的命名字段,而 Qlikview 的回应是创建更多合成键?
我对 Qlikview 比较陌生,我自己工作。通常如何处理具有相同尺寸的不同颗粒的多个事实?
编辑:
我已经为这个问题提供了我的解决方案,这个问题已经在生产环境中工作了不到一年!请看下面我的回答...