ssas - 更改事实表粒度的最佳方法?
问题描述
我们有一个多年前创建的立方体,我们要求更改纹理。为了简化我的场景,事实包含日期(每日)、市场(拉丁美洲、北美等)的维度和访问次数的度量。
有一个包含国家和州的新请求。这就是我的想法:
- 添加一个新的地理暗淡国家,州(也许邮政编码未来证明?)
- 更新未知的历史记录(同时我们正在更新历史数据)
- 更新 ETL 中的逻辑以通过国家/地区加载
我应该考虑其他任何事情或陷阱吗?
解决方案
如果所有报告都来自多维数据集,而事实表只是为了支持我会主张添加一个新的事实表并将它们在下游拼接在一起。该方法取决于您的要求。
您所在的国家和地区与驱动市场的事实数据的相同属性相关联。
在这种情况下,建模的自然方法是将额外的粒度添加到市场的现有维度。您可以通过几个步骤完成此操作:如果有记忆的话,就像这样:
您的市场数据应作为视图呈现给多维数据集。如果不是创建一个并在 DSV 中用“另一个表”替换该表并将其指向新视图。增强此视图,以便它提供您的组合地理信息 - 每个州/国家/市场的一行。
确保有记录可以让我们将旧的事实联系起来。论文的市场价值也将体现为国家和国家的价值。(也就是说,将您参差不齐的层次结构级联到键值)。
为您的旧 + 新谷物事实数据创建一个行源。我认为这些将来自不同的来源。这可以是两者的联合所有视图,旧的 [Market] 反映为旧的事实数据的 [State]。或者,您可以查看在您的多维数据集中将它们实现为单独分区的每个视图。
将关键属性层次结构的名称从 [Market] 更改为 [State](假设 State-->Country and State --> Market)。
将其键/名称从市场的键/名称字段更改为 [State] 的键/名称添加 Country 的属性层次结构和 Market 的新属性层次结构,再次确保它与以前相同,以避免破坏旧报告。
在 County 和 Market 之间添加属性关系(仅当它是所有事实记录的严格父级时)
在多维数据集设计器的度量组/维度使用窗格中,删除并重新添加事实和维度之间的直接关系。
这旨在让您最平滑地适应针对旧数据编写的任何 MDX。您的维度将保留其可能看起来已过时的名称。如果您准备打破从多维数据集消耗的旧报告,您当然可以重新设计事物以赋予维度一个新名称。
您所在的国家和州与该属性无关,并且(例如)数据可能出现在 LATAM 市场和美国国家/地区。
然后你只需要添加一个更容易的新维度。
创建一个行集来构建新维度,并确保它具有 Country = "UNKNON" 和 State = "UNKNOWN" 的行。始终最好使用整数作为关键维度,假设我们给这个记录 [GeoId]=0。
使用新维度的键将新粒度数据提供给多维数据集。您的旧事实数据应作为视图呈现给多维数据集,并且该视图可以为所有记录上的新列 [GeoId] 提供文字值 0。
将所有这些结合在一起或将它们服务于度量组的单独分区。
将关系添加到度量组/维度使用中的新维度。
对于您的多维数据集数据中的几乎所有消费者来说,这是一个非破坏性的更改。
推荐阅读
- python - 弃用受支持的 Python 版本时,我应该碰撞 SemVer 的哪个部分?
- awk - 根据 Google Cloud Storage 中文件名中的日期查找最旧的文件
- mongodb - 如何恢复 mongodb 并替换现有文件?
- jquery - add body {username:"bb",password"xx"} in request HTTP in $.ajax{()}
- django-rest-framework - Django REST Framework: does source kwarg work in SerializerMethodField?
- php - Modifying public disk url - Laravel 5.8
- python - Selenium crashing when running headless chromedriver on my raspberry pi
- matplotlib - 在 matplotlib 中将无序点绘制为轮廓
- cmake - 为已安装的包正确设置导入的 cmake 目标的位置
- c# - 使用未定义的数据类型初始化 WPF