Descendants (MDX)
傳回特定層集或距離的成員之子系集合,選擇性包括或排除其他層級中的子系。
語法
Member expression syntax using a level expression
Descendants(Member_Expression [ , Level_Expression [ ,Desc_Flag ] ] )
Member expression syntax using a numeric expression
Descendants(Member_Expression [ , Distance [ ,Desc_Flag ] ] )
Set expression syntax using a level expression
Descendants(Set_Expression [ , Level_Expression [ ,Desc_Flag ] ] )
Member expression syntax using a numeric expression
Descendants(Set_Expression [ , Distance [ ,Desc_Flag ] ] )
引數
Member_Expression
傳回成員的有效多維度運算式 (MDX) 運算式。Set_Expression
傳回集合的有效多維度運算式 (MDX) 運算式。Level_Expression
傳回層級的有效多維度運算式 (MDX) 運算式。Distance
有效的數值運算式,會指定與指定成員間的距離。Desc_Flag
指定描述旗標的有效字串運算式,以區分可能的下階集合。
備註
如果指定了層級,Descendants 函數會傳回一個集合,包含在指定層級上指定成員或指定集合之成員的下階,並選擇性地以 Desc_Flag 中指定的旗標加以修改。
如果指定 Distance,Descendants 函數會傳回一個集合,包含指定成員或指定集合之成員的下階,這些成員與階層中指定成員的距離就是已指定的層級數目,並選擇性地以 Desc_Flag 中指定的旗標加以修改。一般說來,您可以使用這個函數搭配 Distance 引數,來處理不完全階層。如果指定的距離是零 (0),此函數會傳回只由指定成員或指定集合所組成的集合。
如果指定了集合運算式,則會個別為集合的每個成員解析 Descendants 函數,然後重新建立集合。換句話說,Descendants 函數使用的語法,與 MDX Generate 函數的功能相同。
如果沒有指定層級或距離,有兩個方法可決定此函數所用層級的預設值:為指定的成員 (如果指定了成員) 呼叫 Level 函數 (<<Member>>.Level),或為指定之集合 (如果指定了集合) 的每個成員呼叫 Level 函數。如果沒有指定層級運算式、距離或旗標,函數執行方式就如同使用下列語法一樣:
Descendants
(
Member_Expression ,
Member_Expression.Level ,
SELF_BEFORE_AFTER
)
如果指定了層級運算式,而且沒有指定描述旗標,函數執行方式就如同使用下列語法一樣。
Descendants
(
Member_Expression ,
Level_Expression,
SELF
)
無論指定的層級或距離為何,您都可以藉由變更描述旗標的值,包含或排除已指定之層級或距離的下階、已指定之層級或距離前後 (直到分葉節點) 的子系,以及所有分葉子系。下表說明 Desc_Flag 引數中允許的旗標。
旗標 |
描述 |
---|---|
SELF |
只傳回指定層級或指定距離的下階成員。如果指定的層級是指定成員的層級,此函數會包含指定成員。 |
AFTER |
傳回從屬於指定層級或距離之所有層級的下階成員。 |
BEFORE |
傳回指定成員和指定層級 (或指定距離) 間所有層級的下階成員。包含指定成員,但不包含來自指定層級或距離的成員。 |
BEFORE_AND_AFTER |
傳回從屬於指定成員層級之所有層級的下階成員。包含指定成員,但不包含來自指定層級或指定距離的成員。 |
SELF_AND_AFTER |
傳回來自指定層級或指定距離的下階成員,以及從屬於指定層級或指定距離之所有層級的下階成員。 |
SELF_AND_BEFORE |
傳回來自指定層級或指定距離的下階成員,以及介於指定成員和指定層級 (或指定距離) 之間所有層級的下階成員,包括指定的成員。 |
SELF_BEFORE_AFTER |
傳回從屬於指定成員層級之所有層級的下階成員,並且包含指定的成員。 |
LEAVES |
傳回介於指定成員和指定層級 (或指定距離) 之間的分葉下階成員。 |
範例
下列範例會傳回指定的成員 (United States),以及介於該指定成員 (United States) 和指定層級 (City) 上一個層級成員之間的成員。範例會傳回指定成員本身 (United States),以及 State-Province 層級 (City 層級的上一個層級) 的成員。這個範例包含標記為註解的引數,讓您能輕鬆測試這個函數的其他引數。
SELECT Descendants
([Geography].[Geography].[Country].&[United States]
//, [Geography].[Geography].[Country]
, [Geography].[Geography].[City]
//, [Geography].[Geography].Levels (3)
//, SELF
//, AFTER
, BEFORE
// BEFORE_AND_AFTER
//, SELF_AND_AFTER
//, SELF_AND_BEFORE
//,SELF_BEFORE_AFTER
//,LEAVES
) ON 0
FROM [Adventure Works]
以下範例會計算出 Adventure Works Cube 的 2003 會計年度每月的每一日,傳回 Measures.[Gross Profit Margin] 量值的每日平均。Descendants 函數會傳回從 [Date].[Fiscal] 階層目前的成員決定的一組天次。
WITH MEMBER Measures.[Avg Gross Profit Margin] AS Avg
(
Descendants( [Date].[Fiscal].CurrentMember,
[Date].[Fiscal].[Date]
),
Measures.[Gross Profit Margin]
)
SELECT
Measures.[Avg Gross Profit Margin] ON COLUMNS,
[Date].[Fiscal].[Month].Members ON ROWS
FROM [Adventure Works]
WHERE ([Date].[Fiscal Year].&[2003])
下列範例使用層級運算式,並且會傳回 Australia 每個 State-Province 的 Internet Sales Amount,及傳回每個 State-Province 佔 Australia 之 Internet Sales Amount 總計的百分比。這個範例使用 Item 函數,從 Ancestors 函數所傳回的集合擷取第一個 (也是唯一的) Tuple。
WITH MEMBER Measures.x AS
[Measures].[Internet Sales Amount] /
( [Measures].[Internet Sales Amount],
Ancestors
( [Customer].[Customer Geography].CurrentMember,
[Customer].[Customer Geography].[Country]
).Item (0)
), FORMAT_STRING = '0%'
SELECT {[Measures].[Internet Sales Amount], Measures.x} ON 0,
{Descendants
( [Customer].[Customer Geography].[Country].&[Australia],
[Customer].[Customer Geography].[State-Province], SELF
)
} ON 1
FROM [Adventure Works]