提供程序只要不更改这里所定义架构的行为和含义,就可以在结构中添加其它批注。这种开放式内容架构模型允许从其它名称空间添加新元素和特性,但不允许更改所定义的元素和特性的语义。
olapinfo
为了定义结构,<olapinfo> 首先使用 <axesinfo> 元素(注意是复数形式 axes)来定义坐标轴。坐标轴由一组 <axisinfo> 元素(注意是单数形式 axis)组成,这些元素的别名是序列化的,如 name="axis0"。然后,维层次结构连同其属性定义一起列出。在随后的示例中,标准成员属性用 <hierarchyinfo> 元素进行表示,包括 uname、caption、lname 和 lnum,以及非标准 displayinfo 元素。对于 store 层次结构,附加的(非标准)带空格字符的成员属性用 [store].[store sqft] 进行说明。
<olapinfo>
<axesinfo>
<axisinfo name="axis0">
<hierarchyinfo name="measures">
<uname name="[measures].[member_unique_name]"></uname>
<caption name="[measures].[member_caption]"></caption>
<lname name="[measures].[level_unique_name]"></lname>
<lnum name="[measures].[level_number]"></lnum>
<displayinfo name="[measures].[display_info]"></displayinfo>
</hierarchyinfo>
</axisinfo>
<axisinfo name="axis1">
<hierarchyinfo name="store">
<uname name="[store].[member_unique_name]"></uname>
<caption name="[store].[member_caption]"></caption>
<lname name="[store].[level_unique_name]"></lname>
<lnum name="[store].[level_number]"></lnum>
<displayinfo name="[store].[display_info]"></displayinfo>
<store_x0020_sqft name="[store].[store name].[store sqft]">
</store_x0020_sqft>
</hierarchyinfo>
<hierarchyinfo name="time">
<uname name="[time].[member_unique_name]"></uname>
<caption name="[time].[member_caption]"></caption>
<lname name="[time].[level_unique_name]"></lname>
<lnum name="[time].[level_number]"></lnum>
<displayinfo name="[time].[display_info]"></displayinfo>
</hierarchyinfo>
</axisinfo>
olapinfo 结构定义的最后一项内容是单元格的属性(列定义)。这使单元格可以包含其它属性。本示例中的属性为 value、fmtvalue 和自定义的属性 formatstring。
<olapinfo>
...
<cellinfo>
<value name="value"></value>
<fmtvalue name="formatted_value"></fmtvalue>
<formatstring name="format_string"></formatstring>
</cellinfo>
hierarchyinfo 标准元素
以下标准元素是 <hierarchyinfo> 元素所要求的元素。mdschema 引用是指 ole db for olap 架构定义。
| 元素 | 说明 |
| uname | 来自 ole db 坐标轴行集的 member_unique_name 属性 |
| caption | 来自 ole db 坐标轴行集的 member_caption 属性 |
| lname | 来自 ole db 坐标轴行集的 level_unique_name 属性 |
| lnum | 来自 ole db 坐标轴行集的 level_number 属性 |
cellinfo 标准元素
以下是 <cellinfo> 元素的标准元素。特定查询是否能够返回这些标准元素则取决于查询本身。
| 元素 | 说明 |
| value | 来自 ole db 单元格属性的 value 属性 |
| fmtvalue | 来自 ole db 单元格属性的 formatted_value 属性 |
| forecolor | 来自 ole db 单元格属性的 fore_color 属性 |
| backcolor | 来自 ole db 单元格属性的 back_color 属性 |
在 cellinfo 和 axisinfo 中使用默认值
提供程序可以选择性地为 axisinfo 或 cellinfo 部分中的单个成员或单元格属性指定默认值。如果同一属性总是具有或常常具有相同的值,可减小结果的大小。
可以选择性地将 <default> 元素指定为某个成员属性元素或单元格属性元素的子元素,用以表示该属性的默认值。例如,如果提供程序要为 store sqft 指定默认值,可以这样来指定:
<store_x0020_sqft name="store sqft">
<default>5000</default>
</store_x0020_sqft>
这样,如果结果中没有某个成员属性或单元格属性,则表示该成员属性或单元格属性的值为所声明的默认值。在以下结果中,完全没有 <store_x0020_sqft> 元素的输出,则 <store_x0020_sqft> 的值为 5000(以上所定义的默认值):
<member hierarchy="store">
<uname>[store].[ca]</uname>
<caption>ca</caption>
<lname>[store].[state]</lname>
<lnum>2</lnum>
</member>
如果元素存在,但没有值,这表示空字符串结果 (""),如下例所示:
<store_x0020_sqft />
通常,如果属性为 null,将被忽略。但如果已经为属性定义了默认值,则如要为属性指定 null 值,应使用 xml 架构规范中的空特性,如下所示:
<store_x0020_sqft xsi:null='true' />
axes
在 axes 下,axis 项将从零开始,按照它们在数据集中的顺序列出。axisformat 属性设置决定各 axis 元素的格式。所有 xml for analysis 提供程序都必须支持属性 axisformat 的以下值:
- clusterformat
- tupleformat
- customformat
提供程序可以选择性地支持将 customformat 值作为单独的格式。如果客户端请求 customformat,提供程序可以根据判断选择返回 tupleformat 和 clusterformat 格式之一。虽然提供程序必须支持上述全部三种值,但客户端可以请求其需要的格式;所以客户端可以选择不使用所有这三种可用的格式。
为什么会有不同的格式?
axisformat 属性的 tupleformat 和 clusterformat 设置提供两种不同的表示元组的方法。mddataset 定义赋予提供程序两种指定元组的方法:将其指定为多维元组或将其指定为笛卡尔乘积。这使客户端应用程序可以在简单性和降低空间要求之间进行选择。
坐标轴表示一个元组集,该集中的所有元组都具有相同的维数。可以用不同的方法表示该集,不同的方法有不同的优点。例如,下面的四元组集可以表示为二维元组集合或两个一维集的笛卡尔乘积。
| 1999 | 1999 | 2000 | 2000 |
| actual | budget | actual | budget |