MDX用户指南Word文档格式.docx
- 文档编号:17589708
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:54
- 大小:97.42KB
MDX用户指南Word文档格式.docx
《MDX用户指南Word文档格式.docx》由会员分享,可在线阅读,更多相关《MDX用户指南Word文档格式.docx(54页珍藏版)》请在冰豆网上搜索。
度量(Measures):
度量表示用来聚合分析的数字信息,如数量,销售金额等.
重要:
度量的集合组成了一个特殊的维度,叫做”Measures”.
一个维度可以包含级别的层级结构,级别(Level)表示特定的分类.比如,地区维度可以包含级别层级:
Country、State、City。
每个级别比它的父级别在数据粒度上更加细粒度。
又比如:
一个时间维可能包含级别:
年、季、月。
成员,是最重要的概念之一。
一个成员是维度(包括度量维Measures)上的一个项目值,时间维度上“年”级别的成员可能有2000、2001,月成员有1、2、3等等。
计算成员是一种运行时通过特殊表达式动态计算的成员。
计算成员可以定义为度量。
计算成员不影响现有的cube数据,它基于cube数据,通过各种数学表达式和各种函数定义,可以创建复杂的表达式。
任何动态分析功能,都可以通过计算成员实现,比如实现占比、同期比等等。
2.2示例Cube数据库
示例OLAP数据库结构(FoodMartSalesCube,来自MicrosoftOLAPServices)。
维度
维度名
级别
描述
Customers
Country
State
City
Name
顾客的地理分布层级
EducationLevel
EdicationLevel
顾客教育水平,一个级别,扁平结构
Gender
顾客性别
MaritalStatus
顾客婚姻状况
Product
ProductFamily
ProductDepartment
ProductCategory
ProductSubCategory
Brandname
ProductName
产品维,6个级别
PromotionMedia
MediaType
促销媒体
Store
StoreCountry
StoreSate
StoreCity
StoeName
商店的地理分布层级
StoeSizeinSQFT
StoreSquareFeet
商店面积
StoreType
商店类型
Time
Years
Quarters
Months
时间维
YearlyIncome
顾客年收入
度量
度量名
UnitSales
Numberofunitssold
StoreCost
Costofgoodssold
StoreSales
Valueofsalestransactions
SalesCount
Numberofsalestransactions
StoreSalesNet
Valueofsalestransactionslesscostofgoodssold
SalesAverage
Storesales/salescount
2.3表达式表示法
维度、级别、成员等,一般用唯一名称UniqueName来标示,可以用[]包围name,如果name有空格或者以数字开头,必须使用[],否则可以忽略。
UniqueName是根据层级结构表示的一种方法。
即递归显示出祖先的名称。
维度(Dimension):
维度直接用[]包围。
Product的唯一名称为[Product]或Product,维度EducationLevel的唯一名称为[EducationLevel]。
度量维为[Measures]。
级别(Level):
级别的UniqueName为[维度名称].[级别名称],如[Product].[ProductFamily],同样,如果没有空格,[]可以省略,如Product.[ProductFamily]。
成员(Member):
成员的UniqueName格式为[维度].(ParentMemberUniqueName).[MemberName],如上面时间维上的2003年2月份的UniqueName为[Time].[1].[2],中间的1为1季度,因为该维度的结构为年、季、月。
度量(Measure):
度量实际上是属于度量维的成员。
如度量UnitSales的UniqueName为[Measures].[UnitSales]。
UniqueName是OLAP元素内部的表示法,在MDX查询语言中,可以使用UniqueName来表示元素。
同时,MDX还提供模糊和其它等价的元素标示方式。
表现在:
1)省略维度名标示级别,如果一个维度的级别名称在整个Cube中是唯一的,那么可以省略维度名来查询级别。
如Product.[ProductFamily]可以写成[ProductFamily]。
2)省略维度名标示成员,如果省略维度名,可以标示该维度最高级别的成员,如[Time].[2000]可以写成[2000],[Measures].[UnitSales]可以写成[UnitSales].
3)成员挂在级别下,即成员不一定要写成[维度].(ParentMemberUniqueName).[MemberName],可以写成[维度].[级别].[MemberName].如2000年3月可以写成[Time].[Months].[3]
模糊查询表示法,都基于不会重复的假设,如果有重复的元素,取第一个查找到的元素作为查询结果,可能发生错误.因此,建议使用完备的表示法.
2.4元组、集合
元组用于定义来自多维数据集的数据切片;
它由来自一个或多个维度的单个成员的有序集合组成。
元组内不能包含来自同一个维度的多个成员.元组用()包围.如:
(时间.[下半年])
(时间.[下半年],[产品].[手机].[Nokia])
如果一个元组是由单个维度的成员组成,那么可以不用()包围,即(时间.[下半年])可表示成:
时间.[下半年].
集合是零个、一个或多个元组的有序集合。
集合最常用于在MDX查询中定义轴维度和切片器维度,并且同样可能只具有单个元组或可能在某些情况下为空。
在MDX语法中,元组用花括号括起来以构造集合,下面的示例显示具有两个元组的集合:
{(时间.[上半年],路线.非陆地.航空),(时间.[下半年],路线.非陆地.海路)}
一个集合可包含同一个元组不止一次的出现。
下面的集合是可接受的:
{时间.[下半年],时间.[下半年]}
集合指以元组表示的一组成员组合,或指集合中的元组所代表的单元中的值,视集合使用的上下文而定。
注意,单个元组的集合不等于元组。
如{时间.[下半年]}不等于时间.[下半年].
在MDX语法中,很多函数语义中包含元组和集合,作为参数或者返回值。
3.MDX查询与语义
3.1MDX基本查询
先看看MDX基本语法结构:
基本的MDXSELECT语句包含一个SELECT子句和一个FROM子句,以及一个可选的WHERE子句。
[axisspecificatioin]可以看成是轴的成员选择。
[slicerspecification]表示切片上的成员,可以看成过滤信息,[slicerspecification]可选,如果没有指定,取系统默认的维度成员作为切片。
该查询语句返回一个二维表格数据,可以显示为交叉表形式。
这里Measures表示度量维,[Store]表示Store维,[]可选,如果维度名称有空格,则需要用[]包围。
Members函数施加在维度上返回该维度的所有成员。
该查询显示所有商店的度量值。
二维表格如下:
深圳分店
200000.00
50000
上海分店
300000.00
60000
3.2轴维度和切片器维度
当设计多维表达式(MDX)查询时,应用程序一般查看多维数据集并将维度集合划分为两个子集:
∙轴维度,为多个成员检索数据的维度。
∙切片器维度,为单个成员检索数据的维度。
因为轴维度和切片器维度都可从要查询的多维数据集的多个维度构造,所以用这些术语将要查询的多维数据集使用的维度与在由MDX查询返回的多维数据集中创建的维度区分开。
例如,假定存在名为TestCube的多维数据集,具有两个名为Route和Time的简单维度。
因为多维数据集的度量值是Measures维度的一部分,所以该多维数据集总共有三个维度。
查询要提供一个矩阵,可以在该矩阵内跨路线和时间比较Packages度量值。
在下面的MDX查询示例中,Route和Time维度用作轴维度,Measures维度用作切片器维度。
Members函数表明要用于构造集合的维度或级别的成员,而不必在MDX查询中显式声明给定维度或级别的各个成员。
SELECT
{Route.nonground.Members}ONCOLUMNS,
{Time.[1sthalf].Members}ONROWS
FROMTestCube
WHERE([Measures].[Packages])
得到的值表格类似于下表,表中在COLUMNS和ROWS轴维度的各个交集显示Packages度量值的值。
air
sea
1stquarter
60
50
2ndquarter
45
MDX首先评估轴维度和切片器维度,并在从要查询的多维数据集检索信息之前生成结果多维数据集的结构。
指定轴维度的内容
轴维度决定多维结果集的边缘。
多维表达式(MDX)使用SELECT子句通过将集合指派到特定轴来指定轴维度。
以下信息描述在MDX中怎样处理这种指派。
在下面的语法示例中,每个<
axis_specification>
值定义一个轴维度。
数据集中轴的个数等于多维表达式(MDX)查询中<
值的个数。
MDX查询最多可以支持128个指定轴,但几乎没有MDX查询会用到5个以上的轴。
<
语法可分解为:
:
:
=<
set>
ON<
axis_name>
=COLUMNS|ROWS
轴维度上的只能接受集合<
,如果是手工指定成员集合,必须用{}包围,如果使用MDX集合函数,则不需要用{}包围,因为集合函数返回值为集合。
一个轴维度上可以包含几个维度,如:
SELECT{[Measures].[Sales_Dollars],[Measures].[Sales_Units],[Measures].[Sales_Units_max]}ONcolumns,CrossJoin({[State].[Canada],[State].[Mexico],[State].[USA]},{[Product].[Bread],[Product].[Dairy],[Product].[Meat]})ONrowsFROMsalesWHERE([Time].[AllTime],[Employee].[AllEmployee])
Columns轴上是手工指定的成员元组集合,用{}包围,Rows轴使用集合函数CrossJoin,该函数返回两个集合的交集,Rows轴上包含两个维度State和Product。
指定切片器维度的内容
切片器维度筛选多维数据。
可以通过将切片器维度包含在多维表达式(MDX)查询的WHERE子句来限制所返回的数据。
假定未显式指派给轴的维度是切片器维度,并用其默认成员进行筛选。
则默认成员为最高级别的第一个成员。
切片器维度还可通过使用MDX语法的WHERE子句进行显式指定。
WHERE子句的语法可分解为:
[WHERE[<
slicer_specification>
]]
切片器维度只可接受评估为单个元组的表达式。
如下例所示:
WHERE([Time].[1sthalf],[Route].[nonground])
3.3高级查询-使用计算成员
基本MDX查询提供了对多维数据的简单查询,MDX查询还提供了更为丰富强大的多维查询工具。
计算成员允许在查询表达式中定义公式,并将该公式当成一个新的成员,挂在某个维度下。
它并非通过检索数据来解析,而是通过计算MDX表达式来返回值。
在MDX查询中构造和使用计算成员的能力为多维数据提供了大量操作功能。
多数分析功能都可以通过计算成员来实现。
MDX通过With语句来创建计算成员,下面的语法用于将WITH关键字添加到MDXSELECT语句:
[WITH<
formula_specification>
]
[,<
SELECT[<
...]]
FROM[<
cube_specification>
计算成员的<
值在以下语法定义中进一步分解:
=MEMBER<
member_name>
AS'
value_expression>
'
[,Format_String=<
unsignedstring>
[,<
cell_property>
=<
...]
值是计算成员的完全合法名称,其中包括了该计算成员所关联的维度或级别,而<
值在经过计算后,将返回计算成员的值。
通过在Format_String中指定计算成员的格式化串,跟Cube定义中的Measure定义的formatString一样,采用java.text.DecimalFormater中的格式化语法。
例如,下面的MDX查询示例定义了两个计算成员。
第一个计算成员[Measures].[StoreType]用于表示StoreType成员属性。
第二个计算成员[Measures].[ProfitPct]用于计算给定商店的总利润率,并将其表示为格式化的百分比值。
WITH
MEMBER[Measures].[StoreType]AS
'
[Store].CurrentMember.Properties("
StoreType"
)'
SOLVE_ORDER=2
MEMBER[Measures].[ProfitPct]AS
(Measures.[StoreSales]-Measures.[StoreCost])/Measures.[StoreSales]),
FORMAT_STRING='
#.00%'
{[Store].[StoreName].Members}ONCOLUMNS,
{[Measures].[StoreSales],[Measures].[StoreCost],[Measures].[StoreType],
[Measures].[ProfitPct]}ONROWS
FROMSales
计算成员可在层次结构的任意位置创建。
例如,下列MDX查询示例定义作为[BeerandWine]成员的子成员创建的计算成员,以确定给定商店的啤酒和果酒(BeerandWine)的单位销售额是否至少为100.00:
WITH
MEMBER[Product].[BeerandWine].[BigSeller]AS
IIf([Product].[BeerandWine]>
100,"
Yes"
"
No"
{[Product].[BigSeller]}ONCOLUMNS,
{Store.[StoreName].Members}ONROWS
也可创建不仅取决于多维数据集中的现有成员,而且取决于同一MDX表达式中定义的其它计算成员的计算成员。
下列示例说明这样的MDX表达式:
Val((Measures.[StoreSales]-Measures.[StoreCost])/Measures.[StoreSales])'
MEMBER[Measures].[ProfitValue]AS
[Measures].[StoreSales]*[Measures].[ProfitPct]'
FORMAT_STRING='
#,###.##'
{[Measures].[StoreSales],[Measures].[StoreCost],[Measures].[ProfitValue],
第二个计算成员[Measures].[ProfitValue]使用第一个计算成员[Measures].[ProfitPct]中创建的值来生成自己的值。
只能是后面的计算成员使用前面的计算成员,不能反过来,所有,计算成员的顺序很重要。
3.4高级查询-使用命名集合
命名集合是一个与别名相关联的集合表达式。
它定义一个集合,可以在MDX语句中多出使用,主要是为了方便维护,提高可读性,如果该集合被多处使用,可以重用,减少解析时间,提高性能。
命名集别名视为集合表达式,并可用于任何接受集合表达式的地方。
下面的语法用于将WITH关键字添加到MDXSELECT语句:
命名集的<
值进一步分解为以下语法定义:
=SET<
set_name>
参数包含命名集的别名。
参数包含命名集别名所指的集合表达式。
例如,[ChardonnayChablis]命名集用于Product维度上的所有Chardonnay酒和Chablis酒成员。
以下示例对命名集的语法进行了描述:
WITHSET[ChardonnayChablis]AS
{[Product].[AllProducts].[Drink].[AlcoholicBeverages].[BeerandWine].[Wine].[Good].[GoodChardonnay],
[Product].[AllProducts].[Drink].[AlcoholicBeverages].[BeerandWine].[Wine].[Pearl].[PearlChardonnay],
[Product].[AllProducts].[Drink].[AlcoholicBeverages].[BeerandWine].[Wine].[Portsmouth].[PortsmouthChardonnay],
[Product].[AllProducts].[Drink].[AlcoholicBeverages].[BeerandWine].[Wine].[TopMeasure].[TopMeasureChardonnay],
[Product].[AllProducts].[Drink].[AlcoholicBeverages].[BeerandWine].[Wine].[Walrus].[WalrusChardonnay],
[Product].[AllProducts].[Drink].[AlcoholicBeverages].[BeerandWine].[Wine].[Good].[GoodChablisWine],
[Product].[AllProducts].[Drink].[AlcoholicBeverages].[BeerandWine].[Wine].[Pearl].[PearlChablisWine],
[Product].[AllProducts].[Drink].[AlcoholicBeverag
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MDX 用户指南