zoukankan      html  css  js  c++  java
  • BI之SSAS完整实战教程5 -- 详解多维数据集结构

    之前简单介绍过多维数据集(Cube)的结构。

    原来计划将Cube结构这部分内容打散,在实验中穿插讲解, 考虑到结构之间不同的部分都有联系,如果打散了将反而不好理解,还是直接一次性全部讲完。

    本篇我们将详解Cube结构, 介绍Cube结构的每个部分,让大家对Cube结构能有总体的把握。

    由于多维数据集的结构和MDX有很强的联系, 因此会有部分内容涉及到MDX,大家只要大概能看懂就行了,后续会有专门的MDX 专题。

    文章提纲

    • 概述
    • 度量值和度量值组
    • 维度
    • 总结

    概述

    SQL Server Analysis Services中的多维数据库包含一个或多个多维数据集。

    下面我们对多维数据集 (Cube) 的结构进行详解。

    前面文章讲过:

    Cube组成 = 一个或多个度量值组 + 一个或多个维度

    我们分别来讲述这两个部分。

    度量值和度量值组

    度量值主要指我们需要分析的,可以量化的数值类型的数据, 如销售额, 费用等。

    度量值组是由相关度量值组成的集合,每个度量值只能属于一个度量值组。

    度量值组主要用于导航目的,以提高可读性或更易于在客户端工具中使用。

    我们不会在MDX查询中直接使用度量值组来查询度量值,但是某些MDX函数中可以使用度量值组。

    维度

    维度就是我们的观察角度。

    例如:

    时间维度由年、季度、月、周和天构成

    地区维度下有国家、大区、省、市构成

    层次结构和层次结构级别

    维度具有一个或多个层次结构,并且每个层次结构包含一个或多个级别。

    如下图。

    成员

    每个层次结构都包含一个或多个项,这些项被称为成员,而每个成员对应于基础维度表中的一个或多个引用值实例。

    以日期维度为例,层次结构(例如 年-月)对应的成员

    Year -- 例如 CY2005, CY 2006

    Semester -- 例如 H1 CY 2005, H2 CY 2005

    Quarter -- 例如 Q1 CY 2005, Q2 CY 2005

    Month -- 例如 January 2005, February 2005

    下图是一个具体示例:

    维度 -- 层次结构(包含多个级别的) -- 具体成员 示意图

    MDX如何表示某个特定成员?

    在MDX中,某一层次结构的每个特定成员都通过唯一名称进行标识。

    可以通过包含维度名称、层次结构名称以及级别名称的名称路径(使用该成员的名称)来访问某一维度中的某个成员,也可以通过键路径(使用该成员的键)进行访问。

    例如,Calendar层次结构中的成员Q1 CY 2006可以表示为以下形式:

    [Date].[Calendar].[Calendar Quarter].[Q1 CY 2006]

    如果名称中包含空格、数字或者属于MDX的关键字,请使用方括号将该名称括起来。

    另外一种键路径的格式,路径中成员的键表示为&[成员名称]

    例如:

    [Date].[Calendar].[Calendar Quarter].&[2006]&[1]

    一般情况下,我们用第一种方式:

    格式:[维度名称].[层次结构名称].[级别名称].[成员名称]

    单元

    拿之前那个图来说明。如下图显示了一个多维数据集的3个面。

    其中,正面被划分成16个正方形,每个正方形都带有一个数字。

    假定每个正方形中的数字是度量值[Internet Sales Amount],如果查看该正方形所在的小立方体(也是个多维数据集)的其他面,其他面的值也是一样。

    这个较小的多维数据集被称为一个单元

    各个单元保存多维数据集中所有度量值对应的数据值。如果某个单元中未提供度量值的数据值,则表示对应的度量值为空。

    如要查询图中灰色背景的部分值,MDX查询需要唯一标识包含这个值的单元。该MDX查询如下:

    SELECT Measures.[Internet Sales Amount] ON COLUMNS

    FROM [Adventure Works]

    WHERE ([Date].[Calendar].[Calendar Quarter].&[2011]&[2],

        [Product].[Product Line].[Mountain],

        [Customer].[Country].[Australia])

    在该查询中可以看到, 是基于查询的WHERE子句中的特定条件(该条件可唯一的标识相应的单元)从Adventure Works多维数据集中选择Measures.[Internet Sales Amount]值。

    元组

    唯一标识多维数据集的一个单元或一部分的MDX表达式称为元组。

    元组通过每个维度中的一个成员表示,使用逗号进行分隔,并且用括号括起来。

    元组并不必须包含所有维度中的成员。下面是一些基于Adventure Works的元组示例。

    ([Customer].[Country].[Australia])

    ([Date].[Calendar].[2011].[H1 CY 2011].[Q1 CY 2011],

    [Customer].[Country].[Australia])

    ([Date].[Calendar].[2011].[H1 CY 2011].[Q1 CY 2011],

    [Product].[ProductLine].[Mountain], [Customer].[Country].[Australia])

    通过一个元组表示的一个多维数据集部分称为一个切片

    通过一个成员表示的元组称为简单元组,可以不使用括号。

    一组元组构成一种新的对象,称为

    这组元组是使用类型和数量上均完全相同的一组维度定义的。在MDX查询和表达式中经常会用到集。

    格式:

    {(Customer.Country.Australia), (Customer.Country.Canada)}

    集可以为空 {}

    集可以包含重复的元组

    如果查询中仅指定了一个元组,那么可以不用花括号,查询时会隐式转换成集。

    一般情况下,我们建议在编写MDX查询时尽量使用括号和花括号,因为这样可以确保MDX查询中指定的元组和集正确无误。

    总结

    本篇需要理解掌握Cube的各个部分,与Cube结构相关的名词主要有:

    量值,量值组,维度,层次结构,层次结构级别,成员,单元,元组,集

    相关的名词我都用粗体标出,所有都必须掌握。

    大家理解时可以找出其中的联系,通过联系来帮助理解,总结如下:

    Cube由量值组和维度组成。

    量值组成量值组。

    维度具有层次结构,层次结构包含一个或多个级别。

    每个层次结构包括一个或多个项(成员)。

    标识Cube的一个单元或一部分的MDX表达式称为元组。

    多个元组组成集。

    这些概念都很重要,全是重点,每个都要掌握。

    欢迎大家多多评论与支持。

    祝学习进步,谢谢:)

    相关文章列表:

    首发博客园 by MiroYuan,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    fdfs上传图片成功在浏览器中访问不到404 Not Found
    G1 GC日志:Application time: 0.8766273 seconds
    nginx编译问题:make[1]: *** [/usr/local/pcre//Makefile] Error 127
    Datatable报错Uncaught TypeError: Cannot read property 'cell' of undefined
    信息: Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level
    [HDU1176]免费馅饼(DP)
    [程序员代码面试指南]二叉树问题-找到二叉树中的最大搜索二叉树(树形dp)
    [程序员代码面试指南]二叉树问题-在二叉树中找到累加和为指定值的最长路径长度
    [程序员代码面试指南]数组和矩阵-求最短通路值(BFS)
    [程序员代码面试指南]9-判断点在三角形内
  • 原文地址:https://www.cnblogs.com/miro/p/5863471.html
Copyright © 2011-2022 走看看