数据分析
🗒️Olap4j 框架详解
00 分钟
2023-11-29
2023-11-29
type
status
date
slug
summary
tags
category
icon
password
Language
 

1.介绍

olap4j 是一个用于构建 OLAP 应用程序的开放 Java API。从本质上说。olap4j 之于多维数据就像 JDBC 之于关系数据。
olap4j 有一个与 JDBC 类似的编程模型。共享一些核心类。也有很多相同的优点。
您可以用 Java 为一台服务器(如 Mondrian)编写 OLAP 应用程序,并轻松切换到另一台服务器(如 Microsoft Analysis Services)。
透过 XML 存取以作分析)然而。为 Java 创建一个标准的 OLAP API 是一个有争议的问题。要理解其中的原因,了解 OLAP 标准的历史将有所帮助。

1.1 OLAP 的简史

历史上到处都是创建标准 OLAP API 的尝试。首先是 OLAP 理事会的 MDAPI(有两个版本),然后是 JOLAP API 从 Sun 的 Java 社区进程中诞生。
这些都失败了。看起来,因为在委员会阶段的某个时候,所有 OLAP 服务器供应商都失去了发布该标准实现的兴趣。这些标准庞大而复杂,而且没有一个用户界面提供商提出能够处理多个后端的 Ul。
与此同时。微软引入了 OLAP 的 OLE DB(它只在 Windows 客户端和服务器之间工作),然后是 XML/A(用于分析的 XML,一个 web 服务 API)。
由于种种原因,这些标准更为成功。首先,由于标准(特别是 OLAP 的 OLE DB)主要由一个供应商驱动,它们并不是试图包含多个产品功能的折衷方案。
其次,有一个现成的参考实现,并且微软保证有足够的 OLAP 客户端使这些标准成为可行的竞争和创新论坛。
第三,是 MDX 查询语言。查询语言比 API 更容易解释。它没有解决如何构造查询来回答业务问题的问题,但是应用程序开发人员可以通过嵌入一个现成的 OLAP 客户端来解决这个问题。开源社区发展 OLAP 首先是蒙德里安的味道,一个开源 OLAP 服务器,然后是 JPivot,客户首次跟蒙德里安,然后还 XML / a:还有更多的 OLAP 客户,想要使用一个特定的客户端和应用程序但想跟各种各样的服务器,使用特定的 OLAP 服务器和公司想要从几个客户。
很明显,开源 OLAP 工具需要一个标准。这个标准可能也适用于其他基于 java 的 OLAP 工具

1.2 olap4j 概述

OLAP 应用程序通过属于连接的 MDX 语句与 OLAP 服务器交互。这些语句是根据元数据定义的,并根据类型系统进行验证,一些应用程序是在更高的级别上构建的。
操作 MDX 解析树,并以业务用户能够理解的术语定义复杂查询。olap4j API 提供了所有这些工具。
在最低层,olap4j 有一个用于注册驱动程序、管理连接和语句的生命周期的框架。
olap4j 通过扩展 JDBC 框架提供了这种支持 OLAP API 设计中的一个关键决策是是否包含查询语言。从历史上看。这是一个有争议的问题。以前的标准分为两个阵营:MDAPI 和 JOLAP 有一个用于构建查询的 API。
而用于 OLAP 和 XML/A 的 oledb 具有 MDX 查询语言。SQL 查询语言是关系数据库 apl(如 ODBC 和 JDBC)的基本组件,将 OLAP API 建立在查询语言(如 MDX)上也有类似的意义,但 OLAP 应用程序也需要在最终用户探索数据时构建和转换查询。
因此 olap4j 包含了这两种方法:您可以通过解析 MDX 语句来创建查询,可以通过操作 MDX 解析树来构建查询,而且 MDX 解析器库允许您轻松地将 MDX 字符串与解析树进行转换元数据是 olap4i 的核心。
您可以浏览多维数据集。维度。层次结构。OLAP 模式中的成员、MDX 解析树和查询结果都绑定到相同的元数据对象上。
还有一个用于描述表达式的类型系统 olap4i 使得无需从头开始就可以编写 OLAP 客户端成为可能。
除了 MDX 解析器和 MDX 解析树上的操作之外,还有一个更高级的查询模型,其中包括转换查询的操作(也称为“导航”),以及将多维结果布局为 HTML 表的工具

1.3 与其他标准的关系

1.3.1 olap4j and XML/A

在这一点上,您可能会说:XML/A 呢?XML/A 首先出现在这里。
是一个开放的标准,并得到许多服务器的支持。olap4j 是否试图取代 XML/A? 难道 XML/还不够好吗? olap4j 当然与 XML/A 有一些相似之处。两种 apl 都允许应用程序执行 OLAP 查询,并浏览 OLAP 模式的元数据。
但是 XML/A 是一个低级的 web 服务 API,它给应用程序编写人员留下了大量的工作。(大多数成功的 XMLA 应用程序都只能在 Windows 上运行,这是一个事实。ADOMD。NET 是 XML/ a 服务器的高级接口。)这些 apr 大多是互补的,因为 olap4j 可以很容易地添加到 XML/A 后端。
并提供了难以或不可能通过 web 服务 API 提供的特性。这些函数用于解析 MDX、构建和转换 MDX 查询模型。并将结果集映射到图形布局中,比如数据透视表如果基于 web 服务的应用程序需要这些功能。它可以使用 XML/A 提供者连接到底层数据源,执行查询。和浏览元数据,但仍然可以使用 olap4i 的 MDX 解析、查询模型和布局特性

1.3.2 olap4j 是基于其他标准构建的

olap4j 尽可能地利用现有的标准。这有几个优点。首先,熟悉现有标准的终端用户可以很快跟上 olap4j 的速度。例如,对于熟悉 JDBC 连接的人来说,创建连接和执行语句应该很简单。
语句和结果集可以工作如果 OLAP 服务器实现者已经为某个标准实现了驱动程序,那么实现 olap4j 驱动程序应该会少一些工作。
这显然适用于 MDX 语言(借用了 XML/A 和用于 OLAP 的 OLE DB)。如果服务器已经支持 XML/A 模式行集,那么实现模式结果集应该很简单。
如果 olap4i 与现有标准非常相似,那么为使用该标准而设计的工具也可以适用于 olap4j。例如,olap4j 的一个目标是让人们能够使用 Jakarta Commons DBCP 这样的连接池库。
C3PO,。(这带来了一些挑战,因为 olap4i 扩展了一些 JDBC 接口。但我们希望能解决这些问题。) 最后,重用现有标准对于新标准的作者来说工作量更少!有时标准会发生冲突。
ADOMD 通过对象模型公开它的元数据,而 JDBC 和 XML/A 通过 XML/A 调用的行集和我们和 JDBC 调用的结果集相互公开元数据。
在本例中,我们选择两者兼顾,因为 olap4i 客户端需求的多样性。元数据对象允许您使用更少的代码位置引用成员来集成查询结果和元数据,并且可以从成员导航到其层次结构,等等。同样。元数据对象可用于构建 MDX 解析树。但是,如果客户端工具希望维护自己的元数据缓存,那么模式行集将更加灵活和高效

1.4 OLAP 标准 Java API 的好处

一旦 olap4i 标准就位。我们可以期待开放标准的常见好处将会出现:工具种类更多、工具更好、OLAP 服务器之间的价格/功能竞争更激烈。
这些好处随之而来,因为如果 OLAP 工具的开发人员能够接触到更多的用户,就会有更大的动机来构建新的工具最终,大多数 OLAP 服务器都会有 olap4i 提供者。
服务器供应商最初将没有动力接受一个将引入竞争的标准。但最终,工具的丰富将迫使他们编写提供者,或者更有可能。将吸引第三方或开源努力为他们的服务器建立供应商。

1.5 olap4j 的体系结构

下图显示了 olap4j 如何适应企业架构
notion image

1.6 兼容性

olap4j 需要 JDK 1.5 或更高版本,特别是因为它使用了 JDK 1.5.0 中引入的泛型和 enum 特性 olap4i 在 JDK 1.6 或更高版本上工作得最好。
因为它使用了 iava、sal、包装器接口。在早期的 Java 版本中。通过将对象转换为内置的 olapwrapper 接口,可以实现同样的功能。
使用 Retroweaver 实用程序,JDK 1.4 兼容性将随需而生。这将包含一个 retrowoven JAR 文件。以及 retroweaver 的运行时库。(见设计报告)olap4j-jdk1.4.jarretroweaver-rt-1.2.4。jarolap4i 的 JDBC 支持与 JDBC version 3.0(在 JDK 1.4 中引入,在 JDK 1.5 中也引入)和 JDBC version 4.0(在 JDK 1.6 中引入)一致。

1.7 规范

驱动程序可以支持两个遵从级别的 olap4j。olap4j 是一个丰富的规范,完全实现它需要付出相当大的努力,但是应用程序仍然可以构建在只实现规范核心部分的驱动程序上。较低的水平。
允许供应商使用规范的子集,而不需要对完全兼容的驱动程序进行重大投资合规级别如下:
  • olap4j 核心合规。为了遵守 olap4j 核心规范,它必须实现包中的所有类,只有返回结果集的 olapDatabaseMetaData 中的方法和包中的所有类例外。OLAP 服务器还必须实现 MDX 语言的基本特性(见下文)。org.olap4jgetXxxxs()org.olap4j.metadata
  • *olap4i.metadataolap4j 完全合规。要完全符合 olap4i 规范,驱动程序必须符合核心需求,并实现 olapDatabaseMetaData。方法,加上实现了一个 MDX 解析器和验证器(package) **getXxxx()org.olap4j.mdx.parser

MDX 语言合规

所有 olap4j 驱动程序都必须实现 MDX 语言的基本特性,但是 olap4j 遵从级别并不意味着对 MDX 语言的特定程度的支持。
MDX 的基本特征是:
  • 形式查询 "SELECT ... FROM ... WHERE"
  • 集合构造函数运算符{...}
  • 设置功能 CrossJoin((<Set>, <Set>),Filter(<Set>, <Condition>), Order(<Set>, <Expression>), Hierarchize(<Set>)
  • 导航操作符 <Member>.Children, <Level>.Members <Hierarchy>.Members, <Member>.Parent, Level, Hierarchy, Dimension
  • 聚合函数聚合
  • 基本算术和逻辑运算符
当然,提供者可以实现更大的 MDX 子集,大多数都可以。 提供者可以通过描述其支持的其他功能(例如查询中的 WITH MEMBER,WITH SET,NON EMPTY 和 HAVING 子句,虚拟多维数据集以及针对多维数据集定义的计算成员和集合)来描述其 MDX 遵从级别,以及实现的其他函数和运算符 。

2.API 的组件

现在,我们将 olap4j API 细分为一组功能区域,以进行更详细的描述。
notion image

2.1 Driver

olap4j 共享 JDBC 的驱动程序管理功能。 这使 olap4j 客户端可以利用对 JDBC 的支持,例如连接池,驱动程序注册。
Classes:

2.1.1. Driver 类

与 JDBC 相同的功能。
这是注册 olap4j 驱动程序的示例:
Class.forName(“mondrian.olap4j.MondrianOlap4jDriver”);

2.1.2. DriverManager 类

与 JDBC 相同的功能。

2.1.3. DataSource 接口

与 JDBC 相同的功能。

2.1.4. OlapDataSource 接口

扩展到该对象将返回对象,而不仅仅是对象.DataSourceOlapConnectionjava.sql.Connection

2.1.5. OlapException 类

OlapException(扩展 java.sql.SQLException)描述了在访问 OLAP 服务器时发生的错误
由于 olap4j 扩展了 JDBC,因此 OlapException 应该扩展 JDBC 的 SQLException 是很自然的。 通过 olap4j 的实现
被声明抛出 SQLException 的 JDBC 方法的驱动程序可以(如果驱动程序选择)抛出 OlapException。
OlapException 提供了一些其他信息来帮助 OLAP 客户端识别错误的位置。 是发生错误的单元格或位置对象。 是一个对象,代表 MDX 语句中的文本区域。contextregion
Methods :
  • Region getRegion()
  • setRegion(Region region)
  • Object getContext()
  • void setContext(Object context)

2.2 Connections

olap4j 的连接管理组件管理到 OLAP 服务器(语句)的连接。
olap4j 在可能的情况下使用 JDBC 的会话管理工具。olap4j 定义了 JDBC 接口连接和语句的扩展。
例如,下面的代码注册一个驱动程序,连接到 Mondrian 并执行一条语句
下面是一段通过 XML/ a 连接到 Microsoft SQL Server Analysis Services™(MSAS)的代码。注意,除了驱动程序类和连接字符串之外,代码是相同的。
在上面的例子中,一个语句是从一个字符串创建的。正如我们将看到的,也可以从 MDX 解析树创建语句。

2.2.1. Connection 池

再次查看前一节中的代码示例。人们期望将工厂方法的结果向下转换为期望的结果是安全的。例如,如果您调用 OlapConnection's createStatement() 方法,结果应该是 OlapStatement.
但如果您正在使用连接池库(常见的示例包括 Jakarta Commons DBCP 和 C3P0),情况就不是这样了。每个连接池库都通过将连接包装在另一个类中来跟踪连接,这个类将实现 java.sql.Connection,但不实现 OlapConnection。要访问 OlapConnection 的方法,客户机应用程序必须首先剥离包装器对象。
如果您正在使用连接池库,olap4j 提供了带有方法 unwrap(Class)的 OlapWrapper 接口,以访问包装连接下面的对象。例如,如果你正在使用 DBCP,你可以定义和使用一个池 olap4j 数据源如下:
OlapStatement、PreparedOlapStatement 和 CellSet 接口也扩展了 OlapWrapper,可以类似地访问它们。
如果没有使用连接池,那么驱动程序返回的对象将是 OlapConnection,因此将简单地实现 OlapWrapper(因为 OlapConnection 接口扩展了 OlapWrapper)。如果正在使用连接池,那么只要连接池的实现者确保池中的连接对象实现 OlapWrapper 接口,代码就可以工作。这是对连接池的一个小更改,我们希望流行的连接池在不久的将来能够使用这种方法。
如果你使用的是 JDBC 4.0(它是 JDK 1.6 及更高版本的一部分),java.sql.Connection 类实现了 JDBC 4.0 中引入的 java.sql.Wrapper 接口,因此代码可以简化:
包名:org.olap4j

2.2.2 OlapConnection 接口

OlapConnection(扩展 java.sql.Connection)是一个到 OLAP 数据源的连接。
方法:
  • NamedList <Catalog>* getCatalogs()**
  • Schema getSchema()
  • void setLocale(Locale locale)
  • Locale getLocale()
  • void setRoleName(String roleName)
  • String getRoleName()
  • PreparedOlapStatement prepareOlapStatement(String mdx)
  • MdxParserFactory getParserFactory()

2.2.3 OlapWrapper 接口

OlapWrapper 提供了检索委托实例的能力,当所涉及的实例实际上是一个代理类时。
OlapWrapper 复制了 java.sql.Wrapper 接口(在 JDBC 4.0 中引入)的功能,使得在 JDBC 3.0 环境中运行的 olap4j 客户端可以使用该功能。对于只在 JDBC 4.0 及更高版本上运行的代码,可以使用包装器,而可以忽略 OlapWrapper。
方法:
  • boolean isWrapper()
  • T unwrap(Class <T>)

2.2.4 OlapDatabaseMetaData 接口

2.3. Statements

2.3.1 OlapStatement 接口

OlapStatement(扩展 java.sql.Statement)是一个对象,用于执行一个静态 MDX 语句并返回它产生的结果。
它有一些方法来执行表示为字符串和解析树的 MDX 查询。
方法:
  • CellSet executeOlapQuery(String mdx)
  • CellSet executeOlapQuery(SelectNode selectNode)

2.3.2 PreparedOlapStatement 接口

PreparedOlapStatement(扩展 java.sql.PreparedStatement)表示一个预编译的 MDX 语句。
MDX 语句被预编译并存储在 PreparedOlapStatement 对象中。然后可以使用此对象高效地多次执行此语句。
与 JDBC 一样,方法 PreparedStatement.getParameterMetaData()返回参数的描述。结果是 OlapParameterMetaData。
要设置参数的值,使用 setType(int, type)方法。如果形参是成员,则使用 setObject(int, Object)方法;如果对象不是成员,或者是错误层次结构的成员,则抛出异常。
与 JDBC 不同,没有必要为每个参数赋值。这是因为 OLAP 参数有一个默认值。参数有它们的默认值,直到它们被设置,然后在以后每次执行这个 PreparedOlapStatement 时保留它们的新值。
getCube()方法返回准备语句所关联的多维数据集(或虚拟多维数据集)。
方法:
  • CellSet executeQuery()
  • Cube getCube()
  • CellSetMetaData getMetaData()
  • OlapParameterMetaData getParameterMetaData()

2.3.3 OlapParameterMetaData 接口

OlapParameterMetaData(扩展 java.sql.ParameterMetaData)描述 PreparedOlapStatement 的参数。
其他方法:
  • getName()
  • getOlapType(int param)

2.3.4 CellSet 接口

CellCellSet(扩展 java.sql.ResultSet)是执行 OlapStatement 或 PreparedOlapStatement 的结果。
它扩展了 ResultSet,但是由于大多数方法都与行和列有关,所以只有少数基类的方法是适用的。有以下两种方式:设置接口
检索多维结果轴的其他方法:
  • List <CellSetAxis>* getAxes()**
  • CellSetAxis getFilterAxis()
  • Cell getCell(List <Integer>* coordinates)**
一个 OlapStatement 最多只能打开一个 CellSet。关闭 OlapStatement,或准备或执行一个新的查询,都会隐式地关闭以前的任何 CellSet。

2.3.5 CellSetAxis 接口

CellSetAxis 是属于 CellSet 的轴。
单元格集具有与 MDX 语句相同的轴数,MDX 语句是为了生成单元格而执行的。例如,由具有列和行表达式的 MDX 查询产生的典型单元格集是二维的,因此有两个轴。
每个轴都是成员或元组的有序集合。轴上的每个成员或元组称为一个位置。
单元格集轴上的位置可以顺序访问或随机访问。使用 List <Position>** getPositions()方法返回一个随机访问的列表,或者使用迭代器**<Position>** iterate()方法获得一个迭代器进行顺序访问。**
方法:
  • Axis getOrdinal()
  • CellSet getCellSet()
  • CellSetAxisMetaData getAxisMetaData()
  • List <Position>* getPositions()**
  • int getPositionCount()
  • ListIterator <Position>* iterate()**

2.3.6 Axis 枚举

Axis 是 Axis 类型的枚举。
Axis 是一个 enum2.3.7。轴类型的 CellSetAxisMetaData 接口。
方法:
  • Axis getAxis()
  • List <Hierarchy>* getHierarchies()**
  • List <Property>* getProperties()**

2.3.7 CellSetAxisMetaData 接口

CellSetAxisMetaData is 描述 CellSetAxis。
方法:
  • Axis getAxis()
  • List <Hierarchy>* getHierarchies()**
  • List <Property>* getProperties()**

2.3.8 Position 接口

Position 是 Position 的一个 CellSetAxis.。
一个轴有一个特定的维度,也就是说,一个或多个维度的集合将出现在这个轴上,这个轴上的每个位置都有每个维度的成员。例如,在 MDX 查询中
列轴的维度为{[Measures]},行轴的维度为{[Gender], [Product]}。在这个查询的结果中,
Gender
Product
Unit Sales
Store Sales
All Gender
Food
191,940
409,035.59
All Gender
Drink
24,597
48,836.21
F
Food
94,814
203,094.17
F
Drink
12,202
24,457.37
M
Food
97,126
205,941.42
M
Drink
12,395
24,378.84
行轴上的 5 个位置中的每一个都有两个成员,与它的维度 2 一致。列轴有两个位置,每个位置有一个成员。
方法:
  • List <Member>* getMembers()**
  • int getOrdinal()

2.3.9 Cell 接口

单元格是从单元格集返回的单元格。
方法:
  • CellSet getCellSet()
  • int getOrdinal()
  • List <Integer>* getCoordinateList()**
  • Object getPropertyValue(Property)
  • boolean isError()
  • boolean isNull()
  • boolean isEmpty()
  • double getDoubleValue()
  • String getErrorText()
  • Object getValue()
  • String getFormattedValue()

2.3.10 CellSetMetaData 接口

CellSetMetaData(扩展 java.sql.ResultSetMetaData)描述一个 CellSet。
方法:
  • NamedList <Property>* getCellProperties()**
  • Cube getCube()
  • NamedList <CellSetAxisMetaData>* getAxesMetaData()**
  • CellSetAxisMetaData getSlicerAxisMetaData()

2.4 MDX 查询模型

MDX 查询模型表示一个已解析的 MDX 语句。
MDX 查询模型可以通过三种方式创建:
MDX 解析器解析 MDX 字符串,创建 MDX 查询模型;客户端代码通过调用 API 方法以编程方式构建查询模型;转换包中的代码操作查询模型以响应图形化操作。MDX 查询模型可以处于未验证和已验证状态。在未验证状态下,标识符和函数调用作为原始字符串存在,并且没有分配类型信息。在验证过程中,标识符被解析为特定的 MDX 对象(成员等),类型信息被分配,如果函数以多个重载形式存在,则根据其参数的类型选择特定的实例。
任何 MDX 查询模型都可以序列化为包含 MDX 文本的字符串。
可以将 MDX 查询模型转换为一条语句。例如,
解析树类:
  • ParseTreeNode 是表示已解析 MDX 语句的解析树中的节点。
  • SelectNode 表示一个 SELECT 语句,包括 FROM 和 WHERE 子句(如果存在的话)。
  • AxisNode 表示一个轴表达式。
  • CallNode 表示对函数或操作符的调用。
  • IdentifierNode 表示标识符,如 Sales 或[Measures]。(销量)。
  • LiteralNode 表示一个字面量,例如 123 或“Hello, world!”。
  • MemberNode 表示在表达式中使用成员名。
  • LevelNode 表示在表达式中使用级别名称。
  • HierarchyNode 表示在表达式中使用层次结构名称。
  • dimension node 表示在表达式中使用维度名称。
  • WithMemberNode 表示一个定义计算成员的 WITH 成员子句。
  • WithSetNode 表示一个定义计算集的 WITH SET 子句。
  • PropertyValueNode 表示作为计算成员或集合声明的一部分的属性=值对。
其他类:
枚举语法描述了函数和操作符(中缀、前缀、函数调用等等)的可能语法。

2.4.1 ParseTreeWriter 类

ParseTreeWriter 与 ParseTreeNode.unparse(ParseTreeWriter)方法一起使用,以将解析树转换为 MDX 代码。

2.5 MDX 解析器

提供一个 MDX 解析器和验证器。
解析器和验证器都是通过解析器工厂分配的,解析器工厂是从一个连接中获得的:
解析器和验证器不是线程安全的(它们不能被多个线程同时使用),但是它们可以被多个语句重用。
验证的主要目的之一是为解析树中的每个表达式分配类型。在验证之前,任何节点的 ParseTreeNode.getType()方法都可能抛出异常,但在验证之后,getType()方法将返回一个类型。非表达式的节点没有类型,并且总是返回 null。
类 :
  • MdxParserFactory
  • MdxParser
  • MdxValidator

2.6 MDX 类型模型

包名:org.olap4j.type
表示 MDX 类型系统。
以下是一些例子:
Expression
Type
1 + 2
Integer
[Store]
Dimension
[Store].[State]
Level<dimension=[Store], hierarchy=[Store]>
[Store].[USA].[CA]
Member<dimension=[Store], hierarchy=[Store], level=[Store].[State], member=[Store].[USA].[CA]>
[Store].[USA].Children(2)
Member<dimension=[Store], hierarchy=[Store], level=[Store].[State]>
由于 MDX 是一种后期绑定语言,一些表达式将具有未知类型,或者只有部分类型信息。例如,表达式
[Store].Levels("Sta" + "te")类型为 Level<dimension=[Store], Level =unknown>。验证器知道 <hierarchy>函数返回一个级别,但具体是哪个级别直到表达式在运行时求值才知道。
Type 是所有类型的基类。
标量类型:
  • ScalarType 表示具有简单值(如数字或字符串)的表达式的类型。
  • boolean 类型(扩展了 ScalarType)表示一个可以有 TRUE 和 FALSE 值的表达式。
  • NumericType 表示数字表达式的类型。
  • DecimalType(扩展 NumericType)表示定点数值表达式。它是 NumericType 的一个子类,具有精度和比例。整数表达式的规模为 0。
  • StringType(扩展 ScalarType)表示具有字符串值的表达式的类型。
  • SymbolType(扩展了 ScalarType)表示内置函数的符号或标志参数的类型。例如,表达式顺序中的 ASC 关键字(Gender。成员,措施。(单位销售额),ASC)是一个符号。符号类型很少被使用,除非你在操作一个解析树。
元数据类型:
  • CubeType 表示其值为多维数据集的表达式的类型。
  • dimension type 表示值为维度的表达式的类型。
  • HierarchyType 表示值为层次结构的表达式的类型。
  • LevelType 表示一个值为 level 的表达式的类型。
  • MemberType 表示一个值为成员的表达式的类型。
元数据类型可能被限制在模式的特定部分。例如,LevelType(hierarchy=[Time])指示表达式必须求值到[Time]层次结构的一个级别,即一个值[Time].[Year], [Time].[Quarter], or [Time].[Month].
复合类型:
  • SetType 表示表达式的类型,该表达式是一个集合。它有一个组件类型,例如,{[Store].[USA].Children} is Set(Member(level=[Store].[Store State]).
  • TupleType 表示由 n 个成员组成的表达式的类型。它有一组组件类型,每个类型都是一个成员类型。例如,表达式 CrossJoin({[Gender].[F], [Gender].[M]}, [Store].Members) is Set(Tuple(Member(level=[Gender].[Gender]), Member(hierarchy=[Store])).

2.7. 元数据

Package name: org.olap4j.metadata
元数据是描述 OLAP 模式结构的对象:多维数据集、维度、成员、属性等等。
olap4j 以两种非常不同的方式公开元数据:
  • 元数据对象是表示特定元数据类的 Java 对象。 **例如 **org.olap4j.metadata.Cube.
  • 模式结果集是 JDBC ResultSet,它返回特定元数据类的每个实例的记录。OlapDatabaseMetaData 接口中有一个方法可以为每个元数据类创建模式结果集。其中一些方法接受参数来筛选返回的行。例如, OlapDatabaseMetaData.getCubes(String catalog, String schemaNamePattern, String cubeNamePattern).

2.7.1 访问控制

用户的元数据视图可能受到访问控制。访问控制的精确规则取决于提供程序,而该规范并没有说明这些规则应该是什么。但是这个规范要求 API 方法的行为必须与服务器的访问控制策略一致。
例如,在 mondrian 中,用户属于角色,角色可以被授予或拒绝访问多维数据集、层次结构或层次结构中的成员。假设用户 Fred 属于“Sales Manager”角色,该角色不能访问[Store]层次结构的[Nation]级别,并且当前连接已在“Sales Manager”角色中打开。然后,如果应用到[Store].[USA], Member.getParentMember()方法将返回 null。[CA],因为“真正的”父成员[Store]。[美国]对他来说是看不见的;同样,Hierarchy.getLevels()和 olapdatabasemetdata . getlevels()方法将从它们返回的级别列表中省略国家级别。
在 olap4j 中,您可以在连接时使用 role connect string 属性设置连接的角色,也可以调用 OlapConnection。setRole(String roleName)方法在连接生命周期中的任何点。将角色名设置为 null 将恢复为默认的访问控制上下文。

2.7.2 元数据对象

下图显示了 olap4j 模式中的元数据对象。
notion image
在图中,每个箭头表示父对象中的对象集合;例如,数据库是目录的集合,每个目录是模式的集合,每个模式是多维数据集的集合,等等。除了数据库,每个对象在 org.olap4j 中都有一个对应的类。元数据方案;数据库由 OlapConnection 类(特别是 getCatalogs()方法)和 OlapDatabaseMetaData(它描述 OLAP 服务器的一般功能)的组合表示。
大多数元数据对象扩展了 MetadataElement 接口,该接口为它们提供名称和惟一名称属性,以及本地化的标题和描述。
当 API 返回名称必须是唯一的元数据元素列表(例如,多维数据集中的维度列表)时,返回类型是 java.util.List 的 NamedList 扩展名。
提供者可以自由地使用缓存实现元数据对象,因此随着时间的推移,不同的 java 对象可能表示相同的底层元数据对象。在比较元数据对象时,总是使用 equals(),而不是==操作符,并且不要使用 IdentityHashMap。

2.7.2.1. MetadataElement 接口

MetadataElement 是一个描述 OLAP 模式结构的元素。
子类型包括多维数据集、维度、层次结构、级别、成员、属性。MetadataElement 提供了 name 和 unique-name 属性(未本地化),以及本地化的标题和描述(参见国际化)。
  • String getName()
  • String getUniqueName()
  • String getCaption(Locale locale)
  • String getDescription(Locale locale)

2.7.2.2 Catalog 接口

目录是元数据对象层次结构中最高级别的元素。一个目录包含一个或多个模式。
有些 OLAP 服务器可能只有一个目录。Mondrian 就是这样一个 OLAP 服务器;它唯一的目录总是被称为“LOCALDB”。
要获取当前服务器中的目录集合,请调用 OlapConnection.getCatalogs()方法。
方法:
  • String getName()
  • NamedList <Schema>* getSchemas()**
  • OlapDatabaseMetaData getMetaData()

2.7.2.3. Schema 接口

模式是数据库对象的集合,其中包含关于数据库的结构信息或元数据。
它属于一个目录,包含许多多维数据集和共享维度。
  • String getName()
  • List <Dimension>* getSharedDimensions()**
  • List <Cube>* getCubes()**
  • List <Locale>* getSupportedLocales() (see Internationalization)**

2.7.2.1. MetadataElement 接口

多维数据集是表示多维数据的中心元数据对象。
它属于一个模式,由一列维和一列度量来描述。它还可以有一个命名集集合,每个集合由公式定义。
  • NamedList <Dimension>* getDimensions()**
  • NamedList <Hierarchy>* getHierarchies()**
  • List <Measure>* getMeasures()**
  • NamedList <NamedSet>* getSets()**
  • Schema getSchema()
  • String getName()
  • List <Locale>* getSupportedLocales() (see Internationalization)**
  • Member lookupMember(String... nameParts)
  • List <Member>* lookupMembers(Set**<TreeOp>* treeOps, String... nameParts)**

2.7.2.5. Dimension 接口

维度(扩展 MetadataElement)是一种有组织的类别层次结构,称为层次,它描述多维数据集中的数据。
维度通常描述一组类似的成员,用户希望根据这些成员进行分析。
维度必须至少有一个层次结构,也可以有多个层次结构,但大多数维度只有一个层次结构。
  • String getName()
  • NamedList <Hierarchy>* getHierarchies()**
  • Dimension.Type getDimensionType()

2.7.2.6. Hierarchy 接口

层次结构(extends MetadataElement)是维度中的成员集合及其彼此相对位置的组织。
层次结构是层次的集合,每个层次都是类似成员的类别。
  • Dimension getDimension()
  • String getName()
  • NamedList <Level>* getLevels()**
  • boolean hasAll()
  • Member getDefaultMember()
  • NamedList <Member>* getRootMembers()**

2.7.2.7. Level 接口

级别(extends MetadataElement)是层次结构中的一组成员,它们在层次结构中具有相同的属性和相同的深度。
  • int getDepth()
  • Hierarchy getHierarchy()
  • Level.Type getLevelType()
  • NamedList <Property>* getProperties()**
  • List <Member>* getMembers()**
  • int getCardinality()

2.7.2.8. Member 接口

成员(extends MetadataElement)是 OLAP 维度中的数据值。
  • String getName()
  • NamedList <Member>* getChildMembers()**
  • Member getParentMember()
  • Level getLevel()
  • Hierarchy getHierarchy()
  • boolean isAll()
  • boolean isChildOrEqualTo(Member member)
  • boolean isCalculated()
  • boolean isCalculatedInQuery()
  • int solveOrder()
  • List <Member>* getAncestorMembers()**
  • Object getPropertyValue(Property property)
  • String getPropertyFormattedValue(Property property)
  • void setProperty(Property property, Object value)
  • NamedList <Property>* getProperties()**
  • int getOrdinal()
  • boolean isHidden()
  • Member getDataMember()
  • int getChildMemberCount()

2.7.2.9. Measure 接口

度量(extends 成员)是浏览多维数据集的用户最感兴趣的数据值。它提供每个单元格的值,通常为数字。
每一个度量都是一个称为“度量”的特殊维度的成员。
  • boolean isVisible()
  • Aggregator getAggregator()
  • Datatype getDataType()

2.7.2.10. Property 接口

Property (extends MetadataElement)是成员或单元格的属性的定义。
属性包含两个枚举类型 StandardMemberProperty 和 StandardCellProperty,它们的值是成员和单元格的内置属性。因为这些类型实现了 Property 接口,所以可以将它们用作属性;例如:
成员成员;对象 o = member.getPropertyValue(Property.StandardMemberProperty.CATALOG_NAME);成员:
  • Datatype getDatatype()
  • Set <TypeFlag>* getType()**
  • ContentType getContentType()
  • enum TypeFlag { MEMBER, CELL, SYSTEM, BLOB }
  • *enum StandardMemberProperty implements Property { CATALOG_NAME, **
  • SCHEMA_NAME, CUBE_NAME, ... }
  • *enum StandardCellProperty implements Property { BACK_COLOR, **
  • CELL_EVALUATION_LIST, ... }
  • enum ContentType { REGULAR, ID, RELATION_TO_PARENT, ... }

2.7.2.11. NamedSet 接口

NamedSet(扩展元数据元素)描述一个集,其值由 MDX 表达式确定。它属于一个立方体。
  • Cube getCube()
  • Expression getExpression()

2.7.2.12. Datatype 枚举

Datatype enum 描述属性和度量值的类型。因为 olap4j 驱动程序需要与 OLAP 和 XMLA 系统的 OLE DB 进行互操作,数据类型值与 OLE DB 规范中的序号相同,我们在这里显示 OLE DB 规范中相应类型的名称和描述。表中显示了类似的 Java 类型(如果有的话)。
Datatype
Java type
OLE DB type
Description
INTEGER
int
DBTYPE_I4
一个四字节的有符号整数:整数
DOUBLE
double
DBTYPE_R8
双精度浮点值:Double
CURRENCY
DBTYPE_CY
货币值:LARGE_INTEGER,货币为小数点右侧四位的定点数字。 它存储在一个 8 字节的带符号整数中,按 10,000 进行了缩放。
BOOLEAN
boolean
DBTYPE_BOOL
布尔值的存储方式与自动化相同:VARIANT_BOOL; 0 表示 false 和~0(按位计算,值不为 0; 也就是说,所有位都设为 1)表示为真。
VARIANT
Object
DBTYPE_VARIANT
An Automation VARIANT
UNSIGNED_SHORT
-
DBTYPE_UI2
一个两个字节的无符号整数
UNSIGNED_INTEGER
-
DBTYPE_UI4
一个四字节的无符号整数
LARGE_INTEGER
long
DBTYPE_I8
一个 8 字节的带符号整数:大整数
STRING
String
DBTYPE_WSTR
以 null 结尾的 Unicode 字符串: 如果 DBTYPE_WSTR 被自己使用,那么分配给字符串的字节数(包括 null 终止字符)将由 DBBINDING 结构中的 cbMaxLen 指定。 如果 DBTYPE_WSTR 与 DBTYPE_BYREF 组合,那么为字符串(包括 null 终止字符)分配的字节数至少为字符串的长度加 2。 在这两种情况下,字符串的实际长度都是从绑定的长度值确定的。 字符串的最大长度是分配的字节数除以 sizeof(wchar_t)并截断为最近的整数。

2.7.3 OlapDatabaseMetaData 接口,以及返回模式行集的方法

OlapDatabaseMetaData(扩展 java.sql.DatabaseMetaData)包含返回模式结果集的方法。
模式结果集被指定为[用于分析规范的 XML]。下面是 XML/ a 方法以及相应的 olap4j 方法和元素类型的表格。
XML for Analysis schema rowset
Schema result set method
Metadata element
DBSCHEMA_CATALOGS
not supported
DBSCHEMA_COLUMNS
not supported
not supported
DBSCHEMA_PROVIDER_TYPES
not supported
not supported
DBSCHEMA_TABLES
not supported
not supported
DBSCHEMA_TABLES_INFO
not supported
not supported
DISCOVER_DATASOURCES
not supported
DISCOVER_ENUMERATORS
not supported
not supported
DISCOVER_KEYWORDS
not supported
DISCOVER_LITERALS
not supported
DISCOVER_PROPERTIES
not supported
DISCOVER_SCHEMA_ROWSETS
not supported
not supported
MDSCHEMA_ACTIONS
not supported
MDSCHEMA_CUBES
MDSCHEMA_DIMENSIONS
MDSCHEMA_FUNCTIONS
not supported
MDSCHEMA_HIERARCHIES
MDSCHEMA_INPUT_DATASOURCES
not supported
not supported
MDSCHEMA_KPIS
not supported
not supported
MDSCHEMA_LEVELS
MDSCHEMA_MEASURES
MDSCHEMA_MEMBERS
MDSCHEMA_PROPERTIES
MDSCHEMA_SETS
从元数据方法返回的结果集中返回的行根据本节详细介绍的结果集列布局进行结构化。
以下结果集中所记录的所有列都是必需的,并且必须按照显示的顺序返回它们。但是,可以在末尾添加其他列(客户端应该忽略这些列),一些列可以包含不适用的信息的空数据。
以下部分描述每个行集中的列。每个部分都包含一个表,该表为每个列提供了以下信息。
Column heading
Contents
Column name
输出行集中列的名称。
Type
列的数据类型的说明,以及该列是否可以为空。
Description
简要说明的目的。

2.7.3.1 getDatasources

由用于分析方法的 DISCOVER_DATASOURCES XML 指定。
返回的结果集包含以下列。
Column name
Type
Description
DATA_SOURCE_NAME
String
数据源的名称,例如****FoodMart 2000没有空。
DATA_SOURCE_DESCRIPTION
String
由发布者输入的对数据源的描述。
URL
String
显示在何处为数据源的分析方法调用 XML 的唯一路径。
DATA_SOURCE_INFO
String
显示在何处为数据源的分析方法调用 XML 的唯一路径。 包含连接到数据源所需的任何附加信息的字符串。 这可以包括提供程序的初始目录属性或其他信息。 例如:"Provider=MSOLAP;Data Source=Local;"
PROVIDER_NAME
String
数据源后面提供程序的名称 示例:“MSDASQL ”
PROVIDER_TYPE
String
由提供者支持的数据类型的逗号分隔列表。可能包括一个或多个以下类型。下面是这个表。TDP*:表格数据提供程序。*数据挖掘提供程序。DMP 提供者实现了数据挖掘规范的 OLE DB。
AUTHENTICATION_MODE
String
*.规范数据源使用的安全模式。值可以是下面的一个,从不为空:未经身份验证:不需要发送用户 ID 或密码。认证:用户 ID 和密码必须包含在连接所需的信息中。 * * * * * * *:数据源使用底层安全来确定授权,如微软互联网信息服务(IIS)提供的集成安全

2.7.3.2 getDatabaseProperties

返回有关 olap4j 提供程序支持的标准属性和特定于提供程序的属性的信息。返回结果集中没有列出提供程序不支持的属性。
由用于分析方法的 DISCOVER_PROPERTIES XML 指定,只是我们将 VALUE 属性重命名为 PROPERTY_VALUE,因为“VALUE”是一个 SQL:2003 保留字。
返回的结果集包含以下列。
Column name
Type
Description
PROPERTY_NAME
String
属性的名称。没有空。
PROPERTY_DESCRIPTION
String
属性的可本地化文本描述。
PROPERTY_TYPE
String
属性的 XML 数据类型。
PROPERTY_ACCESS_TYPE
String
对属性的访问。 取值包括“Read”、“Write”和“ReadWrite”。 没有空。
IS_REQUIRED
boolean
如果属性是必需的,则为 True,如果不是必需的,则为 false。
PROPERTY_VALUE
String
属性的当前值。 这个属性在 XMLA 中称为 VALUE。

2.7.3.3 getLiterals

检索有关支持的文字的信息列表,包括数据类型和值。
由用于分析方法的 DISCOVER_LITERALS XML 指定。
返回的结果集包含以下列。
Column name
Type
Description
LITERAL_NAME
String
行中描述的文字的名称。 没有空。 例子:DBLITERAL_LIKE_PERCENT。
LITERAL_VALUE
String
行中描述的文字的名称。 包含实际的文字值。 例如,如果'LITERAL_NAME** '是 DBLITERAL_LIKE_PERCENT,并且 percent 字符(%)用于在 LIKE 子句中匹配零个或多个字符,则该列的值为"%"。** 没有空。 例子:DBLITERAL_LIKE_PERCENT。
LITERAL_INVALID_CHARS
String
字面值中无效的字符。 例如,如果表名可以包含数字字符以外的任何字符,那么这个字符串将是“0123456789”。
LITERAL_INVALID_ STARTING_CHARS
String
不能作为文本的第一个字符的字符。 如果文字可以以任何有效字符开头,则为空。
LITERAL_MAX_LENGTH
int
字面值中最大的字符数。 如果没有最大值,或者最大值未知,则值为-1。

2.7.3.4. getCubes

描述数据库中多维数据集的结构。
由用于分析方法的 MDSCHEMA_CUBES XML 指定。
返回的结果集包含以下列。
Column name
Type
Description
CATALOG_NAME
String
数据库的名称。
SCHEMA_NAME
String
不支持
CUBE_NAME
String
多维数据集或维度的名称。 维度名称的前面有一个美元符号($)符号。
CUBE_TYPE
String
立方体的类型。 立方体有效值是: - CUBE - DIMENSION
CUBE_GUID
String
不支持
CREATED_ON
Timestamp
不支持
LAST_SCHEMA_UPDATE
Timestamp
多维数据集最后一次处理的时间。
SCHEMA_UPDATED_BY
String
不支持
LAST_DATA_UPDATE
Timestamp
多维数据集最后一次处理的时间。
DATA_UPDATED_BY
String
不支持
DESCRIPTION
String
对立方体的描述。
IS_DRILLTHROUGH_ENABLED
boolean
始终返回 true 的布尔值。
IS_LINKABLE
boolean
一个布尔值,指示多维数据集是否可以在链接的多维数据集中使用。
IS_WRITE_ENABLED
boolean
指示多维数据集是否启用写的布尔值。
IS_SQL_ENABLED
boolean
一个布尔值,指示是否可以在多维数据集上使用 SQL。
CUBE_CAPTION
String
立方体的说明。
BASE_CUBE_NAME
String
如果源多维数据集是透视图多维数据集,则为源多维数据集的名称。
ANNOTATIONS
String
(可选)一组 XML 格式的笔记。
行集按照 CATALOG_NAME、SCHEMA_NAME 和 CUBE_NAME 排序。

2.7.3.5. getDimensions

检索描述数据库中共享维和私有维的结果集。
由用于分析方法的 MDSCHEMA_DIMENSIONS XML 指定。
返回的结果集包含以下列。
Column name
Type
Description
CATALOG_NAME
String
数据库的名称。
SCHEMA_NAME
String
不支持
CUBE_NAME
String
多维数据集的名称。
DIMENSION_NAME
String
维度的名称。 如果一个维度属于多个多维数据集或度量组,那么维度、度量组和多维数据集的每个惟一组合都有一行。
DIMENSION_UNIQUE_NAME
String
维度的唯一名称。
DIMENSION_GUID
String
不支持
DIMENSION_CAPTION
String
尺寸的说明。 这应该在向用户显示维度名称时使用,例如在用户界面或报表中。
DIMENSION_ORDINAL
int
维度在多维数据集中的位置。
DIMENSION_TYPE
int
维度的类型。 有效值包括 org.olap4j.维的 xmlaOrdinal 属性的值。 枚举类型。
DIMENSION_CARDINALITY
int
键属性中的成员数量。
DEFAULT_HIERARCHY
String
维度的层次结构。 为向后兼容而保留。
DESCRIPTION
String
对尺寸的友好描述。
IS_VIRTUAL
boolean
总是 false 的。
IS_READWRITE
boolean
一个布尔值,指示维度是否启用写。 **'**true'如果维度是写启用的。
DIMENSION_UNIQUE_SETTINGS
int
如果维度仅包含具有惟一名称的成员,则指定哪些列包含惟一值的位图。 **为这个位图定义了以下位值常量:**MDDIMENSIONS_MEMBER_KEY_UNIQUE (1)
DIMENSION_MASTER_ UNIQUE_NAME
String
*总是“ * null\ \ * * * * ”。
DIMENSION_IS_VISIBLE
boolean
总是 ***\\*true\\****.
  • *结果集按 **CATALOG_NAME, SCHEMA_NAME, CUBE_NAME, DIMENSION_NAME. 排序

2.7.3.6. getFunctions

检索一个结果集,该结果集描述连接到数据库的客户机应用程序可用的函数。
由 MDSCHEMA_FUNCTIONS XML 指定,用于分析方法。
返回的结果集包含以下列。
Column name
Type
Description
FUNCTION_NAME
String
函数的名称。
DESCRIPTION
String
对功能的描述。
PARAMETER_LIST
String
以逗号分隔的参数列表,格式与 Microsoft Visual Basic 中相同。 例如,一个参数的名称可能是字符串。
RETURN_TYPE
int
函数返回数据类型的****VARTYPE
ORIGIN
int
函数的起源:1 为 MDX 函数。 2 表示用户自定义函数。
INTERFACE_NAME
String
用户定义函数的接口名称多维表达式(MDX)函数的组名称。
LIBRARY_NAME
String
用户定义函数的类型库的名称。 **'**null'为 MDX 函数。
DLL_NAME
String
(可选)实现用户定义函数的程序集的名称。 **返回'**null'的 MDX 函数。
HELP_FILE
String
(可选)包含用户定义函数的帮助文档的文件名。 **返回'**null'的 MDX 函数。
HELP_CONTEXT
int
(可选)返回该函数的帮助上下文 ID。
OBJECT
String
(可选)属性应用到的对象类的通用名称。 例如,对应于<level_name>的行集。 **成员函数返回"**级别"。 **对于用户定义函数或非属性 MDX 函数,返回'**null'。
CAPTION
String
函数的显示标题。
  • *行集按 **ORIGIN, INTERFACE_NAME, FUNCTION_NAME.排序

2.7.3.7. getHierarchies

检索描述特定维度中的每个层次结构的结果集。
由用于分析方法的 MDSCHEMA_HIERARCHIES XML 指定。
返回的结果集包含以下列。
Column name
Type
Description
CATALOG_NAME
String
此级别所属目录的名称。 **如果提供者不支持目录,则为'**null'。
SCHEMA_NAME
String
此级别所属模式的名称。 **'**null'如果提供程序不支持模式。
CUBE_NAME
String
此级别所属的多维数据集的名称。
DIMENSION_UNIQUE_NAME
String
此级别所属维度的唯一名称。 对于通过限定生成唯一名称的提供者,该名称的每个组件都用分隔符分隔。
HIERARCHY_UNIQUE_NAME
String
层次结构的唯一名称。 如果级别属于多个层次结构,那么它所属的每个层次结构都有一行。 对于通过限定生成唯一名称的提供者,该名称的每个组件都用分隔符分隔。
LEVEL_NAME
String
级别的名称。
LEVEL_UNIQUE_NAME
String
正确转义的级别的唯一名称。
LEVEL_GUID
String
不支持
LEVEL_CAPTION
String
与层次结构相关联的标签或标题。 主要用于展示目的。 如果标题不存在,则返回****LEVEL_NAME
LEVEL_NUMBER
int
级别与层次结构的根之间的距离。 根级别为 0(****0)
LEVEL_CARDINALITY
int
级别中成员的数量。
LEVEL_TYPE
int
关卡类型。 值是org.olap4j.Level.Type***enum 的'xmlaOrdinal*******'字段允许的。
DESCRIPTION
String
人类可读的关卡描述。 如果不存在描述,则为空。
CUSTOM_ROLLUP_SETTINGS
int
指定自定义汇总选项的位图: - MDLEVELS_CUSTOM_ROLLUP_EXPRESSION (0x01)表示该级别存在一个表达式。 (弃用) - MDLEVELS_CUSTOM_ROLLUP_COLUMN (0x02)表示此级别有一个自定义的 rollup 列。 - MDLEVELS_SKIPPED_LEVELS (0x04)表示有一个跳过的级别与该级别的成员相关联。 - MDLEVELS_CUSTOM_MEMBER_PROPERTIES (0x08)指示该级别的成员具有自定义成员属性。 - MDLEVELS_UNARY_OPERATOR (0x10)表示该级别上的成员具有一元操作符。
LEVEL_UNIQUE_SETTINGS
int
A bitmap that specifies which columns contain unique values, if the level only has members with unique names or keys. The Msmd.h file defines the following bit value constants for this bitmap:**MDDIMENSIONS_MEMBER_KEY_UNIQUE(1)MDDIMENSIONS_MEMBER_NAME_UNIQUE(2)The key is always unique in Microsoft SQL Server 2005 Analysis Services (SSAS). The name will be unique if the setting on the attribute isUniqueInDimensionorUniqueInAttribute**
LEVEL_IS_VISIBLE
boolean
A Boolean that indicates whether the level is visible.Always returns True. If the level is not visible, it will not be included in the schema rowset.
LEVEL_ORDERING_PROPERTY
String
The ID of the attribute that the level is sorted on.
LEVEL_DBTYPE
int
The****DBTYPEenumeration of the member key column that is used for the level attribute.Null if concatenated keys are used as the member key column.
LEVEL_MASTER_ UNIQUE_NAME
String
Always returns null.
LEVEL_NAME_ SQL_COLUMN_NAME
String
The SQL representation of the level member names.
LEVEL_KEY_ SQL_COLUMN_NAME
String
The SQL representation of the level member key values.
LEVEL_UNIQUE_NAME_ SQL_COLUMN_NAME
String
The SQL representation of the member unique names.
LEVEL_ATTRIBUTE_ HIERARCHY_NAME
String
The name of the attribute hierarchy providing the source of the level.
LEVEL_KEY_CARDINALITY
int
The number of columns in the level key.
LEVEL_ORIGIN
int
A bit map that defines how the level was sourced:****MD_ORIGIN_USER_DEFINEDidentifies levels in a user defined hierarchy.MD_ORIGIN_ATTRIBUTEidentifies levels in an attribute hierarchy.MD_ORIGIN_KEY_ATTRIBUTEidentifies levels in a key attribute hierarchy.MD_ORIGIN_INTERNALidentifies levels in attribute hierarchies that are not enabled.

评论