MDX 資料修改 - 使用 Cube 回寫
適用於: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium
您可以使用 UPDATE CUBE 語句來更新 Cube。 此語句可讓您使用特定值來更新 Tuple。 若要有效地使用 UPDATE CUBE 語句來更新 Cube,您必須瞭解語句的語法、可能發生的錯誤條件,以及更新對 Cube 的影響。
UPDATE CUBE 語句語法
下列語法描述 UPDATE CUBE 語句:
UPDATE [CUBE] <Cube_Name> SET <tuple>.VALUE = <value> [,<tuple>.VALUE = <value>...]
[ USE_EQUAL_ALLOCATION | USE_EQUAL_INCREMENT |
USE_WEIGHTED_ALLOCATION [BY <weight value_expression>] |
USE_WEIGHTED_INCREMENT [BY <weight value_expression>] ]
如果未指定 Tuple 的完整座標集,則未指定的座標會使用階層的預設成員。 所識別的 Tuple 必須參考以 Sum 函式匯總的儲存格,而且不得使用匯出成員做為儲存格的其中一個座標。
您可以將 UPDATE CUBE 語句視為子程式,以產生一系列的個別回寫作業至不可部分完成的儲存格。 所有這些個別回寫作業接著會積存到指定的總和。
注意
當更新的儲存格沒有重疊時,更新隔離等級 連接字串屬性可用來增強 UPDATE CUBE 的效能。 如需詳細資訊,請參閱 ConnectionString。
例
您可以使用 Adventure Works Cube 中的 Sales Targets 量值群組來測試 UPDATE CUBE。 此量值群組是由 SUM 匯總的量值所組成,這是 UPDATE CUBE 的需求。
在 Adventure Works 資料庫中啟用 Sales Targets 量值群組的回寫。 在 Management Studio 中,以滑鼠右鍵按兩下量值群組,指向 [
回寫選項] ,選擇 [啟用回寫]。 您應該會在 [回寫] 資料夾中看到新的回寫資料表。 數據表名稱WriteTable_Fact銷售配額。
開啟 MDX 查詢視窗。 執行下列 select 語句以檢視原始值:
SELECT [Measures].[Sales Amount Quota] on 0 , [Employee].[Employee Department].[Title].&[Sales Representative].children on 1 FROM [Adventure Works]
您應該會看到每個代表的銷售金額配額。
執行更新 Cube 語句來回寫新的值。 在此範例中,我們將銷售量配額設定為 0。 由於新值為 0,因此請勿指定配置方法。
UPDATE CUBE [Adventure Works] SET ([Measures].[Sales Amount Quota], [Employee].[Employee Department].[Department].&[Sales]) = 0
重新執行 SELECT 語句。 您現在應該會看到配額為零。
回寫值受限於目前的會話。 若要跨使用者和會話保存值,請處理回寫數據表。 在 Management Studio 中,以滑鼠右鍵按兩下 [銷售配額WriteTable_Fact],然後選擇 [程式]。
若要指定配置方法,新值必須大於零。 在此範例中,Sales Amount Quota 的新值是 200 萬,而配置方法會將金額分散到所有銷售代表。
UPDATE CUBE [Adventure Works]
SET ([Measures].[Sales Amount Quota], [Employee].[Employee Department].[Department].&[Sales]) = 2000000
USE_EQUAL_ALLOCATION
錯誤條件
下表說明造成回寫失敗的原因,以及這些錯誤的結果。
錯誤條件 | 結果 |
---|---|
更新包含與彼此不存在之相同維度的成員。 | 更新將會失敗。 Cube 空間不會包含參考的儲存格。 |
更新包含來源為未帶正負號類型的量值。 | 更新將會失敗。 遞增要求量值能夠接受負值。 |
Update 包含匯總總和以外的量值。 | 引發錯誤。 |
在 Subcube 上嘗試更新。 | 引發錯誤。 |
Cube 變更的影響
下列變更不會影響回寫:
Cube、Cube 的量值群組或 Cube 維度的處理。
將屬性新增至任何維度。
加入新的維度。
刪除不包含回寫的維度。
新增、修改或移除階層。
新增量值。
在移除回寫資料的情況下,無法進行下列變更:
如果回寫中包含屬性,則刪除屬性或其屬性階層。 這包括明確移除屬性或其屬性階層,或移除屬性的父維度。
刪除回寫中包含的量值。
將不含 (All) 的屬性 層級新增至回寫中包含的維度。
變更回寫中包含的維度維度粒度。