MDX函數(官方順序) 1. AddCalculatedMembers (MDX) 返回通過將計算成員添加到指定集而生成的集。 語法: AddCalculatedMembers(Set_Expression) 參數: Set_Expression 返回集的有效多維表達式 (MDX)。 預設情況下,M ...
MDX函數(官方順序)
1. AddCalculatedMembers (MDX)
返回通過將計算成員添加到指定集而生成的集。
語法:
AddCalculatedMembers(Set_Expression)
參數:
Set_Expression
返回集的有效多維表達式 (MDX)。
預設情況下,MDX在解析集函數時會排除計算成員。AddCalculatedMembers 函數會檢查 Set_Expression, 中所指定的集表達式,並包括與該集表達式作用域內所含成員處於同級的計算成員。
此函數只能與一維集表達式一起使用。
示例:
示例1:
-- This query returns the calculated members for the cube
-- by retrieving all members, and then excluding non-calculated members.
SELECT
AddCalculatedMembers(
{[Measures].Members}
)-[Measures].Members ON COLUMNS
FROM [Adventure Works]
示例2:
從 Adventure Works 多維數據集中除了返回 Measures 維度中的所有計算成員外,還返回 Measures.[Unit Price] 成員。
SELECT
AddCalculatedMembers({Measures.[Unit Price]}) ON COLUMNS
FROM
[Adventure Works]
2. Aggregate (MDX)
返回一個數字,該數字是通過對集表達式返回的單元進行聚合而算出的。 如果未提供數值表達式,此函數將使用為每個度量值指定的預設聚合運算符來聚合當前查詢上下文中的每個度量值。 如果指定了數值表達式,此函數將先計算指定集中的每個單元的數值表達式,然後再求和。
語法:
Aggregate(Set_Expression [ ,Numeric_Expression ])
參數:
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression
通常是單元坐標(返回數字)的多維表達式 (MDX) 的有效數值表達式。
註釋:
如果指定了一組空元組或一個空集,則此函數返回一個空值。
下表說明瞭與不同的聚合函數結合使用時 Aggregate 函數的行為有何不同。
聚合運算符 |
結果 |
Sum |
返回對集求得的值之和。 |
Count |
返回對集求得的值數。 |
Max |
返回對集求得的最大值。 |
Min |
返回對集求得的最小值。 |
半累加性聚合函數 |
返回將形狀投影到時間軸後,對集進行的半累加性計算。 |
非重覆計數 |
當切片器軸包括某個集時,構成子多維數據集的事實數據的聚合。 為集的每個成員返回非重覆計數。 結果取決於正在聚合的單元的安全性而不是需要計算的單元的安全性。 集的單元安全性生成錯誤;低於指定集的粒度的單元安全性將被忽略。 對集進行計算會生成錯誤。 集粒度以下的計算將被忽略。 當集包含一個成員及其一個或多個子級時,對該集進行的非重覆計數將返回跨越子成員事實數據範圍的非重覆計數。 |
不能聚合的屬性 |
返回值之和。 |
混合式聚合函數 |
不支持這種聚合函數,將生成錯誤。 |
一元運算符 |
不遵從;通過求和聚合值。 |
計算度量值 |
設置求解次序以確保應用計算度量值。 |
計算成員 |
應用一般規則,即最後一個求解次序優先。 |
分配 |
分配根據度量值聚合函數聚合。 如果度量值聚合函數是非重覆計數,則對分配求和。 |
示例:
示例1:
下麵的示例將從 Adventure Works 多維數據集中返回在 2003 日曆年前八個月(包含在 Date 維度中)聚合的 Measures.[Order Quantity] 成員之和。
WITH MEMBER [Date].[Calendar].[First8Months2003] AS
Aggregate(
PeriodsToDate(
[Date].[Calendar].[Calendar Year],
[Date].[Calendar].[Month].[August 2003]
)
)
SELECT
[Date].[Calendar].[First8Months2003] ON COLUMNS,
[Product].[Category].Children ON ROWS
FROM
[Adventure Works]
WHERE
[Measures].[Order Quantity]
示例2:下麵的示例對 2003 日曆年第二個半期的前兩個月聚合。
WITH MEMBER [Date].[Calendar].[First2MonthsSecondSemester2003] AS
Aggregate(
PeriodsToDate(
[Date].[Calendar].[Calendar Semester],
[Date].[Calendar].[Month].[August 2003]
)
)
SELECT
[Date].[Calendar].[First2MonthsSecondSemester2003] ON COLUMNS,
[Product].[Category].Children ON ROWS
FROM
[Adventure Works]
WHERE
[Measures].[Order Quantity]
示例3:
下麵的示例根據用 Aggregate 函數計算的用戶選擇的 State-Province 成員值,返回上一個時期銷售額下滑的分銷商的計數。 Hierarchize 和DrillDownLevel 函數用於為 Product 維度中銷售額下滑的產品類別返回值。
WITH MEMBER Measures.[Declining Reseller Sales] AS
Count(
Filter(
Existing(Reseller.Reseller.Reseller),
[Measures].[Reseller Sales Amount] < ([Measures].[Reseller Sales Amount],
[Date].Calendar.PrevMember)
)
)
MEMBER [Geography].[State-Province].x AS
Aggregate (
{[Geography].[State-Province].&[WA]&[US],
[Geography].[State-Province].&[OR]&[US] }
)
SELECT NON EMPTY Hierarchize (
AddCalculatedMembers (
{DrillDownLevel({[Product].[All Products]})}
)
)
DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON COLUMNS
FROM [Adventure Works]
WHERE ([Geography].[State-Province].x,
[Date].[Calendar].[Calendar Quarter].&[2003]&[4],
[Measures].[Declining Reseller Sales])
3. AllMembers (MDX)
計算層次結構或級別表達式,並返回一個包含指定層次結構或級別的所有成員的集,該集包含層次結構或級別的所有計算成員。
語法:
Hierarchy syntax
Hierarchy_Expression.AllMembers
Level syntax
Level_Expression.AllMembers
參數:
Hierarchy_Expression
返回層次結構的有效多維表達式 (MDX)。
Level_Expression
返回級別的有效多維表達式 (MDX)。
註釋:
AllMembers 函數返回的集包含指定層次結構或者級別的所有成員(包括計算成員)。 即使指定的層次結構或級別不包含可見的成員,AllMembers 函數仍然會返回計算成員。
重要提示: |
如果維度僅包含單個可見層次結構,由於在此情況下維度名稱將解析為其唯一可見的層次結構,所以既可以通過維度名稱也可以通過層次結構名稱來引用該層次。 例如,因為 Measures.AllMembers 解析為 Measures 維度中唯一的層次結構,所以它是有效的 MDX 表達式。 |
註意 |
AllMembers 函數在語義上與 AddCalculatedMembers (MDX) 函數相似。 |
示例:
示例1:
下例從 Adventure Works 多維數據集中返回列軸上 [Date].[Calendar Year] 屬性層次結構中的所有成員(包括計算成員)以及行軸上 [Product].[Model Name] 屬性層次結構的所有子級集。
SELECT
[Date].[Calendar Year].AllMembers ON COLUMNS,
[Product].[Model Name].Children ON ROWS
FROM
[Adventure Works]
示例2
下例從 Adventure Works 多維數據集中返回列軸上度量值維度的所有成員(包括所有計算成員)以及行軸上的 [Product].[Model Name] 屬性層次結構的所有子級集
SELECT
Measures.AllMembers ON COLUMNS,
[Product].[Model Name].Children ON ROWS
FROM
[Adventure Works]
4. Ancestor (MDX)
此函數返回指定成員在指定級別或距離處的祖先
語法:
Level syntax
Ancestor(Member_Expression, Level_Expression)
Numeric syntax
Ancestor(Member_Expression, Distance)
參數:
Member_Expression
返回成員的有效多維表達式 (MDX)。
Level_Expression
返回級別的有效多維表達式 (MDX)。
Distance
指定距指定成員距離的有效數值表達式。
註釋:
使用 Ancestor 函數時,應為該函數提供 MDX 成員表達式,並提供該成員的祖先所在級別的 MDX 表達式或表示該成員之上有幾個級別的數值表達式。 藉助此信息,Ancestors 函數將返回該級別處的祖先成員。
註意 |
若要返回包含祖先成員的集,而不只是祖先成員,請使用 Ancestors (MDX) 函數 |
如果指定了級別表達式,則 Ancestor 函數返回指定成員在指定級別處的祖先。 如果指定成員與指定級別不在同一個層次結構中,該函數將返回錯誤。
如果指定了距離,則 Ancestor 函數返回層次結構中比成員表達式高出指定步驟數的指定成員的祖先。 可以將成員指定為屬性層次結構的成員或用戶定義層次結構的成員,有時還可以指定為父子層次結構的成員。 數值 1 返回成員的父成員,數值 2 返回成員的祖父成員(如果存在)。 數值 0 返回成員本身。
註意 |
Ancestor 函數的這一形式適用於父成員級別未知或無法命名的情況。 |
示例:
示例1:
下麵的示例使用一個級別表達式,並返回 Australia 中每個 State-Province 的 Internet Sales Amount 及其占 Australia 總 Internet Sales Amount 的百分比。
WITH MEMBER Measures.x AS [Measures].[Internet Sales Amount] /
(
[Measures].[Internet Sales Amount],
Ancestor
(
[Customer].[Customer Geography].CurrentMember,
[Customer].[Customer Geography].[Country]
)
), 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]
示例2:
下麵的示例使用一個數值表達式,並返回 Australia 中每個 State-Province 的 Internet Sales Amount 及其占所有國家總 Internet Sales Amount 的百分比。
WITH MEMBER Measures.x AS [Measures].[Internet Sales Amount] /
(
[Measures].[Internet Sales Amount],
Ancestor
([Customer].[Customer Geography].CurrentMember, 2)
), 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]
5. Ancestors (MDX)
此函數返回指定成員在指定級別或距離處的所有祖先的集。 使用 Microsoft SQL Server Analysis Services 時,返回的集將總是由單個成員組成,Analysis Services 不支持單個成員具有多個父成員。
語法:
Level syntax
Ancestors(Member_Expression, Level_Expression)
Numeric syntax
Ancestors(Member_Expression, Distance)
參數:
Member_Expression
返回成員的有效多維表達式 (MDX)。
Level_Expression
返回級別的有效多維表達式 (MDX)。
Distance
指定距指定成員距離的有效數值表達式。
註釋:
使用 Ancestors 函數時,應為該函數提供 MDX 成員表達式,並提供該成員的祖先所在級別的 MDX 表達式或表示該成員之上有幾個級別的數值表達式。 藉助此信息,Ancestors 函數將返回該級別處的成員集,它是由一個成員組成的集。
註意:
若要返回祖先成員而不是祖先集,請使用 Ancestor 函數。
如果指定了級別表達式,則 Ancestors 函數返回指定成員在指定級別處的所有祖先的集。 如果指定成員與指定級別不在同一個層次結構中,該函數將返回錯誤。
如果指定了距離,則 Ancestors 函數返回層次結構中比成員表達式高出指定步驟數的所有成員的集。 可以將成員指定為屬性層次結構的成員或用戶定義層次結構的成員,有時還可以指定為父子層次結構的成員。 數值 1 返回父級別處的成員集,數值 2 返回祖父級別處(如果存在)的成員集。數值 0 返回僅包含成員本身的集。
註意:
Ancestors 函數的這一形式適用於父成員級別未知或無法命名的情況。
示例:
示例1:
下麵的示例使用 Ancestors 函數返回成員、其父成員及祖父成員的 Internet Sales Amount 度量值。 此例使用級別表達式指定要返回的級別。 這些級別與成員表達式中指定的成員在同一個層次結構中。
SELECT {
Ancestors([Product].[Product Categories].[Product].[Mountain-100 Silver, 38],[Product].[Product Categories].[Category]),
Ancestors([Product].[Product Categories].[Product].[Mountain-100 Silver, 38],[Product].[Product Categories].[Subcategory]),
Ancestors([Product].[Product Categories].[Product].[Mountain-100 Silver, 38],[Product].[Product Categories].[Product])
} ON 0,
[Measures].[Internet Sales Amount] ON 1
FROM [Adventure Works]
示例2:
下麵的示例使用 Ancestors 函數返回成員、其父成員及祖父成員的 Internet Sales Amount 度量值。 此例使用數值表達式指定要返回的級別。 這些級別與成員表達式中指定的成員在同一個層次結構中。
SELECT {
Ancestors(
[Product].[Product Categories].[Product].[Mountain-100 Silver, 38],2
),
Ancestors(
[Product].[Product Categories].[Product].[Mountain-100 Silver, 38],1
),
Ancestors(
[Product].[Product Categories].[Product].[Mountain-100 Silver, 38],0
)
} ON 0,
[Measures].[Internet Sales Amount] ON 1
FROM [Adventure Works]
示例3:
下麵的示例使用 Ancestors 函數返回屬性層次結構成員的父成員的 Internet Sales Amount 度量值。 此例使用數值表達式指定要返回的級別。 由於成員表達式中的成員是屬性層次結構的成員,因此其父成員是“(全部)”級別。
SELECT {
Ancestors(
[Product].[Product].[Mountain-100 Silver, 38],1
)
} ON 0,
[Measures].[Internet Sales Amount] ON 1
FROM [Adventure Works]
6. Ascendants (MDX)
返回指定成員的祖先集,包括該成員本身。
語法:
Ascendants(Member_Expression)
參數:
Member_Expression
返回成員的有效多維表達式 (MDX)。
註釋:
Ascendants 函數返回從某一成員本身向上直到該成員的層次結構頂層的該成員的所有祖先;更具體來講,它對指定成員的層次結構執行後序遍歷,然後在集中返回與該成員相關的所有祖先成員,其中包括該成員本身。 這與 Ancestor 函數相反,後者返回位於特定級別的特定祖先成員或祖先。
示例:
下麵的示例從 Adventure Works 多維數據集中返回 [Sales Territory].[Northwest] 成員的分銷商訂單計數以及該成員的所有祖先。 Ascendants函數構造的集包括 [Sales Territory].[Northwest] 成員及其在 ROWS 軸上的祖先。
SELECT
Measures.[Reseller Order Count] ON COLUMNS,
Order(
Ascendants(
[Sales Territory].[Northwest]
),
DESC
) ON ROWS
FROM
[Adventure Works]
7. Avg (MDX)
對集求值,並返回該集中的單元的非空值的平均值,此平均值是對該集中的度量值或指定度量值求得的平均值。
語法:
Avg( Set_Expression [ , Numeric_Expression ] )
參數:
Set_Expression
返回集的有效多維表達式 (MDX)
Numeric_Expression
有效的數值表達式,通常為返回數值的單元坐標的多維表達式 (MDX)。
註釋:
如果指定了一組空元組或一個空集,則 Avg 函數返回一個空值。
Avg 函數首先計算指定集中的所有單元值之和,然後將計算出的和除以該集中的非空單元數,從而計算出指定集單元中的非空值的平均值。
註釋: |
計算一組數值的平均值時,Analysis Services 將忽略 Null 值。 |
如果未指定特定數值表達式(通常為度量值),則 Avg 函數在當前查詢上下文中計算每個度量值的平均值。 如果指定了度量值,則 Avg 函數首先計算該集的度量值,然後對指定的度量值計算平均值。
註釋:
在計算成員語句中使用 CurrentMember 函數時,必須指定數值表達式,因為在這種查詢上下文的當前坐標中不存在任何預設度量值。
若要強制包含空單元,應用程式必須使用 CoalesceEmpty 函數,或指定一個有效的 Numeric_Expression 以提供零 (0) 作為空值。 有關空單元的詳細信息,請參閱 OLE DB 文檔。
示例:
示例1:
下麵的示例對指定集返回度量值的平均值。 請註意,指定度量值可以是指定集的成員的預設度量值,也可以是指定的度量值。
WITH SET [NW Region] AS
{[Geography].[State-Province].[Washington]
, [Geography].[State-Province].[Oregon]
, [Geography].[State-Province].[Idaho]}
MEMBER [Geography].[Geography].[NW Region Avg] AS
AVG ([NW Region]
--Uncomment the line below to get an average by Reseller Gross Profit Margin
--otherwise the average will be by whatever the default measure is in the cube,
--or whatever measure is specified in the query
--, [Measures].[Reseller Gross Profit Margin]
)
SELECT [Date].[Calendar Year].[Calendar Year].Members ON 0
FROM [Adventure Works]
WHERE ([Geography].[Geography].[NW Region Avg])
示例2:
以下示例從 Adventure Works 多維數據集中返回 Measures.[Gross Profit Margin] 度量值的日平均值,該值是根據 2003 會計年度中每個月的所有日期計算出的。 Avg 函數從 [Ship Date].[Fiscal Time] 層次結構中每個月所包含的所有日期的集中計算平均值。 第一種形式的計算演示 Avg 將未記錄任何銷售額的天數從平均值計算中排除的預設行為,第二種形式的計算演示如何將沒有銷售額的天數包含在平均值計算中。
WITH MEMBER Measures.[Avg Gross Profit Margin] AS
Avg(
Descendants(
[Ship Date].[Fiscal].CurrentMember,
[Ship Date].[Fiscal].[Date]
),
Measures.[Gross Profit Margin]
), format_String='percent'
MEMBER Measures.[Avg Gross Profit Margin Including Empty Days] AS
Avg(
Descendants(
[Ship Date].[Fiscal].CurrentMember,
[Ship Date].[Fiscal].[Date]
),
CoalesceEmpty(Measures.[Gross Profit Margin],0)
), Format_String='percent'
SELECT
{Measures.[Avg Gross Profit Margin],Measures.[Avg Gross Profit Margin Including Empty Days]} ON COLUMNS,
[Ship Date].[Fiscal].[Fiscal Year].Members ON ROWS
FROM
[Adventure Works]
WHERE([Product].[Product Categories].[Product].&[344])
示例3:
以下示例將從 Adventure Works 多維數據集中返回 Measures.[Gross Profit Margin] 度量值的日平均值,該值是根據 2003 會計年度中每個半期的所有日期計算出來的。
WITH MEMBER Measures.[Avg Gross Profit Margin] AS
Avg(
Descendants(
[Ship Date].[Fiscal].CurrentMember,
[Ship Date].[Fiscal].[Date]
),
Measures.[Gross Profit Margin]
)
SELECT
Measures.[Avg Gross Profit Margin] ON COLUMNS,
[Ship Date].[Fiscal].[Fiscal Year].[FY 2003].Children ON ROWS
FROM
[Adventure Works]
8. Axis (MDX)
返回指定軸上的元組集。
語法:
Axis(Axis_Number)
參數:
Axis_Number
指定軸號的有效數值表達式。
註釋:
Axis 函數使用某個軸的從零開始的位置返回軸上的元組集。 例如,Axis(0) 返回 COLUMNS 軸,Axis(1) 返回 ROWS 軸,等等。 Axis 函數不能用於篩選軸。 此函數可用於使計算成員識別正在運行的查詢的上下文。 例如,您可能需要一個計算成員,該成員僅提供行軸上所選那些成員的總和。它還可用於使一個軸的定義依賴於另一個軸的定義。 例如,根據列軸上第一項的值對行軸的內容進行排序。
註意 |
軸只能引用先前的某個軸。 例如,對 COLUMNS 軸求值後,必然出現 Axis(0)(例如,在 ROW 或 PAGE 軸上)。 |
示例:
示例1:
以下示例查詢說明如何使用 Axis 函數:
WITH MEMBER MEASURES.AXISDEMO AS
SETTOSTR(AXIS(1))
SELECT MEASURES.AXISDEMO ON 0,
[Date].[Calendar Year].MEMBERS ON 1
FROM [Adventure Works]
示例2:
以下示例說明如何在計算成員內使用 Axis 函數:
WITH MEMBER MEASURES.AXISDEMO AS
SUM(AXIS(1), [Measures].[Internet Sales Amount])
SELECT {[Measures].[Internet Sales Amount],MEASURES.AXISDEMO} ON 0,
{[Date].[Calendar Year].&[2003], [Date].[Calendar Year].&[2004]} ON 1
FROM [Adventure Works]
9. BottomCount (MDX)
按升序對集進行排序,並返回指定集中具有最小值的指定數目的元組。
語法:
BottomCount(Set_Expression, Count [,Numeric_Expression])
參數:
Set_Expression
返回集的有效多維表達式 (MDX)。
Count
指定要返回的元組數的有效數值表達式。
Numeric_Expression
一個有效的數值表達式,通常為返回一個數值的單元坐標的多維表達式 (MDX)。
註釋:
如果指定了數值表達式,則此函數根據在指定集中計算出的指定數值表達式的值,對指定集中的元組按升序進行排序。 然後,BottomCount 函數將返回具有最小值的、指定數目的元組。
重要提示 |
與 TopCount 函數一樣,BottomCount 函數總是會打亂層次結構。 |
如果未指定數值表達式,則函數按照自然順序返回成員集,而不進行任何排序,其行為如同 Tail (MDX) 函數。
示例:
下例將返回每個日曆年中最後五個“產品子類別”銷售額的“分銷商訂單數量”度量值,並根據“分銷商銷售額”度量值進行排序。
SELECT BottomCount([Product].[Product Categories].[Subcategory].Members
, 10
, [Measures].[Reseller Sales Amount]) ON 0,
[Date].[Calendar].[Calendar Year].Members ON 1
FROM
[Adventure Works]
WHERE
[Measures].[Reseller Order Quantity]
10 . BottomPercent (MDX)
按升序對集進行排序,並返回一個最小值元組集,該元組集的累積合計等於或大於指定的百分比。
語法:
BottomPercent(Set_Expression, Percentage, Numeric_Expression)
參數:
Set_Expression
返回集的有效多維表達式 (MDX)。
Percentage
指定要返回的元組數的有效數值表達式。
Numeric_Expression
有效數值表達式,通常為返回數值的單元坐標的多維表達式 (MDX)。
註釋:
BottomPercent 函數對指定集求得的指定數值表達式求和,同時對指定集按升序排序。 然後,該函數返回合計值累積百分比至少達到指定百分比的最小值元素。 該函數返回累積合計至少達到指定百分比的最小子集。 返回的元素從大到小排序。
重要提示 |
與 TopPercent 函數一樣,BottomPercent 函數總是會打亂層次結構。 有關詳細信息,請參閱 Order 函數。 |
示例:
示例1:
下麵的示例返回 2003 會計年度 Geography 維度 Geography 層次結構中 City 級別的最小成員集(對於 Bike 類別),其 Reseller Sales Amount 度量值的累積合計至少是累積合計的 15%(從具有最小銷售額的集的成員開始)。
SELECT
[Product].[Product Categories].Bikes ON 0,
BottomPercent
({[Geography].[Geography].[City].Members}
, 15
, ([Measures].[Reseller Sales Amount],[Product].[Product Categories].Bikes)
) ON 1
FROM [Adventure Works]
WHERE ([Measures].[Reseller Sales Amount],[Date].[Fiscal].[Fiscal Year].[FY 2003])
11 . BottomSum (MDX)
按升序對指定集進行排序,並返回一個最小值元組集,這些元組的和等於或小於指定值。
語法:
BottomSum(Set_Expression, Value, Numeric_Expression)
參數:
Set_Expression
返回集的有效多維表達式 (MDX)。
Value
指定與每個元組相比較的值的有效數值表達式。
Numeric_Expression
有效數值表達式,通常是一個關於單元坐標(返回數值)的 MDX(多維表達式)表達式。
註釋:
BottomSum 函數對指定集中的指定度量值求和,同時對指定集按升序排序。 然後,此函數返回最小值元素,其指定數值表達式的合計至少為指定值(和)。 此函數返回集的最小子集,其累積合計至少為指定值。 返回的元素按從小到大的順序排列。
重要提示 |
與 TopSum 函數一樣,BottomSum 函數總是會打亂層次結構。 |
示例:
以下示例返回 2003 會計年度 Geography 維度 Geography 層次結構中 City 級別的最小成員集(對於 Bike 類別),其使用 Reseller Sales Amount 度量值的累積合計至少是 50,000(從具有最小銷售額的集的成員開始):
SELECT
[Product].[Product Categories].Bikes ON 0,
BottomSum
({[Geography].[Geography].[City].Members}
, 50000
, ([Measures].[Reseller Sales Amount],[Product].[Product Categories].Bikes)
) ON 1
FROM [Adventure Works]
WHERE([Measures].[Reseller Sales Amount],[Date].[Fiscal].[Fiscal Year].[FY 2003])
12 . CalculationCurrentPass (MDX)
針對指定的查詢上下文返回多維數據集的當前計算傳遞。
語法:
CalculationCurrentPass()
註釋:
CalculationCurrentPass 函數針對當前查詢上下文返回計算傳遞的索引(從零開始計算)。 對於 SQL Server Analysis Services 中的自動遞歸解決方法,此函數的用處不大。
13 . CalculationPassValue (MDX)
返回用多維表達式 (MDX) 對多維數據集的指定計算傳遞求得的數值或字元串值。
語法:
Numeric syntax
CalculationPassValue(Numeric_Expression,Pass_Value [, ABSOLUTE | RELATIVE [,ALL]])
String syntax
CalculationPassValue(String_Expression ,Pass_Value [, ABSOLUTE | RELATIVE [,ALL]])
參數:
Numeric_Expression
通常是單元坐標(返回數字)的多維表達式 (MDX) 的有效數值表達式。
String_Expression
一個有效的字元串表達式,通常為返回一個數字(表示為字元串)的單元坐標的有效多維表達式 (MDX)。
Pass_Value
指定計算傳遞數的有效數值表達式。
ABSOLUTE
一個訪問標誌值,規定 Pass_Value 參數包含計算傳遞的從零開始的索引。 如果未指定訪問標誌值,則 ABSOLUTE 將作為預設訪問標誌值。
RELATIVE
一個訪問標誌值,規定 Pass_Value 參數包含從觸發計算的計算傳遞開始的相對偏移量。 如果偏移量解析為某個小於 0 的計算傳遞索引,則使用計算傳遞 0,並且不會出錯。
ALL
如果設置此標誌,則除了存儲引擎載入的值外,其餘值均為空值。 如果未設置此標誌,則聚合這些值而不進行任何計算
註釋:
如果提供了數值表達式,則函數通過計算指定計算傳遞中的指定 MDX 數值表達式來返回一個數值,或者通過訪問標誌以及訪問標誌修飾符對其進行修改。
如果提供了字元串表達式,則函數通過計算指定計算傳遞中的指定 MDX 字元串表達式來返回一個字元串值,或者通過訪問標誌以及訪問標誌修飾符 . 對其進行更改
對於 SQL Server Analysis Services 中的自動遞歸解決方法,此函數的用處不大。
註意 |
只有管理員可以在 MDX 腳本中使用 CalculationPassValue 函數。 如果在不具有管理員特權的角色上下文中運行包含此函數的 MDX 腳本,則會發生錯誤。 |
14 . CASE 語句 (MDX)
允許您有條件地從多次比較中返回特定值。 有兩種類型的 Case 語句:
簡單 Case 語句將某個表達式與一組簡單表達式進行比較,以返回特定的值。
搜索 Case 語句計算一組布爾表達式,以返回特定的值
語法:
Simple Case Statement
CASE [input_expression]
WHEN when_expression THEN when_true_result_expression
[...n]
[ELSE else_result_expression]
END
Search Case Statement
CASE
WHEN Boolean_expression THEN when_true_result_expression
[...n]
[ELSE else_result_expression]
END
參數:
input_expression
解析為標量值的多維表達式 (MDX)。
when_expression
用於計算 input_expression 的指定標量值,當計算結果為 True 時,返回 else_result_expression 的標量值。
when_true_result_expression
當 WHEN 子句計算結果為 True 時返回的標量值。
else_result_expression
當沒有任何 WHEN 子句的計算結果為 True 時返回的標量值。
Boolean_expression
計算結果為標量值的 MDX 表達式。
註釋:
如果沒有 ELSE 子句,而且所有 WHEN 子句的計算結果都為 False,則結果是空單元。
簡單 Case 表達式
MDX 通過將 input_expression 解析為標量值來計算簡單 Case 表達式。 然後,將該標量值與 when_expression 的標量值進行比較。 如果這兩個標量值匹配,則 CASE 語句返回 when_true_expression 的值。 如果這兩個標量值不匹配,則計算下一個 WHEN 子句。 如果所有的 WHEN 子句計算結果均為 False,則返回來自 ELSE 子句的 else_result_expression 的值(如果存在 ELSE 子句)。
示例:
在下例中,對幾個 WHEN 子句計算 Reseller Order Count 度量值,並且基於每年的 Reseller Order Count 度量值的值返回一個結果。 如果 Reseller Order Count 值與 WHEN 子句中的 when_expression 指定的標量值不匹配,則返回 else_result_expression 的標量值。
WITH MEMBER [Measures].x AS
CASE [Measures].[Reseller Order Count]
WHEN 0 THEN 'NONE'
WHEN 1 THEN 'SMALL'
WHEN 2 THEN 'SMALL'
WHEN 3 THEN 'MEDIUM'
WHEN 4 THEN 'MEDIUM'
WHEN 5 THEN 'LARGE'
WHEN 6 THEN 'LARGE'
ELSE 'VERY LARGE'
END
SELECT Calendar.[Calendar Year] on 0
, NON EMPTY [Geography].[Postal Code].Members ON 1
FROM [Adventure Works]
WHERE [Measures].x
Case 搜索表達式
若要使用 Case 表達式執行更為複雜的計算,請使用 Case 搜索表達式。 使用此搜索表達式的變體可以計算輸入表達式是否位於一個值範圍內。MDX 按 WHEN 子句出現在 CASE 語句中的順序計算這些子句。
下例中,為每個 WHEN 子句針對指定的 Boolean_expression 計算 Reseller Order Count 度量值。 根據每年的 Reseller Order Count 度量值的值返回一個結果。 因為按照 WHEN 子句出現的順序計算這些子句,所以可簡單地將所有大於 6 的值賦值為“VERY LARGE”,而無需顯式地指定每個值。 對於沒有在 WHEN 子句內指定的 Reseller Order Count 值,則返回 else_result_expression 的標量值。
WITH MEMBER [Measures].x AS
CASE
WHEN [Measures].[Reseller Order Count] > 6 THEN 'VERY LARGE'
WHEN [Measures].[Reseller Order Count] > 4 THEN 'LARGE'
WHEN [Measures].[Reseller Order Count] > 2 THEN 'MEDIUM'
WHEN [Measures].[Reseller Order Count] > 0 THEN 'SMALL'
ELSE "NONE"
END
SELECT Calendar.[Calendar Year] on 0,
NON EMPTY [Geography].[Postal Code].Members on 1
FROM [Adventure Works]
WHERE [Measures].x
15 . Children(MDX)
返回指定成員的子成員集。
語法:
Member_Expression.Children
參數:
Member_Expression
返回成員的有效多維表達式 (MDX)。
註釋:
Children 函數返回一個自然排序的集,該集包含指定成員的子成員。 如果指定的成員沒有子成員,則此函數返回一個空集。
示例:
1 .下例將返回 Geography 維度中 Geography 層次結構的 United States 成員的子成員。SELECT [Geography].[Geography].[Country].&[United States].Children ON 0
FROM [Adventure Works]
2 . 下例從 Adventure Works 多維數據集中返回列軸上 Measures 維度的所有成員(包括所有計算成員)以及行軸上 [Product].[Model Name] 屬性層次結構的所有子級集。
SELECT
Measures.AllMembers ON COLUMNS,
[Product].[Model Name].Children ON ROWS
FROM
[Adventure Works]
16 . ColsingPeriod(MDX)
返回指定成員在指定級別的後代中的最後一個同級成員
語法:
ClosingPeriod( [ Level_Expression [ ,Member_Expression ] ] )
參數:
Level_Expression
返回級別的有效多維表達式 (MDX)。
Member_Expression
返回成員的有效多維表達式 (MDX)
註釋:
此函數主要用於具有 Time 類型的維度,但也可用於任何維度。
l 如果指定了級別表達式,ClosingPeriod 函數將使用包含指定級別的維度,並返回預設成員在指定級別處的後代中的最後一個同級成員。
l 如果同時指定了級別表達式和成員表達式,ClosingPeriod 函數將返回指定成員在指定級別處的後代中的最後一個同級成員。
l 如果級別表達式和成員表達式均未指定,ClosingPeriod 函數將使用多維數據集中 Time 類型維度(如果有)的預設級別和成員。
ClosingPeriod 函數等效於下麵的 MDX 語句:
Tail(Descendants(Member_Expression, Level_Expression), 1).
註意 |
OpeningPeriod 函數與 ClosingPeriod 函數相似,只不過 OpeningPeriod 函數返回的是第一個同級而不是最後一個同級。 |
示例:
1.下麵的示例返回 Date 維度(具有 Time 語義類型)的“FY2007”成員的預設度量值。 返回此成員是因為:“會計年度”級別是“(全部)”級別的第一個後代;“Fiscal”層次結構是預設層次結構(因為它是層次結構集合中的第一個用戶定義的層次結構);而且“FY 2007”成員是此層次結構在此級別處的最後一個同級成員。
SELECT ClosingPeriod() ON 0
FROM [Adventure Works]
2.下麵的示例返回“November 30, 2006”成員在 Date.Date 屬性層次結構的 Date.Date.Date 級別處的預設度量值。 此成員是 Date.Date 屬性層次結構中“(全部)”級別的後代的最後一個同級成員。
SELECT ClosingPeriod ([Date].[Date].[Date]) ON 0
FROM [Adventure Works]
3.下例返回“December, 2003”成員的預設度量值。該成員是用戶定義的層次結構“Calendar”中年份級別成員“2003”的後代的最後一個同級成員。
SELECT ClosingPeriod ([Date].[Calendar].[Month],[Date].[Calendar].[Calendar Year].&[2003]) ON 0
FROM [Adventure Works]
4.下麵的示例返回“June, 2003”成員的預設度量值,該成員是用戶定義的層次結構“Fiscal”中年份級別成員“2003”的後代的最後一個同級成員。
SELECT ClosingPeriod ([Date].[Fiscal].[Month],[Date].[Fiscal].[Fiscal Year].&[2003]) ON 0
FROM [Adventure Works]
17. CoalesceEmpty (MDX)
將空單元值轉換為指定的非空單元值,該值可以是數字或字元串。
語法:
Numeric syntax
CoalesceEmpty( Numeric_Expression1 [ ,Numeric_Expression2,...n] )
String syntax
CoalesceEmpty(String_Expression1 [ ,String_Expression2,...n] )
參數:
Numeric_Expression1
通常是單元坐標(返回數字)的多維表達式 (MDX) 的有效數值表達式。
Numeric_Expression2
有效數值表達式,通常為指定的數值。
String_Expression1
有效字元串表達式,通常為返回字元串的單元坐標的多維表達式 (MDX)。
String_Expression2
有效字元串表達式,通常為指定的字元串值(該值被第一個字元串表達式返回的 NULL 代替)。
註釋:
如果指定了一個或多個數值表達式,CoalesceEmpty 函數將返回可被解析為非空值的第一個(從左向右)數值表達式的值。 如果指定的所有數值表達式都不能被解析為非空值,則此函數返回空單元值。 通常情況下,第二個數值表達式的值是被第一個數值表達式返回的 NULL 代替的數值。
如果指定了一個或多個字元串表達式,此函數將返回可被解析為非空值的第一個(從左向右)字元串表達式的值。 如果指定的所有字元串表達式都不能被解析為非空值,則此函數返回空單元值。 通常情況下,第二個字元串表達式的值是被第一個字元串表達式返回的 NULL 代替的字元串值。
只能向 CoalesceEmpty 函數傳遞相同類型的值。 也就是說,指定的所有值表達式的值都必須為數值數據類型或空單元值,或者,指定的所有值表達式的值都必須為字元串數據類型或空單元值。 對此函數的一次調用不能同時包括數值表達式和字元串表達式。
有關空單元的詳細信息,請參閱 OLE DB 文檔。
示例:
下麵的示例將查詢 Adventure Works 多維數據集。 此示例將返回每個產品的訂單數量以及按類別排列的訂單數量百分比。 CoalesceEmpty 函數確保了在設置計算成員的格式時用零 (0) 來表示空值。
WITH
MEMBER [Measures].[Order Percent by Category] AS
CoalesceEmpty
(
([Product].[Product Categories].CurrentMember,
Measures.[Order Quantity]) /
(
Ancestor
( [Product].[Product Categories].CurrentMember,
[Product].[Product Categories].[Category]
), Measures.[Order Quantity]
), 0
), FORMAT_STRING='Percent'
SELECT
{Measures.[Order Quantity],
[Measures].[Order Percent by Category]} ON COLUMNS,
{[Product].[Product].Members} ON ROWS
FROM [Adventure Works]
WHERE {[Date].[Calendar Year].[Calendar Year].&[2003]}
18. Correlation (MDX)
返回對集求值的 X-Y 值對的關聯繫數。
語法:
Correlation( Set_Expression, Numeric_Expression_y [ ,Numeric_Expression_x ] )
參數:
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression_y
返回表示 Y 軸值的數字的有效數值表達式,通常是單元坐標的多維表達式 (MDX)。
Numeric_Expression_x
通常是單元坐標(返回代表 X 軸的值的數字)的多維表達式 (MDX) 的有效數值表達式。
註釋:
Correlation 函數計算兩對值的關聯繫數,其計算過程如下:先根據第一個數值表達式對指定集求和,以獲取 Y 軸對應的值。 然後,此函數根據第二個數值表達式(如果存在)對指定集求值,以獲取 X 軸對應的值。 如果未指定第二個數值表達式,則此函數使用指定集中單元的當前上下文作為 X 軸對應的值。
註意 |
Correlation 函數將忽略空單元,以及包含文本或邏輯值的單元。 但是,該函數可以包含值為零的單元。 |
19 . Count (維度)(MDX)
返回多維數據集中的層次結構數。
語法:
Dimensions.Count
註釋:
返回多維數據集中的層次結構數,包括 [Measures].[Measures] 層次結構。
示例:
下麵的示例返回 Adventure Works 多維數據集中的層次結構數。
WITH MEMBER measures.X AS
dimensions.count
SELECT Measures.X ON 0
FROM [Adventure Works]
20 . Count (層次結構級別)(MDX)
返回層次結構中的級別數。
語法:
Hierarchy_Expression.Levels.Count
參數:
Hierarchy_Expression
返回層次結構的有效多維表達式 (MDX)
註釋:
返回層次結構中的級別數,包括 [All] 級別(如果存在)。
重要提示 |
如果維度只包含一個可見的層次結構,則可以通過此維度的名稱或此層次結構的名稱引用此層次結構,原因是此維度的名稱會解析為它唯一可見的層次結構。 例如,Measures.Levels.Count 是一個有效的 MDX 表達式,這是因為它會解析為 Measures 維度中唯一的層次結構。 |
示例:
下麵的示例返回 Adventure Works 多維數據集中 Product Categories 用戶定義層次結構中的級別數計數。
WITH MEMBER measures.X AS
[Product].[Product Categories].Levels.Count
Select Measures.X ON 0
FROM [Adventure Works]
21.Count(集)
返回集中的單元數。
語法:
Standard syntax
Count(Set_Expression [ , ( EXCLUDEEMPTY | INCLUDEEMPTY ) ] )
Alternate syntax
Set_Expression.Count
參數:
Set_Expression
返回集的有效多維表達式 (MDX)
註釋:
Count (Set) 函數包括還是排除空單元取決於所用的語法。 如果使用標準語法,則可以使用 EXCLUDEEMPTY 標誌來排除空單元,也可以使用INCLUDEEMPTY 標誌來包括空單元。 如果使用備用語法,則函數始終包括空單元。
若要從集計數中排除空單元,請使用標準語法和可選的 EXCLUDEEMPTY 標誌。
註意 |
預設情況下,Count (Set) 函數會將空單元計算在內。 相反,OLE DB 中對集計數的 Count 函數預設情況下會排除空單元。 |
示例:
下例統計成員集中單元的數目,該成員集由“產品”維度中“型號名稱”屬性層次結構的子級構成。
WITH MEMBER measures.X AS
[Product].[Model Name].children.count
SELECT Measures.X ON 0
FROM [Adventure Works]
下例將 DrilldownLevel 函數與 Count 函數結合使用,統計“產品”維度中的產品數目。
Count(DrilldownLevel (
[Product].[Product].[Product]))
下例將 Count 函數與 Filter 函數以及其他多個函數結合使用,返回與以前日曆季度相比銷售額有所下降的分銷商。 該查詢使用 Aggregate 函數,支持選擇多個地域成員,例如:從客戶端應用程式中的下拉列表中進行選擇。
WITH MEMBER Measures.[Declining Reseller Sales] AS
Count
(Filter
(Existing(Reseller.Reseller.Reseller),
[Measures].[Reseller Sales Amount]
< ([Measures].[Reseller Sales Amount],
[Date].Calendar.PrevMember)
)
)
MEMBER [Geography].[State-Province].x AS
Aggregate
( {[Geography].[State-Province].&[WA]&[US],
[Geography].[State-Province].&[OR]&[US] }
)
SELECT NON EMPTY HIERARCHIZE
(AddCalculatedMembers
({DrillDownLevel
({[Product].[All Products]})
})
) DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON COLUMNS
FROM [Adventure Works]
WHERE ([Geography].[State-Province].x,
[Date].[Calendar].[Calendar Quarter].&[2003]&[4]
,[Measures].[Declining Reseller Sales])
22 . Count(元組)
返回元組中的維度數。
語法:
Tuple_Expression.Count
參數:
Tuple_Expression
返回元組的有效多維表達式 (MDX)。
註釋:
返回元組中的維度數。
示例:
下麵的查詢中的計算度量值返回值 2,這是在元組 ([Measures].[Internet Sales Amount], [Date].[Calendar].[Calendar Year].&[2001]) 中提供的層次結構的數目:
WITH MEMBER MEASURES.COUNTTUPLE AS
COUNT(([Measures].[Internet Sales Amount], [Date].[Calendar].[Calendar Year].&[2001]))
SELECT MEASURES.COUNTTUPLE ON 0
FROM [Adventure Works]
23 . Cousin (MDX)
返回在父成員下方與指定子成員具有相同的相對位置的子成員。
語法:
Cousin( Member_Expression , Ancestor_Member_Expression )
參數:
Member_Expression
返回成員的有效多維表達式 (MDX)。
Ancestor_Member_Expression
返回祖先成員的有效多維表達式 (MDX) 成員表達式。
註釋:
此函數按各級別內的成員的順序和位置進行操作。 如果有兩個層次結構,第一個層次結構有四個級別,第二個層次結構有五個級別,則第一個層次結構的第三個級別與第二個層次結構的第三個級別是同級。
示例:
下麵的示例根據 2002 會計年度第四季度在 2003 會計年度中年級別上的祖先檢索它的同級。 檢索到的同級是 2003 會計年度第四季度。
SELECT Cousin
( [Date].[Fiscal].[Fiscal Quarter].[Q4 FY 2002],
[Date].[Fiscal].[FY 2003]
) ON 0
FROM [Adventure Works]
下麵的示例根據 2002 會計年度 7 月在 2004 會計年度第二季度中季度級別上的祖先檢索它的同級。 檢索到的同級是 2003 年 10 月。
SELECT Cousin
([Date].[Fiscal].[Month].[July 2002] ,
[Date].[Fiscal].[Fiscal Quarter].[Q2 FY 2004]
) ON 0
FROM [Adventure Works]
24 . Covariance (MDX)
返回使用有偏差總體公式(除以 x-y 對的數目)對集求得的 x-y 值對的總體協方差。
語法:
Covariance(Set_Expression,Numeric_Expression_y [ ,Numeric_Expression_x ] )
參數:
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression_y
返回表示 Y 軸值的數字的有效數值表達式,通常是單元坐標的多維表達式 (MDX)。
Numeric_Expression_x
有效的數值表達式,通常是單元坐標的多維表達式 (MDX),它返回表示 x 軸值的數值。
註釋:
Covariance 函數對指定的集計算第一個數值表達式,以獲得 y 軸的值。 然後,此函數對指定的集計算第二個數值表達式(如果指定),以獲得 x 軸的一組值。 如果未指定第二個數值表達式,則該函數使用指定集中單元的當前上下文作為 X 軸的值。
Covariance 函數使用有偏差總體公式。 這與 CovarianceN 函數相反,後者使用無偏差總體公式(除以 x-y 對的數目,然後再減 1)。
註意 |
Covariance 函數會忽略空單元以及包含文本或邏輯值的單元。 但是,該函數可以包含值為零的單元。 |
示例:
下麵的示例說明如何使用 Covariance 函數:
WITH
MEMBER [Measures].[CovarianceDemo] AS
COVARIANCE([Date].[Date].[Date].Members, [Measures].[Internet Sales Amount], [Measures].[Internet Order Count])
SELECT {[Measures].[CovarianceDemo]} ON 0
FROM
[Adventure Works]
25 . CovarianceN
通過使用無偏差總體公式(除以 x-y 對的數目),返回對集求得的 x-y 值對的樣本協方差。
語法:
CovarianceN(Set_Expression, Numeric_Expression_y [ ,Numeric_Expression_x ] )
參數:
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression_y
返回表示 Y 軸值的數字的有效數值表達式,通常是單元坐標的多維表達式 (MDX)。
Numeric_Expression_x
有效的數值表達式,通常是單元坐標的多維表達式 (MDX),它返回表示 x 軸值的數值。
註釋:
CovarianceN 函數根據第一個數值表達式計算指定的集,以獲得 Y 軸的值。 然後,此函數對指定的集計算第二個數值表達式(如果指定),以獲得 x 軸的一組值。 如果未指定第二個數值表達式,則該函數將使用指定集中單元的當前上下文作為 X 軸的值。
CovarianceN 函數使用無偏差總體公式。 這與使用有偏差總體公式(除以 X-Y 數值對)的 Covariance 函數相反。
註意 |
CovarianceN 函數將忽略空單元以及包含文本或邏輯值的單元。 但是,該函數可以包含值為零的單元。 |
26. Crossjoin (MDX)
返回一個或多個集的叉積。
語法:
Standard syntax
Crossjoin(Set_Expression1 ,Set_Expression2 [,...n] )
Alternate syntax
Set_Expression1 * Set_Expression2 [* ...n]
參數:
Set_Expression1
返回集的有效多維表達式 (MDX)。
Set_Expression2
返回集的有效多維表達式 (MDX)。
註釋:
Crossjoin 函數返回兩個或更多指定集的叉積。 所得集中元組的順序取決於要聯接的集的順序以及其成員的順序。 例如,如果第一個集由 {x1, x2,...,xn} 組成,第二個集由 {y1, y2, ..., yn} 組成,則這兩個集的叉積為:
{(x1, y1), (x1, y2),...,(x1, yn), (x2, y1), (x2, y2),...,
(x2, yn),..., (xn, y1), (xn, y2),..., (xn, yn)}
重要提示 |
如果交叉聯接中的集由同一維度中不同屬性層次結構中的元組組成,此函數將只返回實際存在的那些元組。 有關詳細信息,請參閱 MDX 中的重要概念 (Analysis Services)。 |
示例:
以下查詢說明在查詢的列軸和行軸上使用 Crossjoin 函數的簡單示例:
SELECT
[Customer].[Country].Members *
[Customer].[State-Province].Members
ON 0,
Crossjoin(
[Date].[Calendar Year].Members,
[Product].[Category].[Category].Members)
ON 1
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
以下示例說明交叉聯接同一維度中的不同層次結構時發生的自動篩選:
SELECT
Measures.[Internet Sales Amount]
ON 0,
//Only the dates in Calendar Years 2003 and 2004 will be returned here
Crossjoin(
{[Date].[Calendar Year].&[2003], [Date].[Calendar Year].&[2004]},
[Date].[Date].[Date].Members)
ON 1
FROM [Adventure Works]
以下三個示例返回相同的結果 - United States 各州的 Internet Sales Amount(按州顯示)。 前兩個示例使用兩個交叉聯結語法,第三個示例演示了使用 WHERE 子句返回相同的信息。
示例 1
SELECT CROSSJOIN
(
{[Customer].[Country].[United States]},
&n