資料來源和系結 (SSAS 多維度)

適用於: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

Cube、維度和其他 SQL Server Analysis Services 物件可以繫結至數據源。 資料來源可以是下列其中一個物件:

  • 關係型數據源。

  • SQL Server Analysis Services 管線,輸出數據列集(或分章數據列集)。

表示數據源的方法會因數據源的類型而有所不同。 例如,關係型數據源會以連接字串來區分。 如需資料來源的詳細資訊,請參閱多維度模型中 資料來源

不論使用的數據源為何,數據源檢視 (DSV) 都會包含數據源的元數據。 因此,Cube 或其他 SQL Server Analysis Services 對象的系結會表示為 DSV 的系結。 這些系結可以包含邏輯物件對象的系結,例如檢視、匯出數據行,以及數據源中不存在的關聯性。 SQL Server Analysis Services 會將計算結果列封裝至 DSV,然後將對應的 OLAP 量值系結至 DSV 中的數據行。 如需 DSV 的詳細資訊,請參閱多維度模型中 資料源檢視

每個 SQL Server Analysis Services 對象都會以自己的方式系結至數據源。 此外,這些對象的數據系結和數據源的定義可以與數據系結對象的定義內嵌提供(例如維度),或以個別的定義集來換行。

Analysis Services 數據類型

系結中使用的數據類型必須符合 SQL Server Analysis Services 所支援的數據類型。 SQL Server Analysis Services 中定義了下列數據類型:

Analysis Services 數據類型 描述
BigInt 64 位帶正負號的整數。 此數據類型會對應至 Microsoft .NET Framework 內的 Int64 數據類型,以及 OLE DB 內的DBTYPE_I8數據類型。
布爾 布爾值。 此數據類型會對應至 .NET Framework 內的布爾數據類型,以及 OLE DB 內的DBTYPE_BOOL數據類型。
貨幣 貨幣值,範圍從 -263(或 -922,337,203,685,477.5808)到 263-1(或 +922,337,203,685,477.5807),精確度為貨幣單位的十萬分之一。 此數據類型會對應至 .NET Framework 內的 Decimal 數據類型,以及 OLE DB 內的DBTYPE_CY數據類型。
日期 日期數據,儲存為雙精確度浮點數。 整個部分是自 1899 年 12 月 30 日以來的天數,而小數部分則為一天的一小部分。 此數據類型會對應至 .NET Framework 內的DateTime資料類型,以及 OLE DB內的DBTYPE_DATE資料類型。
-1.79E +308 到 1.79E +308 範圍內的雙精確度浮點數。 此數據類型會對應至 .NET Framework 內的 Double 數據類型,以及 OLE DB 內的DBTYPE_R8數據類型。
整數 32 位帶正負號的整數。 此數據類型會對應至 .NET Framework 內的 Int32 數據類型,以及 OLE DB 內的DBTYPE_I4數據類型。
-3.40E +38 到 3.40E +38 範圍內的單精度浮點數。 此數據類型會對應至 .NET Framework 內的Single 數據類型,以及 OLE DB 內的DBTYPE_R4數據類型。
SmallInt 16 位帶正負號的整數。 此數據類型會對應至 .NET Framework 內的 Int16 數據類型,以及 OLE DB 內的DBTYPE_I2數據類型。
TinyInt 8 位帶正負號的整數。 此數據類型會對應至 .NET Framework 內的 SByte 數據類型,以及 OLE DB 內的DBTYPE_I1數據類型。

注意:如果數據源包含 tinyint 資料類型的欄位,且 AutoIncrement 屬性設定為 True,則會轉換成數據源檢視中的整數。
UnsignedBigInt 64 位無符號整數。 此數據類型會對應至 .NET Framework 內的UInt64數據類型,以及OLE DB內的DBTYPE_UI8數據類型。
UnsignedInt 32 位無符號整數。 此數據類型會對應至 .NET Framework 內的UInt32數據類型,以及OLE DB內的DBTYPE_UI4數據類型。
UnsignedSmallInt 16 位無符號整數。 此數據類型會對應至 .NET Framework 內的UInt16數據類型,以及OLE DB內的DBTYPE_UI2數據類型。
WChar Unicode 字元的 Null 終止數據流。 此數據類型會對應至 .NET Framework 內的 String 數據類型,以及 OLE DB 內的DBTYPE_WSTR數據類型。

從數據源接收的所有數據都會轉換成系結中指定的 SSAS 類型(通常是在處理期間)。 如果無法執行轉換,就會引發錯誤(例如 String 到 Int)。 SQL Server Data Tools 通常會將系結中的數據類型設定為最符合數據源中來源類型的數據類型。 例如,SQL 類型 Date、DateTime、SmallDateTime、DateTime2、DateTimeOffset 會對應至 SSAS Date,而 SQL 類型 Time 會對應至 String。

維度的系結

維度的每個屬性都會系結至DSV中的數據行。 維度的所有屬性都必須來自單一數據源。 不過,屬性可以系結至不同數據表中的數據行。 數據表之間的關聯性定義於 DSV 中。 如果有多個關聯性集合存在同一個數據表,可能需要在 DSV 中引進具名查詢,才能做為「別名」數據表。 表達式和篩選條件是使用具名計算和具名查詢在 DSV 中定義。

MeasureGroups、Measure 和 Partitions 的系結

每個量值群組都有下列預設系結:

  • 量值群組系結至 DSV 中的數據表(例如,MeasureGroup.Source)。

  • 每個量值都會系結至該數據表中的數據行(例如,Measure.ValueColumn.Source)。

  • 每個量值群組維度都有一組 數據粒度屬性, 定義量值群組的數據粒度。 每個屬性都必須系結至事實數據表中包含屬性索引鍵的數據行或數據行。 (如需數據粒度屬性的詳細資訊,請參閱本主題稍後的 MeasureGroup 數據粒度屬性。

每個分割區可以選擇性地覆寫這些預設系結。 每個分割區都可以指定不同的數據源、數據表或查詢名稱,或篩選表達式。 最常見的數據分割策略是使用相同的數據源來覆寫每個分割區的數據表。 替代專案包括為每個分割區套用不同的篩選,或變更數據源。

默認數據源必須在 DSV 中定義,藉此提供架構資訊,包括關聯性的詳細數據。 在數據分割層級指定的任何其他數據表或查詢不需要列在 DSV 中,但是它們必須具有與針對量值群組定義之預設數據表相同的架構,或者至少必須包含量值或數據粒度屬性所使用的所有數據行。 每個量值和數據粒度屬性的詳細系結無法在數據分割層級覆寫,而且它們會假設為與針對量值群組定義的相同數據行。 因此,如果分割區使用實際上具有不同架構的數據源,則針對數據分割定義的 TableDefinition 查詢,必須產生與量值群組所使用的架構相同的架構。

MeasureGroup 數據粒度屬性

當量值群組的數據粒度符合資料庫中已知的數據粒度,而且事實數據表與維度數據表有直接關聯性時,數據粒度屬性只需要系結至事實數據表上適當的外鍵數據行或數據行。 例如,請考慮下列事實和維度數據表:

Sales(RequestedDate, OrderedProductID, ReplacementProductID, Qty)

Product(ProductID, ProductName,Category)

``

Relation: Sales.OrderedProductID -> Product.ProductID

Relation: Sales.ReplacementProductID -> Product.ProductID

``

如果您依已排序的產品進行分析,針對 Sales 維度角色的已排序產品,Product 數據粒度屬性將會繫結至 Sales.OrderedProductID。

不過,有時 數據粒度Attributes 可能不存在為事實數據表上的數據行。 例如,GranularityAttributes 在下列情況下可能不存在為數據行:

  • OLAP 數據粒度比來源中的數據粒度粗略。

  • 事實數據表與維度數據表之間的中繼數據表交集。

  • 維度索引鍵與維度數據表中的主鍵不同。

在所有這類情況下,都必須定義 DSV,讓數據粒度Attributes 存在於事實數據表上。 例如,可以引進具名查詢或匯出數據行。

例如,在與上述相同的範例數據表中,如果數據粒度是依 Category,則可以引進 Sales 的檢視:

SalesWithCategory(RequestedDate, OrderedProductID, ReplacementProductID, Qty, OrderedProductCategory)

SELECT Sales.*, Product.Category AS OrderedProductCategory

FROM Sales INNER JOIN Product

ON Sales.OrderedProductID = Product.ProductID

``

在此情況下,GranularityAttribute Category 會系結至 SalesWithCategory.OrderedProductCategory。

從決策支援物件移轉

決策支援物件 (DSO) 8.0 允許 PartitionMeasures 反彈。 因此,在這些情況下,移轉策略是建構適當的查詢。

同樣地,雖然 DSO 8.0 也允許此重新系結,但無法重新繫結數據分割內的維度屬性。 在這些情況下,移轉策略是在 DSV 中定義必要的具名查詢,讓分割區的 DSV 中存在相同的數據表和數據行,做為維度所使用的數據表和數據行。 這些案例可能需要採用簡單的移轉,其中 From/Join/Filter 子句會對應至單一具名查詢,而不是對應至結構化的一組相關數據表。 由於 DSO 8.0 可讓 PartitionDimension 重新系結,即使分割區使用相同的數據源,移轉可能也需要相同數據源的多個 DSV。

在 DSO 8.0 中,對應系結可以透過系結至維度數據表上的主鍵或事實數據表上的外鍵,以兩種不同的方式表示,視是否採用優化架構而定。 在 ASSL 中,不會區分這兩種不同的形式。

即使使用不包含維度數據表的數據源,系結對事實數據表中的外鍵數據行進行系結,也不會套用至維度數據表中主鍵數據行的數據分割。

採礦模型的系結

採礦模型是關係型或 OLAP。 關係型採礦模型的數據系結與 OLAP 採礦模型的系結大不相同。

關係型採礦模型的系結

關係型採礦模型依賴 DSV 中定義的關聯性,來解決與哪些數據源系結的模棱兩可。 在關係型採礦模型中,數據系結會遵循下列規則:

  • 每個非巢狀數據表數據行都會系結至案例數據表上的數據行或與案例數據表相關的數據表(在多對一或一對一關聯性之後)。 DSV 會定義數據表之間的關聯性。

  • 每個巢狀數據表數據行都會系結至源數據表。 巢狀數據表數據行所擁有的數據行接著會系結至該源數據表上的數據行或與源數據表相關的數據表。 (同樣地,系結遵循多對一或一對一關係。採礦模型系結不會提供巢狀數據表的聯結路徑。 相反地,DSV 中定義的關聯性會提供這項資訊。

OLAP 採礦模型的系結

OLAP 採礦模型沒有 DSV 的對等專案。 因此,數據系結必須在數據行與數據源之間提供任何混淆。 例如,採礦模型可以根據 Sales Cube,而數據行可以根據 Qty、Amount 和 Product Name。 或者,採礦模型可以以 Product 為基礎,而數據行可以根據產品名稱、產品色彩,以及具有 Sales Qty 的巢狀數據表。

在 OLAP 採礦模型中,數據系結會遵循下列規則:

  • 每個非巢狀數據表數據行都會繫結至 Cube 上的量值、該 Cube 維度上的屬性(指定 CubeDimension,以釐清維度角色的情況),或維度上的屬性。

  • 每個巢狀資料表資料行都會繫結至 CubeDimension。 也就是說,它會定義如何從維度巡覽至相關 Cube,或從 Cube 流覽至其中一個維度的巢狀數據表(在較不常見的案例中)。

離線系結

離線系結可讓您在命令持續期間暫時變更現有的數據系結。 內嵌系結是指包含在命令中且不會保存的系結。 只有在該特定命令執行時,才會套用離線系結。 相反地,內嵌系結會包含在 ASSL 物件定義中,並與伺服器元數據中的物件定義一起保存。

ASSL 允許在 Process 命令、不在批次中或 Batch 命令上指定行外系結。 如果在 Batch 命令上指定了離線系結,Batch 命令中指定的所有系結都會建立新的系結內容,在其中執行批次的所有 Process 命令。 這個新的系結內容包含因為 Process 命令而間接處理的物件。

在命令上指定行外系結時,它們會覆寫所指定物件保存的 DDL 中包含的內嵌系結。 這些已處理的物件可能包含直接在 Process 命令中命名的物件,或可能包含其他物件,其處理會自動起始為處理的一部分。

使用處理命令,包括選擇性 Bindings 集合物件,以指定行外系結。 選擇性 系結 集合包含下列元素。

財產 基數 類型 描述
系結 0-n 系結 提供新系結的集合。
DataSource 0-1 DataSource 取代已使用之伺服器 DataSource
DataSourceView 0-1 DataSourceView 從 取代 DataSourceView

已使用的伺服器。

與離線系結相關的所有元素都是選擇性的。 對於未指定的任何專案,ASSL 會使用保存物件之 DDL 中包含的規格。 Process 命令中 DataSourceDataSourceView 的規格是選擇性的。 如果指定 DataSourceDataSourceView,它們就不會具現化,也不會在 Process 命令完成之後保存。

離線系結類型的定義

在跨行 Bindings 集合內,ASSL 允許多個物件的系結集合,每個 Binding。 每個 Binding 都有一個延伸的對象參考,這類似於對象參考,但它也可以參考次要物件(例如維度屬性和量值群組屬性)。 此對象採用 Process 命令中 Object 元素的一般形式,不同之處在於 <Object></Object> 標記不存在。

指定系結的每個物件都是由表單的 XML 元素來識別 <物件>識別碼(例如,DimensionID)。 當您以表單 <物件>識別元明確識別物件之後,就可以識別正在指定系結的專案,這通常是 Source。 常見的案例是,SourceDataItem上的屬性,這是屬性中數據行系結的情況。 在此情況下,您未指定 DataItem 標記;相反地,您只需指定 Source 屬性,就好像直接在要系結的數據行上一樣。

KeyColumns 會藉由在 KeyColumns 集合內的順序來識別。 例如,無法指定屬性的第一個和第三個索引鍵數據行,因為無法指出要略過第二個索引鍵數據行。 所有索引鍵數據行都必須出現在維度屬性的行外系結中。

翻譯,雖然它們沒有標識符,但語意上是由其語言所識別。 因此,系結 內的 翻譯 必須包含其語言標識符。

在 DDL 中不存在 系結 中允許的另一個元素是 ParentColumnID,用於數據採礦的巢狀數據表。 在此情況下,必須識別提供系結之巢狀數據表中的父數據行。