SQL Server Analysis Services 个性化扩展是实现插件体系结构的基础。 在插件体系结构中,可以动态开发新的多维数据集对象和功能,并与其他开发人员轻松共享它们。 因此,Analysis Services 个性化扩展提供了可实现以下目的的功能:
动态设计和部署 在设计和部署 Analysis Services 个性化扩展后,用户有权在下一个用户会话开始时访问对象和功能。
接口独立性 无论用于创建 Analysis Services 个性化扩展的接口如何,用户都可以使用任何接口来访问对象和功能。
会话上下文 Analysis Services 个性化设置扩展不是现有基础结构中的永久对象,不需要重新处理多维数据集。 用户连接到数据库时会公开和创建用户,并保留该用户会话的长度。
快速分发 与其他软件开发人员共享 Analysis Services 个性化扩展,而无需深入了解有关此扩展功能的位置或方法的详细规范。
Analysis Services 个性化设置扩展有许多用途。 例如,贵公司的销售涉及不同的货币。 创建一个计算成员,该成员以访问多维数据集的人员的本地货币返回合并销售额。 将此成员创建为个性化扩展。 然后,将此计算成员共享给一组用户。 共享后,这些用户在连接到服务器后立即有权立即访问计算成员。 即使它们没有使用与用于创建计算成员的接口相同的接口,它们也具有访问权限。
Analysis Services 个性化扩展是对现有托管程序集体系结构的简单而优雅的修改,在 Analysis Services Microsoft.AnalysisServices.AdomdServer 对象模型、多维表达式(MDX)语法和架构行集中公开。
逻辑体系结构
Analysis Services 个性化设置扩展的体系结构基于托管程序集体系结构和以下四个基本元素:
[PlugInAttribute] 自定义属性
启动服务时,Analysis Services 会加载所需的程序集,并确定哪些类具有 Microsoft.AnalysisServices.AdomdServer.PlugInAttribute 自定义属性。
注释
.NET Framework 将自定义属性定义为描述代码并影响运行时行为的一种方式。 有关详细信息,请参阅 MSDN 上的 .NET Framework 开发人员指南中的主题“属性概述”。
对于具有 Microsoft.AnalysisServices.AdomdServer.PlugInAttribute 自定义属性的所有类,Analysis Services 将调用其默认构造函数。 在启动时调用所有构造函数提供了一个公共位置,可从中生成新对象,并且独立于任何用户活动。
除了生成关于创作和管理个性化扩展的信息的小缓存外,类构造函数通常订阅 Microsoft.AnalysisServices.AdomdServer.Server.SessionOpened 和 Microsoft.AnalysisServices.AdomdServer.Server.SessionClosing 事件。 未能订阅这些事件可能会导致该类被公共语言运行时(CLR)垃圾回收器不当地标记为清理。
会话上下文
对于基于个性化设置扩展的对象,Analysis Services 会在客户端会话期间创建执行环境,并动态生成此环境中的大多数对象。 与其他任何 CLR 程序集一样,此执行环境也有权访问其他函数和存储过程。 用户会话结束时,Analysis Services 将删除动态创建的对象并关闭执行环境。
事件
对象创建由会话事件 On-Cube-OpenedCubeOpened 和 On-Cube-ClosingCubeClosing.
客户端与服务器之间的通信通过特定事件发生。 这些事件使客户端知道导致生成客户端对象的情况。 客户端的环境是使用两组事件动态创建的:会话事件和多维数据集事件。
会话事件与服务器对象相关联。 当客户端登录到服务器时,Analysis Services 将创建会话并触发 Microsoft.AnalysisServices.AdomdServer.Server.SessionOpened 事件。 当客户端在服务器上结束会话时,Analysis Services 将触发 Microsoft.AnalysisServices.AdomdServer.Server.SessionClosing 事件。
多维数据集事件与连接对象相关联。 连接到多维数据集会触发 Microsoft.AnalysisServices.AdomdServer.AdomdConnection.CubeOpened 事件。 关闭与多维数据集的连接,方法是关闭多维数据集或更改为其他多维数据集,触发 Microsoft.AnalysisServices.AdomdServer.AdomdConnection.CubeClosing 事件。
可跟踪性和错误处理
所有活动都可以使用 SQL Server Profiler 进行跟踪。 未经处理的错误将报告给 Windows 事件日志。
所有对象创作和管理都独立于此体系结构,是对象开发人员的唯一责任。
基础结构基础
Analysis Services 个性化设置扩展基于现有组件。 下面是提供个性化扩展功能的增强和改进的摘要。
程序集
可将自定义属性 Microsoft.AnalysisServices.AdomdServer.PlugInAttribute 添加到自定义程序集,以标识 Analysis Services 个性化扩展类。
对 AdomdServer 对象模型的更改
Microsoft.AnalysisServices.AdomdServer 对象模型中的以下对象已增强或添加到模型中。
New AdomdConnection 类
Microsoft.AnalysisServices.AdomdServer.AdomdConnection 类是新的,通过属性和事件公开多个个性化扩展。
性能
Microsoft.AnalysisServices.AdomdServer.AdomdConnection.SessionID*,它是表示当前连接的会话 ID 的只读字符串值。
Microsoft.AnalysisServices.AdomdServer.AdomdConnection.ClientCulture*,这是对与当前会话关联的客户端区域性的只读引用。
Microsoft.AnalysisServices.AdomdServer.AdomdConnection.User*,它是对表示当前用户的标识接口的只读引用。
事件
Microsoft.AnalysisServices.AdomdServer.AdomdConnection.CubeOpened
Microsoft.AnalysisServices.AdomdServer.AdomdConnection.CubeClosing
Context 类中的新属性
Microsoft.AnalysisServices.AdomdServer.Context 类有两个新属性:
Microsoft.AnalysisServices.AdomdServer.Context.Server*,这是对新服务器对象的只读引用。
Microsoft.AnalysisServices.AdomdServer.Context.CurrentConnection*,这是对新 Microsoft.AnalysisServices.AdomdServer.AdomdConnection 对象的只读引用。
New Server 类
Microsoft.AnalysisServices.AdomdServer.Server 类是新的,通过类属性和事件公开多个个性化扩展。
性能
Microsoft.AnalysisServices.AdomdServer.Server.Name*,表示服务器名称的只读字符串值。
Microsoft.AnalysisServices.AdomdServer.Server.Culture*,对与服务器关联的全局区域性的只读引用。
事件
AdomdCommand 类
Microsoft.AnalysisServices.AdomdServer.AdomdCommand 类现在支持以下 MDX 命令:
MDX 扩展和增强功能
CREATE MEMBER 命令通过 caption 属性、 display_folder 属性和 associated_measure_group 属性增强。
添加了 UPDATE MEMBER 命令,以避免在需要更新时重新创建成员,从而在解决计算时失去优先级。 更新无法更改计算成员的范围,将计算成员移到其他父级,或定义不同的 solveorder成员。
CREATE SET 命令通过 caption 属性、 display_folder 属性和新 STATIC | DYNAMIC 关键字进行增强。
静态 表示仅在创建时评估集。
动态 表示每次在查询中使用集时都会计算集。 默认值为 STATIC 省略关键字。
CREATE KPI 和 DROP KPI 命令将添加到 MDX 语法。 可以从任何 MDX 脚本动态创建 KPI。
架构行集扩展
在MDSCHEMA_MEMBERS 添加范围 列。 范围值如下所示:MDMEMBER_SCOPE_GLOBAL=1,MDMEMBER_SCOPE_SESSION=2。
在MDSCHEMA_SETS 添加set_evaluation_context 列。 设置评估上下文值如下所示:MDSET_RESOLUTION_STATIC = 1,MDSET_RESOLUTION_DYNAMIC = 2。
在MDSCHEMA_KPIS添加范围列。 范围值如下所示:MDKPI_SCOPE_GLOBAL=1,MDKPI_SCOPE_SESSION=2。