Cube 概念

在SSAS(SQL Server Analysis Services)中构建Cube和编写MDX的时候,我们很容易被一些名词弄糊涂,比如:Dimension(维度),Measures Dimension(度量维度),Measure(度量),Hierarchy(层次结构),Attribute hierarchy(属性层次结构),Level(级别),Cell(单元),Member(成员),Member Property(成员属性),Set(集),Turple(元组)等等。要想弄清楚这些名词,就必须理解Cube的结构。

上述名词的解释详见:http://msdn2.microsoft.com/en-us/library/ms144884.aspx

Cube、Dimension和Measure
Cube就象一个坐标系,每一个Dimension代表一个坐标轴,要想得到一个点,就必须在每一个坐标轴上取的一个值,而这个点就是Cube中的Cell。见下图(来源于http://msdn2.microsoft.com/zh-cn/library/ms144884.aspx):
 

上图很好的说明了Cube、Dimension、Measure之间的关系。这里需要注意的是:其实Measure也属于一个维度,即Measures Dimension。所有的Measure构成了Measures Dimension,这个维度的只有一个Hierarchy,而且这个Hierarchy只有一个层次(Level)。

Hierarchy、Level和Memeber
在上节的图中,每个Dimension只有一个Hierarchy,而在实际的环境中,一个Dimension往往有很多Hierarchy。因此,上一小节中关于“Cube就象一个坐标系,每一个Dimension代表一个坐标轴”这句话其实不够准确,准确的说应该是每一个Hierarchy代表了一个坐标轴,而Hierarchy中每一个Member代表了坐标轴上的一个值。下图以时间维度为例展示了Dimension的内部结构。


此外,我们需要说明的是:

1) 上图中说明的是一般Dimension的结构,在实际的模型中,其实可以做很多自定义的工作。比如:我们可以修改Hierarchy的默认Member。 

2) 一般情况下,SSAS中Hierarchy的默认Member是All(在你的模型中,可能叫其他名称)。换句话说在MDX中[时间].[财政]等价于[时间].[财政].[All][时间].[财政].Children等价于[时间].[财政].[All].Children

3) Dimension_Name.Hierarchy_Name.Level_Name等价于Dimension_Name.Hierarchy_Name.Level_Name.Members。比如:[时间].[财政].[半年]等价于[时间].[财政].[半年].Members。Level的Members是该级别的所有元素(对于[时间].[财政].[半年].Members={[上半年],[下半年],[上半年],[下半年]},其中前两个是2001年下的,后两个属于2002年),而Hierarchy的Members包含了该Hierarchy下所有的内容。

4) 当且仅当一个Dimension下只有一个Hierarchy,则Dimension_Name等价于Dimension_Name.Hierarchy_Name纬度。比方说:时间维度只有一个财务Hierarchy,则[时间]等价[时间].[财务]

5) Attribute Hierarchy中Members的层次是两层(MSDN的说法更加准确,这里简化了一些):第一层:All,第二层:叶子节点。也就是说它和多层的Hierarchy相比,两者结构完全相同,这是统一维度模型(Unified Dimensional Model)一个方面的体现。 

      注意:采用Attribute Hierarchy能够使编写MDX更加容易,但同时也增加了Cube的容量,加大了Cells的个数,对性能有负面影响。因此,在建模的时候,我们可以把一些Attribute Hierarchy的AttributeHierarchyEnabled属性设置成False,同时在编写MDX时,以Member Property的方式来引用,这样可以在满足需求的前提下提高性能。

6) Measures Dimension是一个特殊的维度,它的Members中没有All这个成员,它的默认Member可以在建模时指定。

7)对于一般的维度,其第一层Level的默认是“(All)”。

Turple和Set
如果说Cube好像一个坐标系,那么Turple、Set的关系就好比点和面的关系。Turple由Cube中每个Hierarchy的一个Member组成。由于Hierarchy的个数非常多,所以一般不可能在Turple表达式中把所有的Member都明确指定,故此,为了简化开发,所有没有明确指定Member的Hierarchy,用该Hierarchy的默认Member代替。也就是说:([时间].[财政].[2001].[上半年]) 等价于([时间].[财政].[2001].[上半年],[时间].[日历].[All])。另外我们需要注意的:

1) 有的说法认为:Turple是“Cube 上的一个子集(不断开的子Cube),这个看法是不准确的,因为Turple只是一个点,不是面,它仅仅由每个Hierarchy的一个Member组成的。

2) 外面()起来的表达式不一定是Turple。比如:([时间].[财政].[半年].Members,[时间].[日历].[2001].[上半年])就不是一个Turple,而是一个Set,其原因在于,Turple是点,它仅仅由每个Hierarchy的一个Member组成,如果在任何一个Hierarchy上有两个成员,则其就变成Set了。

      注意:([时间].[财政].[半年].Members,[时间].[日历].[2001].[上半年])等价于Crossjoin([时间].[财政].[半年].Members,[时间].[日历].[2001].[上半年]){[时间].[财政].[半年].Members}*{[时间].[日历].[2001].[上半年]},在SSAS的MDX中,我们可以在()中定义多个用逗号分隔开的表达式,编译器会进行分析,如果发现是Set的话,就把它转化成多个Set相乘的形式。

3) Set中的Turple可以重复。比如:{[时间].[日历].[2001].[上半年],[时间].[日历].[2001].[上半年]}并不等于{[时间].[日历].[2001].[上半年]},因为前者有两个Turple,后者只有一个。

4) SSAS能够根据上下文的需要,自动把Turple变成Set,单个Member变成Turple,多个Member变成Set。这也是我们常常混淆Turple和Set的原因。详细的例子如下:

a)上下文需要Set时,([时间].[日历].[2001].[上半年])自动转化成{[时间].[日历].[2001].[上半年]}。 
b)上下文需要Turple时,[时间].[日历].[2001].[上半年]自动转化成([时间].[日历].[2001].[上半年])
c)上下文需要Set时,[时间].[日历].[2001].Children自动转化成{[时间].[日历].[2001].Children}

总结
总体来看,SSAS中的Cube的内部结构非常的清晰,在实际开发中,只要多注意一下默认的一些转化,使用起来是很容易的。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Cube FreeRTOS教程是一种学习如何使用Cube MX和FreeRTOS操作系统的教程。Cube MX是一个开发工具,它可用于生成和配置代码和硬件设置,而FreeRTOS则是一种常用的实时操作系统,用于处理并发处理。这个教程旨在帮助学生和开发人员从起始点开始编程,其中介绍了使用FreeRTOS进行任务管理、信号量处理、同步处理和中断处理等。教程中也介绍了一些常用的调试工具和技术,以帮助开发人员诊断和修复潜在的问题。 该教程不仅适用于初学者,对于已有编程经验的开发人员,也可用作回顾和增加对嵌入式操作系统的理解。教程的另一个优势在于提供了多种示例和测试用例,以帮助开发人员在阅读理论并掌握概念的同时进行实际实现,并且可以自由地在不同的硬件和代码组合之间进行选择。 总之,Cube FreeRTOS教程是一场实践和理性相结合的学习体验,它将为那些希望掌握实时操作系统,优化资源使用,改善程序性能以及开发更安全,更可靠,更高效的嵌入式系统的学生和开发人员提供帮助。 ### 回答2: Cube FreeRTOS教程是一种学习如何使用CubeMX和FreeRTOS(一个实时操作系统)进行嵌入式开发的指南。这个教程不仅适用于初学者,同时也适用于已经有一定经验的开发者。 该教程包括了一个详细的说明、代码示例、图表和步骤,用来帮助用户理解实时操作系统的概念和实现方法。该教程展示了如何利用FreeRTOS的多任务、时间片和IPC(进程间通信)特性来构建实时应用程序。 在该教程中,用户将学习如何使用STM32CubeMX来创建基本的FreeRTOS应用程序,并能够掌握软件架构的不同方面,如任务、消息队列和互斥。 此外,该教程还介绍了如何使用FreeRTOS自带的工具和技术来调试代码,以及如何利用STM32CubeIDE和STM32CubeProg等工具完成软件编译、烧录和调试的任务。总之,该教程为初学者提供了一个学习实时操作系统和嵌入式开发的绝佳机会。 ### 回答3: Cube FreeRTOS教程介绍了如何在STM32CubeIDE开发平台上使用FreeRTOS实时操作系统进行STM32微控制器的开发。教程涵盖了从项目的创建和配置,到任务、信号量、消息队列等基本概念的介绍,再到实例程序的编写和调试。该教程向初学者介绍了如何使用FreeRTOS的API函数进行多任务调度、内存管理、时间管理、中断处理等操作,帮助开发者更好地理解和利用FreeRTOS实时操作系统。 教程的主要章节包括:项目创建和配置、任务创建和管理、信号量和二值信号量、消息队列和计时器等基本概念的介绍,以及应用实例程序的编写和调试。每个章节都提供了代码示例和详细的说明,方便读者理解和模仿。 总的来说,该教程是一份较为全面的FreeRTOS学习指南,适合初学者和稍有经验的开发者学习和实践。通过学习和掌握该教程,开发者可以更好地利用FreeRTOS实现复杂的多任务应用程序,并提高STM32微控制器的开发效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值