经过多年的关系数据库开发,我目前正在学习OLAP和MDX.
关于MDX入门的任何提示?学习MDX的最佳书籍和资源是什么?
我正在使用Analysis Services,在设计维度时,我无法确定构建自然层次结构还有多远.
我的意思是我添加了所有真正的属性关系.因此,大多数层次结构都是自然的,但最常请求的层次结构是3个或更多级别,中间级别是缓慢变化的属性.
该方案是跟踪工作.该工作有许多属性都是静态的,但债务人属性(即谁支付发票)可以在工作过程中发生变化.所以层次结构看起来像这样
- Manager -> Debtor -> Job Name
- Director -> Debtor -> Job Name
- Office -> Debtor -> Job Name
- Office -> Manager -> Debtor -> Job Name
Run Code Online (Sandbox Code Playgroud)
因此,在维度内,有许多层次结构以作业的静态属性开始,后面是债务人(缓慢变化),底部是作业名称(维度键).
因此,我们目前所做的"自然化"这些层次结构的是为每个债务人创建"假"属性,这些属性出现在层次结构中,该层次结构是其上方的属性的组合.例如,对于上面的第一个示例,Debtor级别属性将具有Manager和Debtor id的密钥.对于最后一个示例,Manager级别将具有Manager和Office的密钥,而Debtor级别属性将具有Office,Manager和Debtor的密钥.然后,我们隐藏所有这些属性,以便它们仅用于层次结构中.
因此,这使我们的维度变得更加复杂,但我们确实在查询中获得了额外性能的好处.这通常是一个显着的进步.除了复杂性之外,我们经常遇到问题,因为我们现在有多个版本的"债务人",而属性的关键不是债务人的身份.因此,如果我们想要更改某些级别的行为,这会影响钻取和报告操作以及使某些类型的计算更加困难.
我们使用的客户端是Reporting Services,Excel和Office Web Components.
有人告诉我,在SQL 2005的早期版本中,涉及非自然层次结构的复杂查询可能会导致服务器完全绑定,这是我们为避免不自然的层次结构而付出很大努力的另一个原因.
此外,感叹号设计警告在Visual Studio中如此引人注目,以至于拥有不自然的层次结构似乎是一件非常糟糕的事情.
在这些情况下,其他设计师会做些什么?你要走多远才能避免不自然的等级制度?