CSDL 概念

概念性架构定义语言 (CSDL) 基于实体数据框架。实体数据框架是一个抽象概念,用于以某种方式表示不同类型的数据,以便能够以编程方式访问、查询或导出不同的数据集。 CSDL 用于表示用来报告的表格模型,因为后者特别适用于定义数据驱动的应用程序。

本节说明了实体数据模型如何应用于表格模型,并提供了有关如何用 CSDL 表示模型的示例。

用于说明这些概念的示例取自 Codeplex 上提供的 AdventureWorks 示例数据库。 有关示例的详细信息,请参阅 SQL Server 的 Adventure Works 示例

用 CSDL 表示的模型的结构

描述报表模型及其数据的 CSDL 文档以 xsd 语句开头,后跟模型的定义。

模型是一个命名空间,其中包含以下主要实体、关联和属性:

  • EntityContainer 列出了模型中的表。

  • 每个表将与 EntityContainer 一起作为 EntitySet 列出。

  • 两个表之间的每个关系均被描述为一个 AssociationSet,用于定义关系端点和关系角色。

  • EntityType 元素针对 BISM 进行了扩展,以提供有关 BISM 中的表和列的其他详细信息,包括用于排序和显示的属性。

  • Measure 元素定义了可在模型中使用的计算。 可通过使用新的 KPI 元素添加一组特殊显示属性来将度量值转换为 KPI。

  • 没有针对透视的单独表示形式。 虽然透视中未包含的列和表将用 CSDL 表示,但会由 Hidden 属性进行标记。

实体、EntitySet 和 EntityType

已对实体数据框架中的实体概念进行扩展,以便表示数据模型中的列和表。 以下摘录说明了仅包含三个表的简单模型中的 EntitySet 元素的列表。

<EntityContainer Name="SimpleModel">
<EntitySet Name="DimCustomer"EntityType="SimpleModel.DimCustomer">
     <bi:EntitySet />
   </EntitySet>
<EntitySet Name="DimDate" EntityType="SimpleModel.DimDate">
     <bi:EntitySet />
   </EntitySet>
<EntitySet Name="DimGeography" EntityType="SimpleModel.DimGeography">
     <bi:EntitySet />
   </EntitySet> />

EntitySet 不包含表中的列或数据的相关信息。 EntityType 元素中提供了列及其属性的详细说明。

每个实体(表)的 EntityType 元素包括一个属性集合,这些属性定义了键列、列的数据类型和长度、可为 null 性、排序行为等。 例如,以下 CSDL 摘录描述了 Customer 表中的三列。 第一列是模型在内部使用的特殊隐藏列。

<EntityType Name="Customer">
  <Key>
     <PropertyRef Name="RowNumber" />
  </Key>
    <Property Name="RowNumber" Type="Int64" Nullable="false">
     <bi:Property Hidden="true" Contents="RowNumber"
       Stability="RowNumber" />
    </Property>
    <Property Name="CustomerKey" Type="Int64" Nullable="false">
      <bi:Property />
    </Property>
     <Property Name="FirstName" Type="String" MaxLength="Max" FixedLength="false">
       <bi:Property />
      </Property>

为了限制生成的 CSDL 文档的大小,在实体中出现多次的属性将由对某个现有属性的引用指定,这样一来,只需为 EntityType 列出该属性一次。 客户端应用程序可通过查找与 OriginEntityType 匹配的 EntityType 来获取属性的值。

关系

在实体数据框架中,关系被定义为实体之间的关联。

关联始终有两个端点,每个端点指向表中的一个字段或一个列。 因此,两个表之间可以存在多个关系,前提是这些关系具有不同的端点。 将为关联的端点分配角色名称,并指示如何在数据模型的上下文中使用关联。 例如,在对与 Orders 表中的客户 ID 相关的客户 ID 应用角色名称时,角色名称可能为 ShipTo。

模型的 CSDL 表示形式还包含关联的一些属性,这些属性确定了实体如何根据关联的多重性相互映射。 多重性指示位于表之间的关系的端点上的属性或列是位于关系的一方还是多方。 没有针对一对一关系的单独的值。 CSDL 的 BISM 扩展支持多重性为 0(表示实体未与任何对象关联)或为 0..1(表示一对一关系或一对多关系)。

以下示例表示 Date 表和 ProductInventory 表之间的关系的 CSDL 定义,其中,这两个表通过 DateAlternateKey 列联接。 请注意,默认情况下,AssociationSet 的名称是关系中涉及的列的完全限定名称。 但是,可以在设计模型时将此行为更改为使用其他命名格式。

<AssociationSet Name="ProductInventory_Date_DateKey" Association="Model.ProductInventory_Date_DateKey">
              <End EntitySet="ProductInventory" />
              <End EntitySet="Date" />
              <bi:AssociationSet />
            </AssociationSet>

可视化和导航属性

对于用于表格建模的实体数据框架的扩展而言,用于定义报告层中的表示形式和导航实体之间的关系的属性是该扩展的一个重要部分。 通常,基于客户端应用程序将指定排序和表示形式的其他详细信息这种假设,在创建数据模型时,您会认为控制数据的排序和分组方式或可能的默认值并不重要。 但是,Analysis Services 表格模型设计为可以与 Power View 报表客户端集成,并在报表设计图面中包含支持数据模型中的实体的表示形式的属性和特性。

针对可视化的扩展包括用于以下用途的属性:指定要用于数值数据的默认聚合、指示指向图像的 URL 的文本字段或指定用于为当前字段进行排序的字段。

名称属性和命名约定

CSDL 规范规定每个实体具有一个唯一名称和一个可用作密钥的标识符。 此外,某些实体可具有用于显示的标题和随实体的使用位置的不同而不同的上下文名称。

Documentation 元素使报表设计人员能够提供实体的说明并帮助业务用户了解数据的含义。 某些实体还允许一个或多个 Annotation 属性,这些属性提供了可由应用程序或客户端使用的额外元数据。

使用 Analysis Services 工具生成模型时,为对象创建的名称应遵循对象命名的 Analysis Services 约定和名称唯一性。 但是,由于 CSDL 是实体数据框架的一部分,而实体数据框架要求名称遵循 C# 标识符的约定,因此,服务器在为模型创建 CSDL 时将采用 Analysis Services 架构中使用的名称并将自动创建符合 CSDL 要求的新对象名称。 下表描述了用于生成新名称的操作。

规则

操作

示例

无禁止字符

禁止字符将由下划线替换。

示例正在构建中

名称必须是唯一的

如果两个字符串相同,则通过为一个字符串追加下划线和数字使其具有唯一性

示例正在构建中

标题和限定符都有对应的译文,而对于某种给定语言,可能只存在二者之一。 这意味着,当限定符与名称或限定符与标题串联时,字符串可用两种不同的语言表示。

请参阅

概念

用于表格模型的 CSDL 扩展插件简介