CSDL 概念
概念結構定義語言 (CSDL) 是以實體資料架構為基礎,這是一種用於表示不同資料類型的摘要,以便用程式設計方式存取、查詢或匯出不同的資料集。 CSDL 可用來表示報表的表格式模型,因為它特別適合用於定義資料驅動應用程式。
本節將說明實體資料模型如何適用於表格式模型,並且提供如何以 CSDL 表示模型的範例。
用來說明這些概念的範例都取自 AdventureWorks 範例資料庫 (可在 Codeplex 上取得)。 如需有關範例的詳細資訊,請參閱適用於 SQL Server 的 Adventure Works 範例。
CSDL 中模型的結構
描述報表模型及其資料的 CSDL 文件會以 xsd 陳述式為開頭,後面接著模型的定義。
模型是一種命名空間,其中包含下列主要實體、關聯和屬性:
EntityContainer 會列出模型中的資料表。
每個列出的資料表都會將 EntityContainer 設為 EntitySet。
兩個資料表之間的每個關聯性都會描述成 AssociationSet,其中定義關聯性端點和關聯性角色。
EntityType 元素會針對 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,藉以取得屬性的值。
關聯性
在實體資料架構中,關聯性會定義為實體之間的「關聯」(Association)。
關聯永遠只有兩端,每一端都指向資料表中的欄位或資料行。 因此,如果關聯性具有不同的端點,兩個資料表之間就可能會存在多個關聯性。 角色名稱會指派給關聯的端點,表示關聯如何用於資料模型的內容。 套用至與 Orders 資料表中客戶識別碼相關的客戶識別碼時,角色名稱的範例可能是 ShipTo。
模型的 CSDL 表示法也包含關聯的屬性,這些屬性會決定實體在關聯的「多重性」(Multiplicity) 方面彼此對應的方式。 多重性會指出位於資料表之間關聯性端點的屬性或資料行是位於關聯性的一端,還是多端。 一對一關聯性沒有個別的值。 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 報表用戶端整合所設計,而且包含支援在報表設計介面中呈現資料模型內之實體的屬性 (Property) 與屬性 (Attribute)。
視覺效果的延伸模組包含了一些屬性,可用於指定要搭配數值資料使用的預設彙總、指出文字欄位會指向影像的 URL,或是指定用來排序目前欄位的欄位。
名稱屬性和命名慣例
CSDL 規格規定每個實體都必須具有唯一名稱以及可當做索引鍵使用的識別碼。 此外,某些實體可以具有用於顯示用途的標題,以及根據實體使用位置而變更的內容名稱。
Documentation 元素讓報表設計師有機會提供實體的描述,以便協助商務使用者了解資料的意義。 某些實體也允許使用一個或多個 Annotation 屬性,這些屬性會提供額外的中繼資料,供應用程式或用戶端取用。
當您在 Analysis Services 工具中產生模型時,針對物件所建立的名稱就會遵循 Analysis Services 的物件命名和名稱唯一性慣例。 不過,因為 CSDL 屬於實體資料架構的一部分 (要求名稱遵守 C# 識別碼的慣例),所以當伺服器建立模型的 CSDL 時,伺服器會接受用於 Analysis Services 結構描述內部的名稱,並且自動建立符合 CSDL 需求的新物件名稱。 下表描述的是用以產生新名稱的作業。
規則 |
動作 |
範例 |
---|---|---|
沒有禁止的字元 |
由底線取代禁止的字元。 |
範例建構中 |
名稱必須是唯一的 |
如果兩個字串完全相同,就會附加底線及數字,讓其中一個字串成為唯一的字串 |
範例建構中 |
標題和限定詞都具有翻譯,而且對於給定的語言而言,可能會存在其中一個。 這表示,如果限定詞與名稱或限定詞與標題已串連,則字串可能使用兩種不同的語言。