共用方式為


在 MDX 中建立命名集 (MDX)

集合運算式可能是一項冗長而複雜的宣告,因而不太容易遵照和了解。或者,可能會相當頻繁地使用集合運算式,一再定義該集合就變得相當惱人。若要讓冗長、複雜或經常使用的運算式更為容易處理,多維度運算式 (MDX) 可讓您將這類運算式定義為「命名集」(Named Set)。

基本上,命名集是一個已指派別名的集合運算式。命名集可以包含通常被包含於集合中的任何成員或函數。因為 MDX 會將命名集別名視為集合運算式,您可以在可接受集合運算式的任何地方使用那個別名。

您可以定義命名集,以擁有以下其中一個內容:

  • 查詢範圍:若要建立一個命名集,把它定義為 MDX 查詢的一部份,而且範圍限制在查詢內,請使用 WITH 關鍵字。然後您就可以在 MDX SELECT 陳述式內使用命名集。使用這種方式,可以變更利用 WITH 關鍵字建立的命名集,而不會影響到 SELECT 陳述式。

    如需如何使用 WITH 關鍵字來建立命名集的詳細資訊,請參閱<建立查詢範圍命名集 (MDX)>。

  • 工作階段範圍:若要建立一個範圍超出查詢內容的命名集,也就是說它的範圍是 MDX 工作階段的存留時間,您可以使用 CREATE SET 陳述式。使用 CREATE SET 陳述式定義的命名集,可以在那個工作階段中的所有 MDX 查詢使用。對於需要在不同查詢中重覆使用某一命名集的用戶端應用程式而言,CREATE SET 陳述式是很有用處的。

    如需如何使用 CREATE SET 陳述式來建立工作階段中的命名集的詳細資訊,請參閱<建立工作階段範圍命名集 (MDX)>。

  • 全域範圍:若要建立一個範圍超出使用者工作階段內容的命名集,也就是說,它的範圍是執行中執行個體的存留期間,您可以在預設 MDX 指令碼中使用 CREATE SET 陳述式。如需詳細資訊,請參閱<基本 MDX 指令碼 (MDX)>。在預設 MDX 指令碼中使用 CREATE SET 所定義的命名集,可以提供給所有使用者,供他們在任何工作階段的 MDX 查詢中使用。

命名集的內容可以在建立時評估 (靜態),或是在用於查詢的任何時間評估 (動態)。CREATE SET [STATIC|DYNAMIC] 語法會定義何時評估集合。如需詳細資訊,請參閱<CREATE SET 陳述式 (MDX)CREATE SET 陳述式 (MDX)>。根據預設,如果 CREATE 陳述式中未指定任何關鍵字,集合就會建立為 STATIC。

具有動態行為的命名集可以在全域範圍定義 (在預設 MDX 指令碼中),或是在工作階段的範圍中定義。但是,只有當解析查詢時,才會評估這些命名集 (查詢範圍)。嘗試在工作階段或全域範圍中評估動態集時,都將會引發錯誤;動態集的間接參考同樣會發生這個狀況。以下是可以參考動態命名集的計算清單 (以全域方式定義或在工作階段範圍中定義)。

  • 導出成員

  • 動態命名集

  • KPI

  • 指派運算式上的右邊 (RHS) 運算式

  • 資料格計算的條件運算式

  • 資料格計算的值運算式

在任何 MDX 查詢中,都可以參考動態集,因為動態集將會在查詢範圍中評估。

警告注意事項警告

因為 CREATE SET 命令期間不會評估動態集,所以將會建立動態集所相依之所有物件的連結 (靜態或動態)。因此,要等到卸除動態集之後,才可卸除任何或所有參考的物件。例如,如果在參考工作階段導出成員的工作階段上建立動態命名集,則當動態命名集仍然存在時,無法刪除該導出成員。

動態命名集解析

在任何時間,最多可以有三個版本的動態集存在:

  • 一個位於 Cube 指令碼所使用的全域範圍中

  • 一個位於工作階段計算所使用的工作階段範圍中

  • 一個位於查詢計算所使用的查詢範圍中

您的計算要使用哪一個版本完全取決於運算式的內容,以及如何參考動態命名集;間接參考也大多是這個情況。

例如,如果您有一個使用工作階段動態命名集的工作階段導出成員,而且您在查詢中使用該導出成員,則此命名集將會在工作階段範圍中評估,而查詢的 WHERE 子句對於此命名集則沒有任何作用。但是,如果您直接在查詢中使用相同的動態命名集,則此命名集將會在查詢範圍中評估,而 WHERE 子句可能會影響命名集的結果。