AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 121739
Accepted
Mathieu Guindon
Mathieu Guindon
Asked: 2015-11-21 14:18:17 +0800 CST2015-11-21 14:18:17 +0800 CST 2015-11-21 14:18:17 +0800 CST

如何制作可为空的“父”层次结构级别?

  • 772

我正在使用 SSAS 设置我的第一个维度数据库,并且我有这个 [Materials] 维度需要一个像这样的层次结构:

[PriceCode    v] --> nullable
  Price Code
  ...
[Material     v]
  Code
  AltCode
  Name
  ...
[Id           v]  --> not actually exposed as a hierarchy level
  DateInserted
  DateUpdated
  DateDeleted
  EffectiveFrom
  EffectiveTo

问题是该[PriceCode]属性可以为空;DSV 在 a[Materials]和[PriceCodes]表之间有一个外键,并且[Materials].[PriceCodeId]可以为空。

有没有办法仍然定义可空属性是父级的层次结构?我摆弄过UnkownMember和UnknownMemberName以及属性键的NullProcessing设置,但无法获得要处理的维度。

如果有人可以通过基于业务键(即Code字段;自然键包括EffectiveTo字段,null用于记录的当前图像)创建层次结构来确认我是否正在正确处理缓慢变化的维度问题,则加分,并将 SCD 元数据视为其自身的一个级别。

sql-server ssas
  • 1 1 个回答
  • 518 Views

1 个回答

  • Voted
  1. Best Answer
    Tom V
    2015-11-22T08:14:09+08:002015-11-22T08:14:09+08:00

    您实际上在一个问题中有2个问题。如果您为属性创建一个新问题,它会更整洁,我将剪切/粘贴其中的一半作为答案:)

    可为空的父级别

    您可能不想NULL在 OLAP 维度中使用 s,而 Kimball似乎也同意。

    当我们无法在有效维度行中为维度属性提供值时,也应避免使用空值。维度属性的值可能不可用的原因有多种:

    Missing Value – The attribute was missing from the source data.
    Not Happened Yet – The attribute is not yet available due to source system timing issues.
    Domain Violation – Either we have a data quality issue, or we don’t understand all the business rules surrounding the attribute. The data provided by the source system is invalid for the column type or outside the list of valid domain values.
    Not Applicable – The attribute is not valid for the dimension row in question.
    

    这在某种程度上取决于您是否有ETL流程和数据仓库,或者您应该如何处理它们,但是有不同类型的“未找到”。

    想一想外键的区别,一个有一个空字段,另一个有一个字段已填充但无法(或不再)找到相关记录。我喜欢区分我BLANK的DATA ERROR维度。

    在您的示例中,您可以区分“无价格代码”和“我再也找不到的价格代码”

    如果你有一个ETL带有数据仓库的流程,你可以在你的ETL流程中轻松处理它,如果你没有,你将需要在你的 DSV 查询中使用一些 case 语句。

    这个问题似乎揭示了底层数据仓库的问题。星型和雪花模式都有支持和反对的论点,但我个人倾向于星型模式,必要时混入一些雪花模式。
    在任何情况下,数据清理和丢失的链接都需要在您到达 dsv 之前很久就在您的数据仓库中解决。

    缓慢变化的维度属性

    关于您Slowly Changing Dimension,我看不到维度中层次结构或键的数据类型会如何变化,因为维度不知何故是SCD,这根本不重要。您只需要 ETL 中某处的有效性规则,它会被您的 SSAS 维度定义选中(请参见此处)。但是对于dimension key您创建的任何内容,我建议您主要使用代理键,因为您的代理键可以是intorbigint而不是 varchar,这甚至可以大大提高属性键的性能。

    使用数字键列而不是字符串键列或复合键将提高包含许多成员的属性的性能。此最佳实践基于与在关系表中使用代理键以提高索引效率相同的概念。您可以将数字代理项列指定为键列,并仍然使用字符串列作为名称列,以便最终用户可以看到属性成员相同。作为准则,如果属性有超过一百万个成员,您应该考虑使用数字键。

    当然,数字键将表示“属性”,不一定包括有效性字段。记录的有效性是在维度表中的记录中指定的,但正如您所说,对于您的属性键来说不是必需的。

    例如,这可能是您的维度数据

    +---------------+-------+-----------+----------+
    | DIMENSION_KEY |  NAME |  NAME_KEY |  CURRENT |
    +---------------+-------+-----------+----------+
    | 1             | tom   | 1         | y        |
    | 2             | mat   | 2         | n        |
    | 3             | mat   | 2         | y        |
    +---------------+-------+-----------+----------+
    

    您可以在哪里选择 dimension_key 作为您的键,key attribute您可以选择 name 或 name_key 作为您的name属性的键。

    确定它是否值得麻烦name取决于您的属性将拥有多少成员(并且您的关键属性通常拥有大多数成员)。

    SCD最后,您拥有 a 的事实与您决定哪个键适合您的属性之间并没有任何关系。最终用户需求为您做出决定。在示例维度中,您希望按垫子的所有销售额报告在垫子下,并且当用户报告时,您的成员中没有 2 个垫子。

    • 3

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve