編寫聚總儲存大綱公式
使用公式編輯器,在 Essbase 彙總儲存 (ASO) 大綱上撰寫 MDX 公式。公式可讓您套用基本數學方程式、跨維度計算成員、執行條件性測試,以及根據使用者定義的屬性 (UDA) 進行篩選。
聚總儲存大綱公式
公式是純文字。您可以直接將公式輸入公式編輯器中,也可以在任何文字編輯器中建立公式,然後將文字貼到公式編輯器中。
MDX 式語法檢查會告訴您公式中的語法錯誤;例如,輸入錯誤的函數名稱或不存在的成員。可根據函數名稱清單驗證未知的成員名稱。如果您未連線至服務例項或與大綱關聯的應用程式, Essbase 可能會連線您以驗證未知的名稱。
驗證或儲存公式時,會進行語法檢查。錯誤會顯示在使用者介面中。如果發生錯誤,您可以選擇儲存或不儲存公式。如果您儲存有錯誤的公式,當您儲存大綱時會出現警告。當您計算有錯誤的公式時,系統會忽略該公式,並將該成員的值指定為 $MISSING。
語法檢查器無法警告您公式中的語意錯誤。當公式無法如預期般運作時,就會發生語意錯誤。在公式中尋找語意錯誤的一種方法,就是將定義公式的數值表示式放置到 MDX 查詢中,然後執行它來驗證結果是否如預期般。
您可以在維度建置資料來源中包含公式。請參閱設定維度建置欄位類型資訊。
彙總儲存大綱的基本方程式
您可將數學運算套用至公式,以建立基本方程式。例如,下列公式會套用至「ASOsamp 基本」立方體中的「平均單位 / 交易」成員:
[Units]/[Transactions]「平均單位 / 交易」中的公式會將單位數除以交易數,以達到每筆交易的平均單位數。
在彙總儲存大綱中,成員無法標記為費用項目。因此,計算中的函式 (例如 @VAR 和 @VARPER) 會透過考慮費用標籤來決定兩個成員之間的差異,與彙總儲存大綱無關。
MDX 減法運算子可用來計算兩個成員之間的差異。例如,下列公式可套用至 ASOsamp Basic 中名為 Price Diff 的新成員,以計算已付價格與原始價格之間的差異:
[Price Paid]-[Original Price]聚總儲存大綱中跨維度的成員
ASOsamp Basic 在名為「總計百分比」的成員上提供公式。此成員公式可識別由「交易」產生的「計量」總計百分比。總計百分比的公式:
Transactions/
(Transactions,Years,Months,[Transaction Type],[Payment Type],
Promotions,Age,[Income Level],Products,Stores,Geography)公式會指定成員 (交易) 除以元組 (交易、年度、...)。公式列出從每個維度到計算立方體中所有「交易」資料的最上層成員;亦即,不是「目前年度」成員的「交易」資料,而是「年度」維度所有成員的「交易」資料,而不是前兩個季的「交易」資料,而是所有月份的「交易」資料等等。如此一來,「總計」的值代表「交易」所產生之「計量」總計的百分比。
聚總儲存大綱公式中的條件性測試
您可以定義使用條件測試或一系列條件測試來決定成員值的公式。使用 IIF 函數,以其他條件執行測試。您可以巢狀 IIF 函數來建立更複雜的查詢。
此範例會為代表公司必須支付信用卡交易價格 (包含 5% 費用) 的成員指定公式。下列範例假設「貸方價格」成員已新增至「ASOsamp 基本」立方體的「測量」維度。「信用價格」具有下列公式,當付款型態為信用卡時,會將 5% 加到「已付價格」。
IIF (
[Payment Type].CurrentMember=[Credit Card],
[Price Paid] * 1.05, [Price Paid]
)使用 CASE、WHEN、THEN 建構來建立具有多個測試與其他條件的公式。
「篩選」函數會傳回符合指定搜尋條件之條件的輸入集元組。例如,若要建立所有產品的基準 (100),您可以新增「基準」成員並為其建立公式,如下所示:
Count(Filter(Descendants([PersonalElectronics],
[Products].Levels(0)),[Qtr1] > 100.00))彙總儲存大綱中的公式 UDA
UDA 是您為成員所建立的字詞或詞語。例如,在 Sample.Basic 中,Market 維度的最上層成員具有 UDA Small Market 或 UDA Major Market。
本主題中使用的「主要市場」範例顯示如何為成員建立公式,以顯示所有主要市場成員的銷售總和。此範例假設新成員 (主要市場總計) 已新增至 Sample.Basic。
-
MDX 提供布林函數 IsUDA,如果成員具有相關聯的 UDA 標籤,則傳回 TRUE。如果 Market 維度的目前成員具有 UDA「主要市場」,則以下語法傳回 TRUE:
IsUda([Market].CurrentMember, "Major Market") -
搭配 IsUDA (如下列語法所示) 使用時,篩選函數會循環執行 Market 維度的每個成員,並為具有主要市場 UDA 的每個成員傳回值:
Filter([Market].Members, IsUda([Market].CurrentMember, "Major Market")) -
Sum 函數會新增 Filter 函數傳回的值;對於 Major Market 範例,會產生下列公式:
Sum (Filter([Market].Members, IsUda([Market].CurrentMember, "Major Market")))此公式已附加至「主要市場總計」成員。