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]},
[Customer].[State-Province].Members
) ON 0
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
示例 2
SELECT
[Customer].[Country].[United States] *
[Customer].[State-Province].Members
ON 0
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
示例 3
SELECT
[Customer].[State-Province].Members
ON 0
FROM [Adventure Works]
WHERE (Measures.[Internet Sales Amount],
[Customer].[Country].[United States])
27 . Current (MDX)
在迭代期間從集中返回當前的元組。
語法:
Set_Expression.Current
參數:
Set_Expression
返回集的有效多維表達式 (MDX)。
注釋:
迭代過程的每一步中所操作的元組就是當前元組。 Current 函數返回該元組。 該函數僅在對集執行迭代的過程中有效。
遍歷集的 MDX 函數包括 Generate 函數。
| 注意 |
| 該函數只能使用已命名的集(使用集別名或定義命名集)。 |
示例:
以下示例說明如何在 Generate 內部使用 Current 函數:
WITH
//Creates a set of tuples consisting of all Calendar Years crossjoined with
//all Product Categories
SET MyTuples AS CROSSJOIN(
[Date].[Calendar Year].[Calendar Year].MEMBERS,
[Product].[Category].[Category].MEMBERS)
//Iterates through each tuple in the set and returns the name of the Calendar
//Year in each tuple
MEMBER MEASURES.CURRENTDEMO AS
GENERATE(MyTuples, MyTuples.CURRENT.ITEM(0).NAME, ", ")
SELECT MEASURES.CURRENTDEMO ON 0
FROM [Adventure Works]
28 . CurrentMember (MDX)
在遍歷過程中返回當前成員以及指定層次結構。
語法:
Hierarchy_Expression.CurrentMember
參數:
Hierarchy_Expression
返回層次結構的有效多維表達式 (MDX)。
注釋:
遍歷一組層次結構成員時,在遍歷過程的每一步,所操作的成員就是當前成員。 CurrentMember 函數返回該成員。
| 重要提示 |
| 如果維度只包含一個可見的層次結構,則可以通過此維度的名稱或此層次結構的名稱引用此層次結構,原因是此維度的名稱會解析為它唯一可見的層次結構。 例如,Measures.CurrentMember 是一個有效的 MDX 表達式,這是因為它會解析為 Measures 維度中唯一的層次結構。 |
示例:
以下查詢說明如何使用 Currentmember 來查找列、行和切片軸上層次結構中的當前成員:
WITH MEMBER MEASURES.CURRENTDATE AS
[Date].[Calendar].CURRENTMEMBER.NAME
MEMBER MEASURES.CURRENTPRODUCT AS
[Product].[Product Categories].CURRENTMEMBER.NAME
MEMBER MEASURES.CURRENTMEASURE AS
MEASURES.CURRENTMEMBER.NAME
MEMBER MEASURES.CURRENTCUSTOMER AS
[Customer].[Customer Geography].CURRENTMEMBER.NAME
SELECT
[Product].[Product Categories].[Category].MEMBERS
*
{MEASURES.CURRENTDATE, MEASURES.CURRENTPRODUCT,MEASURES.CURRENTMEASURE, MEASURES.CURRENTCUSTOMER}
ON 0,
[Date].[Calendar].MEMBERS
ON 1
FROM [Adventure Works]
WHERE([Customer].[Customer Geography].[Country].&[Australia])
當前成員在查詢中的軸上使用的層次結構上進行更改。 因此,同一維度上未在軸上使用的其他層次結構上的當前成員也可以更改;此行為稱為“自動共存”,MDX 中的重要概念 (Analysis Services)中提供了更多詳細信息。 例如,下面的查詢說明當 Calendar 層次結構上的當前成員顯示在行軸上時,Date 維度的 Calendar Year 層次結構上的當前成員如何隨 Calendar 層次結構上的當前成員更改:
WITH MEMBER MEASURES.CURRENTYEAR AS
[Date].[Calendar Year].CURRENTMEMBER.NAME
SELECT
{MEASURES.CURRENTYEAR}
ON 0,
[Date].[Calendar].MEMBERS
ON 1
FROM [Adventure Works]
CurrentMember 對於使計算識別正在使用它們的查詢的上下文是非常重要的。 以下示例將從 Adventure Works 多維數據集中返回每個產品的訂單數量以及按類別和模型划分的訂單數量的百分比。 CurrentMember 函數標識要在計算過程中使用其訂單數量的產品。
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]}
29 . CurrentOrdinal (MDX)
返回迭代過程中集內的當前迭代數。
語法:
Set_Expression.CurrentOrdinal
參數:
Set_Expression
返回集的有效多維表達式 (MDX)。
注釋:
當遍歷一個集(例如使用 Filter (MDX) 或 Generate (MDX) 函數)時,CurrentOrdinal 函數返回迭代數。
示例
以下簡單示例說明如何將 CurrentOrdinal 與 Generate 一起使用來返回字符串,該字符串包含集中每項的名稱以及它在該集中的位置:
WITH SET MySet AS [Customer].[Customer Geography].[Country].MEMBERS
MEMBER MEASURES.CURRENTORDINALDEMO AS
GENERATE(MySet, CSTR(MySet.CURRENTORDINAL) + ") " + MySet.CURRENT.ITEM(0).NAME, ", ")
SELECT MEASURES.CURRENTORDINALDEMO ON 0
FROM [Adventure Works]
CurrentOrdinal 的實際用法僅限於非常復雜的計算。 下例將返回集中唯一產品的數目,其中使用了 Order 函數以在使用 Filter 函數前對非空元組進行排序。 CurrentOrdinal 函數用於比較和消除等同值。
WITH MEMBER [Measures].[PrdTies] AS Count
(Filter
(Order
(NonEmpty
([Product].[Product].[Product].Members
, {[Measures].[Reseller Order Quantity]}
)
, [Measures].[Reseller Order Quantity]
, BDESC
) AS OrdPrds
, NOT((OrdPrds.CurrentOrdinal < OrdPrds.Count
AND [Measures].[Reseller Order Quantity] =
( [Measures].[Reseller Order Quantity]
, OrdPrds.Item
(OrdPrds.CurrentOrdinal
)
)
)
OR (OrdPrds.CurrentOrdinal > 1
AND [Measures].[Reseller Order Quantity] =
([Measures].[Reseller Order Quantity]
, OrdPrds.Item
(OrdPrds.CurrentOrdinal-2)
)
)
))
)
SELECT {[Measures].[PrdTies]} ON 0
FROM [Adventure Works]
30 . CustomData (MDX)
如果已定義,則返回 CustomData 連接字符串屬性的值;否則,返回 null。
語法:
CustomData()
返回值:
CustomData 函數可以檢索 CustomData 連接字符串屬性並傳遞多維表達式 (MDX) 函數和語句將要使用的配置設置,例如,UserName (MDX)和 CALL 語句 (MDX)。 例如,該函數可以用在動態安全表達式中,用於在 CustomData 連接字符串屬性中選擇允許的集成員或拒絕的集成員。
示例:
下面的查詢顯示某一計算度量值中 CustomData 函數返回的值:
WITH MEMBER [Measures].CUSTOMDATADEMO AS CUSTOMDATA()
SELECT [Measures].CUSTOMDATADEMO ON 0
FROM [Adventure Works]
31 . DataMember (MDX)
返回系統生成的數據成員,它與某個維度的非葉成員相關聯。
方法:
Member_Expression.DataMember
參數:
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋:
該函數對任何層次結構中的非葉成員進行運算,且 UPDATE CUBE 語句 (MDX) 命令可以使用該函數直接向非葉成員而不是葉成員的后代寫回數據。
| 注意 |
| 如果指定的成員為葉成員,或者如果非葉成員沒有關聯的數據成員,則返回指定的成員。 |
示例:
下面的示例在計算度量值中使用 DataMember 函數來顯示各雇員的銷售配額:
WITH MEMBER measures.InvidualQuota AS
([Employee].[Employees].currentmember.datamember, [Measures].[Sales Amount Quota])
,FORMAT_STRING='Currency'
SELECT {[Measures].[Sales Amount Quota],[Measures].InvidualQuota} ON COLUMNS,
[Employee].[Employees].MEMBERS ON ROWS
FROM [Adventure Works]
32 . DefaultMember (MDX)
返回層次結構的默認成員。
語法:
Hierarchy_Expression.DefaultMember
參數:
Hierarchy_Expression
返回層次結構的有效多維表達式 (MDX)。
注釋:
特性的默認成員用於在查詢中不包括特性的情況下計算表達式。
示例:
下例結合使用 DefaultMember 函數和 Name 函數,返回 Adventure Works 多維數據集中的 Destination Currency 維度的默認成員。 例如,返回 US Dollar。 Name 函數不是用來返回度量值的默認屬性(即 value),而是返回度量值的名稱。
WITH MEMBER Measures.x AS
[Destination Currency].[Destination Currency].DefaultMember.Name
SELECT Measures.x ON 0
FROM [Adventure Works]
33 . 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 多維數據集中返回 Measures.[Gross Profit Margin] 度量值的日平均值,該值是根據 2003 財政年中每個月的所有日期計算出的。 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 及其占 Australia 總 Internet Sales Amount 的百分比。 此示例使用 Item 函數從 Ancestors 函數返回的集中提取第一個(也是唯一的)元組。
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]
34 . Dimension (MDX)
返回包含指定成員、級別或層次結構的層次結構。
語法:
Hierarchy syntax
Hierarchy_Expression.Dimension
Level syntax
Level_Expression.Dimension
Member syntax
Member_Expression.Dimension
參數
Hierarchy_Expression
返回層次結構的有效多維表達式 (MDX)。
Level_Expression
返回級別的有效多維表達式 (MDX)。
Member_Expression
返回成員的有效多維表達式 (MDX)。
示例
下例將 Dimension 函數與 Name 函數結合使用,以返回指定成員的層次結構名稱。
WITH member measures.x as [Product].[Product Model Lines].[Model].&[HL Road Tire].Dimension.Name
SELECT measures.x on 0
FROM [Adventure Works]
下例將 Dimension 函數與 Levels 和 Count 函數結合使用,以返回包含指定成員的層次結構中的級別數目。
WITH member measures.x as [Product].[Product Model Lines].[Model].&[HL Road Tire].Dimension.Levels.Count
SELECT measures.x on 0
FROM [Adventure Works]
下例將 Dimension 函數、Members 函數和 Count 函數結合使用,以返回包含指定成員的層次結構中的成員數目。
WITH member measures.x as [Product].[Product Model Lines].[Model].&[HL Road Tire].Dimension.Members.Count
SELECT measures.x on 0
FROM [Adventure Works]
35 . Dimensions (MDX)
返回數值表達式或字符串表達式指定的層次結構。
語法
Numeric expression syntax
Dimensions(Hierarchy_Number)
String expression syntax
Dimensions(Hierarchy_Name)
參數
Hierarchy_Number
指定層次結構號的有效數值表達式。
Hierarchy_Name
指定層次結構名稱的有效字符串表達式。
注釋
如果指定了層次結構號,則 Dimensions 函數返回一個層次結構,該層次結構在多維數據集中以零為基的位置就是指定的層次結構號。
如果指定了層次結構的名稱,則 Dimensions 函數返回指定的層次結構。 通常情況下,這個字符串版本的 Dimensions 函數與用戶定義的函數一起使用。
| 注意 |
| Measures 維度始終由 Dimensions(0) 表示。 |
示例
下例使用 Dimensions 函數連同一個數值表達式和一個字符串表達式,返回指定層次結構的名稱、級別計數和成員計數。
WITH MEMBER Measures.x AS Dimensions
('[Product].[Product Model Lines]').Name
SELECT Measures.x on 0
FROM [Adventure Works]
WITH MEMBER Measures.x AS Dimensions
('[Product].[Product Model Lines]').Levels.Count
SELECT Measures.x on 0
FROM [Adventure Works]
WITH MEMBER Measures.x AS Dimensions
('[Product].[Product Model Lines]').Members.Count
SELECT Measures.x on 0
FROM [Adventure Works]
WITH MEMBER Measures.x AS Dimensions(0).Name
SELECT Measures.x on 0
FROM [Adventure Works]
WITH MEMBER Measures.x AS Dimensions(0).Levels.Count
SELECT measures.x on 0
FROM [Adventure Works]
WITH MEMBER Measures.x AS Dimensions(0).Members.Count
SELECT measures.x on 0
FROM [Adventure Works]
36 . Distinct (MDX)
對指定的集求值,刪除該集中的重復元組,然后返回結果集。
語法
Distinct(Set_Expression)
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
如果 Distinct 函數在指定的集中找到了重復的元組,則此函數只保留重復元組的第一個實例,同時保留該集原來的順序。
示例
以下示例查詢說明如何將 Distinct 函數與命名集一起使用,以及如何將該函數與 Count 函數一起使用來查找集中不同元組的數目:
WITH SET MySet AS
{[Customer].[Customer Geography].[Country].&[Australia],[Customer].[Customer Geography].[Country].&[Australia],
[Customer].[Customer Geography].[Country].&[Canada],[Customer].[Customer Geography].[Country].&[France],
[Customer].[Customer Geography].[Country].&[United Kingdom],[Customer].[Customer Geography].[Country].&[United Kingdom]}
MEMBER MEASURES.SETCOUNT AS
COUNT(MySet)
MEMBER MEASURES.SETDISTINCTCOUNT AS
COUNT(DISTINCT(MySet))
SELECT {MEASURES.SETCOUNT, MEASURES.SETDISTINCTCOUNT} ON 0,
DISTINCT(MySet) ON 1
FROM [Adventure Works]
37 . DistinctCount (MDX)
返回集中非重復的非空元組的數目。
語法
DistinctCount(Set_Expression)
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
注釋
DistinctCount 函數等效於 Count(Distinct(Set_Expression), EXCLUDEEMPTY)。
示例
以下查詢說明如何使用 DistinctCount 函數:
WITH SET MySet AS
{[Customer].[Customer Geography].[Country].&[Australia],[Customer].[Customer Geography].[Country].&[Australia],
[Customer].[Customer Geography].[Country].&[Canada],[Customer].[Customer Geography].[Country].&[France],
[Customer].[Customer Geography].[Country].&[United Kingdom],[Customer].[Customer Geography].[Country].&[United Kingdom]}
*
{([Date].[Calendar].[Date].&[20010701],[Measures].[Internet Sales Amount] )}
//Returns the value 3 because Internet Sales Amount is null
//for the UK on the date specified
MEMBER MEASURES.SETDISTINCTCOUNT AS
DISTINCTCOUNT(MySet)
SELECT {MEASURES.SETDISTINCTCOUNT} ON 0
FROM [Adventure Works]
38 . 除 (MDX)
執行除法運算,並在被 0 除時返回備用結果或 BLANK()。
語法
Divide (<numerator>, <denominator> [,<alternateresult>])
參數
numerator
被除數,即被除的數字。
denominator
除數,即除以的數字。
alternateresult
(可選)被零除而導致錯誤時返回的值。 如果沒有提供,則默認值為 BLANK()。
注釋
被 0 除時的備用結果必須是一個常量。
39 . DrilldownLevel (MDX)
將某個集的成員深化到該集中所表示的最低級別的下一個級別。
指定要在哪一個級別深化為可選,但如果要設置級別,可以使用 level expression 或 index level。 這兩種參數互相排斥。 最后,如果計算成員出現在查詢中,你可指定一個聚合以將這些成員包含在行集中。
語法
DrilldownLevel(Set_Expression [,[Level_Expression] ,[Index]] [,INCLUDE_CALC_MEMBERS])
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Level_Expression
(可選)。 顯式標識要深化的級別的 MDX 表達式。 如果指定了級別表達式,請跳過下面的索引參數。
Index
(可選)。 有效的數值表達式,它指定在集中要深化的層次結構編號。 你可使用索引級別而不是 Level_Expression 顯式標識要深化的級別。
Include_Calc_Members
(可選)。 指示是否在深化級別包括計算成員(如果存在)的標志。
注釋
DrilldownLevel 函數根據指定集中包含的成員,返回按層次結構排列的一組子成員。 指定集中原始成員的順序將保持不變,只不過該函數的結果集中包含的所有子成員都位於其父成員下方並緊隨其父成員。
根據多級別分層數據結構,你可顯式選擇要深化的級別。 有兩種獨占方式可指定級別。 第一種方法是使用返回級別的 MDX 表達式設置level_expression 參數,另一種方法是使用通過數字指定級別的數字表達式指定 index 參數。
如果指定了級別表達式,函數將只檢索指定級別的成員的子成員,然后用這些子成員按層次結構順序構造一個集。 如果指定了級別表達式且該級別沒有成員,則忽略該級別表達式。
如果指定了索引值,此函數將基於從零開始的索引只檢索指定集中引用的層次結構的下一最低級別成員的子成員,然后用這些子成員按層次結構順序構造一個集。
如果級別表達式和索引值均未指定,此函數將只檢索指定集中引用的第一個維度的最低級別成員的子成員,然后用這些子成員按層次結構順序構造一個集。
通過查詢 XMLA 屬性 MdpropMdxDrillFunctions,您可以確認服務器為鑽取功能提供的支持的級別;有關詳細信息,請參閱支持的 XMLA 屬性 (XMLA)。
示例
你可使用 Adventure Works 多維數據集在 SSMS 中的 MDX 查詢窗口中嘗試下面的示例。
示例 1 – 演示最簡語法
第一個示例顯示了 DrilldownLevel 的最簡語法。 所需的唯一參數是集表達式。 請注意,運行此查詢時,你應獲取下一個級別的父 [All Categories] 和成員:[Accessories] 和 [Bikes] 等。 盡管這個示例很簡單,但它演示了 DrilldownLevel 函數的基本用途,即深化到下一個級別。
SELECT DRILLDOWNLEVEL({[Product].[Product Categories]} * {[Sales Territory].[Sales Territory]}}) ON COLUMNS
FROM [Adventure Works]
示例 2 – 使用顯式索引級別的替代語法
此示例演示了替代語法,該語法通過數字表達式指定索引級別。 在本例中,索引級別是 0。 對於從零開始的索引,這是最低級別。
SELECT
DRILLDOWNLEVEL({[Product].[Product Categories]} * {[Sales Territory].[Sales Territory]},,0) ON COLUMNS
FROM [Adventure Works]
請注意,結果集與之前的查詢完全相同。 通常,不必設置索引級別,除非你想要從特定級別開始深化。 將索引值設置為 1,然后設置為 2,重新運行之前的查詢。 索引值設置為 1 時,你會看到深化從層次結構中的第二個級別開始。 索引值設置為 2 時,深化從第三個級別(本示例中的最高級別)開始。 數字表達式越高,索引級別越高。
示例 3 – 演示級別表達式
下面的示例顯示如何使用級別表達式。 基於代表層次結構的集,使用級別表達式可讓你在層次結構中選擇開始深化的級別。
在本示例中,深化的級別從 [City] 開始,它是 DrilldownLevel 函數的第二個參數。 運行此查詢時,深化從華盛頓和俄勒岡州的 [City] 級別開始。對於 DrilldownLevel 函數,結果集還包括下一個級別 [Postal codes] 的成員。
SELECT [Measures].[Internet Sales Amount] ON COLUMNS,
NON EMPTY (
DRILLDOWNLEVEL(
{[Customer].[Customer Geography].[Country].[United States],
DESCENDANTS(
{ [Customer].[Customer Geography].[State-Province].[Washington],
[Customer].[Customer Geography].[State-Province].[Oregon]},
[Customer].[Customer Geography].[City]) } ,
[Customer].[Customer Geography].[City] ) ) ON ROWS
FROM [Adventure Works]
示例 4 – 包括計算成員
最后一個示例顯示計算成員,當你添加 include_calculated_members 標志時,計算成員顯示在結果集底部。 請注意,該標志被指定為第四個參數。
此示例有效的原因是計算成員所處的級別與非計算成員相同。 計算成員 [West Coast] 由來自 [United States] 的成員以及 [United States] 的下一個級別的所有成員組成。
WITH MEMBER
[Customer].[Customer Geography].[Country].&[United States].[West Coast] AS
[Customer].[Customer Geography].[State-Province].&[OR]&[US] +
[Customer].[Customer Geography].[State-Province].&[WA]&[US] +
[Customer].[Customer Geography].[State-Province].&[CA]&[US]
SELECT [Measures].[Internet Order Count] ON 0,
DRILLDOWNLEVEL([Customer].[Customer Geography].[Country].&[United States],,,INCLUDE_CALC_MEMBERS) on 1
FROM [Adventure Works]
如果僅刪除標志,然后重新運行該查詢,你會得到與減去計算成員 [West Coast] 相同的結果。
40 . DrilldownLevelBottom (MDX)
將集中某一指定級別上的最底層成員深化到下一個級別。
語法
DrilldownLevelBottom(Set_Expression, Count [,[<Level_Expression>] [,[<Numeric_Expression>][,INCLUDE_CALC_MEMBERS]]])
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Count
指定要返回的元組數的有效數值表達式。
Level_Expression
返回級別的有效多維表達式 (MDX)。
Numeric_Expression
可選。 返回數字的有效數值表達式,通常為單元坐標的多維表達式 (MDX)。
Include_Calc_Members
可選。 將計算成員添加到深化結果的關鍵字。
注釋
如果指定了數值表達式,則 DrilldownLevelBottom 函數根據對子成員集求得的指定值,對指定集中的每個成員的子成員按升序排序。 如果未指定數值表達式,則此函數根據由查詢上下文決定的子成員集所表示的單元的值,對指定的集中每個成員的子成員按升序排序。此行為類似於 BottomCount 和 Tail (MDX) 函數,都以自然順序返回一組成員,沒有任何排序。
排序后,DrilldownLevelBottom 函數返回包含父成員以及在 Count 中指定數目的具有最小值的子成員的集。
DrilldownLevelBottom 函數與 DrilldownLevel 函數相似,但 DrilldownLevelBottom 函數不是返回包括指定級別上的每個成員的所有子成員,而是返回指定數目的最底層子成員。
通過查詢 XMLA 屬性 MdpropMdxDrillFunctions,您可以確認服務器為鑽取功能提供的支持的級別;有關詳細信息,請參閱支持的 XMLA 屬性 (XMLA)。
示例
下面的示例將根據默認度量值返回產品類別級別的最后三個子成員。 在 Adventure Works 示例多維數據集中,Accessories 的最后三個子成員是 Tires and Tubes、Pumps 和 Panniers。 在 Management Studio 的 MDX 查詢窗口中,你可導航到“產品 | 產品類別 | 成員 | 所有產品 | 附件”查看完整的列表。 你可增加計數參數以返回更多成員。
SELECT DrilldownLevelBottom
([Product].[Product Categories].children,
3,
[Product].[Product Categories].[Category])
ON 0
FROM [Adventure Works]
下面的示例演示了 include_calc_members 標志的使用,該標識用於包括深化級別中的計算成員。 [Reseller Order Count] 度量值將添加到DrilldownLevelBottom 語句以確保該度量值對結果進行排序。 要查看計算成員,必須將計數至少增加到 9。
WITH MEMBER
[Product].[Product Categories].[Category].&[3].[Premium Clothes] AS
[Product].[Product Categories].[Subcategory].&[18] +
[Product].[Product Categories].[Subcategory].&[21]
SELECT [Measures].[Reseller Order Count] ON 0,
DRILLDOWNLEVELBOTTOM(
[Product].[Product Categories].children ,
9,
[Product].[Product Categories].[Category] ,
[Measures].[Reseller Order Count],
INCLUDE_CALC_MEMBERS ) ON 1
FROM [Adventure Works]
41 . DrilldownLevelTop (MDX)
將集中某一指定級別上最頂端的成員深化到下一個級別。
語法
DrilldownLevelTop(<Set_Expression>, <Count> [,[<Level_Expression>] [,[<Numeric_Expression>][,INCLUDE_CALC_MEMBERS]]])
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Count
指定要返回的元組數的有效數值表達式。
Level_Expression
返回級別的有效多維表達式 (MDX)。
Numeric_Expression
返回數字的有效數值表達式,通常為單元坐標的多維表達式 (MDX)。
Include_Calc_Members
用於將計算成員添加到深化結果的關鍵字。
注釋
如果指定了數值表達式,則 DrilldownLevelTop 函數根據對子成員集求得的數值表達式的值,對指定集中每個成員的子成員按降序排序。 如果未指定數值表達式,則此函數根據由查詢上下文確定的子成員集所表示的單元值,對指定集中每個成員的子成員按降序排序。
排序后,DrilldownLevelTop 函數返回包含父成員以及在 Count, 中指定數量的具有最大值的子成員的集。
DrilldownLevelTop 函數與 DrilldownLevel 函數相似,但 DrilldownLevelTop 函數不是包括指定級別處每個成員的所有子成員,而是返回指定數目的最頂層子成員。
通過查詢 XMLA 屬性 MdpropMdxDrillFunctions,您可以確認服務器為鑽取功能提供的支持的級別;有關詳細信息,請參閱支持的 XMLA 屬性 (XMLA)。
示例
下面的示例根據默認度量值返回產品類別級別的前三個子成員。 在 Adventure Works 示例多維數據集中,Accessories 的前三個子成員是Bike Racks、Bike Stands 和 Bottles and Cages。 在 Management Studio 的 MDX 查詢窗口中,你可導航到“產品 | 產品類別 | 成員 | 所有產品 | 附件”查看完整的列表。 你可增加計數參數以返回更多成員。
SELECT DrilldownLevelTop
([Product].[Product Categories].children,
3,
[Product].[Product Categories].[Category])
ON 0
FROM [Adventure Works]
下面的示例演示了 include_calc_members 標志的使用,該標識用於包括深化級別中的計算成員。 度量值 [Reseller Order Count] 包含在DrilldownLevelTop 語句中以確保返回的值將按該度量值排序。
WITH MEMBER
[Product].[Product Categories].[Category].&[3].[Premium Clothes] AS
[Product].[Product Categories].[Subcategory].&[18] +
[Product].[Product Categories].[Subcategory].&[21]
SELECT [Measures].[Reseller Order Count] ON 0,
DRILLDOWNLEVELTOP(
[Product].[Product Categories].children ,
2,
[Product].[Product Categories].[Category] ,
[Measures].[Reseller Order Count],
INCLUDE_CALC_MEMBERS ) ON 1
FROM [Adventure Works]
42 . DrilldownMember (MDX)
深化第一個指定集與第二個指定集的交集中的成員。
該函數也可以通過使用第一個元組層次結構或者可選的指定層次結構,對一組元組進行深化。
語法
DrillDownMember(<Set_Expression1>, <Set_Expression2> [,[<Target_Hierarchy>]] [,[RECURSIVE][,INCLUDE_CALC_MEMBERS]])
參數
Set_Expression1
返回集的有效多維表達式 (MDX)。
Set_Expression2
返回集的有效多維表達式 (MDX)。
Target_Hierarchy
返回層次結構的有效多維表達式 (MDX)。
Recursive
指示集的遞歸比較的關鍵字。
Include_Calc_Members
用於使計算成員能夠包括在深化結果中的關鍵字。
注釋
該函數返回按層次結構排序的子成員集,並包括第一個集和第二個集的交集中的成員。 如果第一個集包含父成員以及一個或多個子成員,則不深化父成員。 第一個集可以具有任何維數,但第二個集必須包含一個一維集。 第一個集中的原始成員的順序將保留,只不過該函數的結果集中包含的所有子成員都緊隨在它們的父成員之后。 該函數將通過檢索第一個集與第二個集的交集中的每個成員的子成員來構造結果集。 如果指定了RECURSIVE,該函數會繼續將結果集的成員與第二個集中的成員進行遞歸比較,檢索結果集與第二個集的交集中的每個成員的子成員,直到找遍結果集與第二個集的交集中的成員為止。
通過查詢 XMLA 屬性 MdpropMdxDrillFunctions ,您可以確認服務器為鑽取功能提供的支持的級別;有關詳細信息,請參閱 支持的 XMLA 屬性 (XMLA)。
第一個集可以包含元組,但不能包含成員。 對元組的深化是一種 OLE DB 擴展,這種深化將返回元組集而非成員集。
| 重要提示 |
| 當成員后面緊跟其子成員之一時,將不會深化該成員。 成員集中成員的順序對於 Drilldown* 和 Drillup* 系列的函數非常重要。 |
示例
下例深化了 Australia 成員,它是第一個集與第二個集的交集成員。
SELECT DrilldownMember
( [Geography].[Geography].Children,
{[Geography].[Geography].[Country].[Australia],
[Geography].[Geography].[State-Province].[New South Wales]}
)
ON 0
FROM [Adventure Works]
下例深化了 Australia 成員,它是第一個集與第二個集的交集成員。 但是,由於指定了 RECURSIVE 參數,該函數會繼續將結果集的成員(State-Province 級別的成員)與第二個集中的成員進行遞歸比較,檢索結果集(City 級別的成員)與第二個集的交集中的每個成員的子成員,直到找遍結果集與第二個集的交集中的成員為止。
SELECT DrilldownMember
( [Geography].[Geography].Children,
{[Geography].[Geography].[Country].[Australia],
[Geography].[Geography].[State-Province].[New South Wales]}
,RECURSIVE)
ON 0
FROM [Adventure Works]
43 . DrilldownMemberBottom (MDX)
深化第一個指定集與第二個指定集的交集中的成員,並將結果集的成員數限制為指定數目。 該函數也可以通過使用第一個元組層次結構或者可選的指定層次結構,對一組元組進行深化。
語法
DrillDownMemberBottom(<Set_Expression1>, <Set_Expression2>, <Count> [,[<Numeric_Expresion>] [,[<Hierarchy>]] [,[RECURSIVE][,INCLUDE_CALC_MEMBERS]]])
參數
Set_Expression1
返回集的有效多維表達式 (MDX)。
Set_Expression2
返回集的有效多維表達式 (MDX)。
Count
指定要返回的元組數的有效數值表達式。
Numeric_Expression
返回數字的有效數值表達式,通常為單元坐標的多維表達式 (MDX)。
Hierarchy
返回層次結構的有效多維表達式 (MDX)。
Recursive
指示集的遞歸比較的關鍵字。
Include_Calc_Members
用於使計算成員能夠包括在深化結果中的關鍵字。
注釋
如果指定了數值表達式,DrilldownMemberBottom 函數將根據對子成員集計算此數值表達式所得到的值,對第一個集中每個成員的子成員按升序排序。 如果未指定數值表達式,此函數將根據由查詢上下文決定的子成員集所表示的單元的值,對第一個集中每個成員的子成員按升序排序。 此行為類似於 BottomCount 和 Tail (MDX) 函數,都以自然順序返回一組成員,沒有任何排序。
排序后,DrilldownMemberBottom 函數返回一個集,該集包含父成員和一定數量(此數量在 Count 中指定)的子成員,這些子成員具有最小值,且同時包含在這兩個集中。
如果指定了 RECURSIVE,此函數將按上述方式對第一個集進行排序,然后將第一個集的成員(它們按層次結構排列)與第二個集的成員進行遞歸比較。 此函數檢索第一個集與第二個集的交集中每個成員的指定數目的最底層子成員。
第一個集可以包含元組,但不能包含成員。 元組的深化是 OLE DB 的擴展,它返回元組集而非成員集。
DrilldownMemberBottom 函數類似於 DrilldownMember 函數,但是 DrilldownMemberBottom 函數返回第一個集與第二個集的交集中每個成員的指定數目的最底層子成員,而不是包括交集中每個成員的所有子成員。
通過查詢 XMLA 屬性 MdpropMdxDrillFunctions,您可以確認服務器為鑽取功能提供的支持的級別;有關詳細信息,請參閱支持的 XMLA 屬性 (XMLA)。
44 . DrilldownMemberTop (MDX)
深化第一個指定集與第二個指定集的交集中的成員,並將結果集的成員數限制為指定數目。 該函數也可以通過使用第一個元組層次結構或者可選的指定層次結構,對一組元組進行深化。
語法
DrillDownMemberTop(<Set_Expression1>, <Set_Expression2>, <Count> [,[<Numeric_Expression>] [,[<Hierarchy>]] [,[RECURSIVE][,INCLUDE_CALC_MEMBERS]]])
參數
Set_Expression1
返回集的有效多維表達式 (MDX)。
Set_Expression2
返回集的有效多維表達式 (MDX)。
Count
指定要返回的元組數的有效數值表達式。
Numeric_Expression
返回數字的有效數值表達式,通常為單元坐標的多維表達式 (MDX)。
Hierarchy
返回層次結構的有效多維表達式 (MDX)。
Recursive
指示集的遞歸比較的關鍵字。
Include_Calc_Members
用於使計算成員能夠包括在深化結果中的關鍵字。
注釋
如果指定了數值表達式,則 DrilldownMemberTop 函數根據對子成員集求得的數值表達式的值,對第一個集中每個成員的子成員按降序排序。如果未指定數值表達式,則此函數根據由查詢上下文確定的子成員集所表示的單元值,對第一個集中每個成員的子成員按降序排序。 此行為類似於 TopCount 和 Head (MDX) 函數,都以自然順序返回一組成員,沒有任何排序。
排序后,DrilldownMemberTop 函數返回包含父成員以及 Count, 中指定數量的子成員的集,這些子成員具有最大值,且同時包含在兩個集中。
如果指定了 RECURSIVE,則此函數將按上述方法對第一個集進行排序,然后將第一個集的成員(它們按層次結構排列)與第二個集的成員進行遞歸比較。此函數檢索第一個集與第二個集的交集中每個成員的指定數目的最頂層子成員。
第一個集可以包含元組,但不能包含成員。 元組的深化是 OLE DB 的擴展,它返回元組集而非成員集。
DrilldownMemberTop 函數類似於 DrilldownMember 函數,但是 DrilldownMemberTop 函數返回第一個集與第二個集的交集中每個成員的指定數目的最頂層子成員,而不是包括交集中每個成員的所有子成員。
通過查詢 XMLA 屬性 MdpropMdxDrillFunctions,您可以確認服務器為鑽取功能提供的支持的級別;有關詳細信息,請參閱支持的 XMLA 屬性 (XMLA)。
示例
下例深化了服裝類別,返回已發貨訂單數量最多的三個服裝子類別。
SELECT DrilldownMemberTop ({[Product].[Product Categories].[All Products],
[Product].[Product Categories].[Category].Bikes,
[Product].[Product Categories].[Category].Clothing},
{[Product].[Product Categories].[Category].Clothing},
3,
[Measures].[Reseller Order Quantity])
ON 0
FROM [Adventure Works]
WHERE [Measures].[Reseller Order Quantity]
45 . DrillupLevel (MDX)
淺化某個集在指定級別以下的成員。
語法
DrillupLevel(Set_Expression [ , Level_Expression ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Level_Expression
返回級別的有效多維表達式 (MDX)。
注釋
DrillupLevel 函數根據指定集中包括的成員,返回按層次結構組織的成員集。 指定集中的成員順序將予以保留。
如果指定了級別表達式,則 DrillupLevel 函數只檢索那些位於指定級別以上的成員,然后用它們來構造集。 如果指定了級別表達式但指定集中沒有指定級別的成員,則返回指定的集。
如果未指定級別表達式,則此函數只檢索那些比指定的集所引用的第一個維度的最低級別高一個級別的成員,然后用它們來構造集。
示例
下例將返回位於子類別級別之上第一個集中的成員集。
SELECT DrillUpLevel
({[Product].[Product Categories].[All Products]
,[Product].[Product Categories].[Subcategory].&[32],
[Product].[Product Categories].[Product].&[215]},
[Product].[Product Categories].[Subcategory]
)
ON 0
FROM [Adventure Works]
WHERE [Measures].[Internet Order Quantity]
46 . DrillupMember (MDX)
返回指定集中不是第二個指定集中成員的后代的成員。
語法
DrillupMember(Set_Expression1, Set_Expression2)
參數
Set_Expression1
返回集的有效多維表達式 (MDX)。
Set_Expression2
返回集的有效多維表達式 (MDX)。
注釋
DrillupMember 函數返回成員集,其中的成員是第一個集中的成員並且是第二個集中成員的后代。 第一個集可以具有任何維數,但第二個集必須包含一個一維集。 第一個集中的原始成員順序會被保留。 此函數在構造集時僅包括位於第一個集中並且是第二個集中成員的直接后代的那些成員。如果第一個集中某成員的直接祖先不在第二個集中,則第一個集中的該成員包括在此函數返回的集中。 第一個集中位於第二個集中某個祖先成員之前的后代,也會包括在內。
第一個集可以包含元組,但不能包含成員。 元組的深化是 OLE DB 的擴展,它返回元組集而非成員集。
| 重要提示 |
| 只有后面緊跟子成員或后代的成員才會被淺化。 成員集中成員的順序對於 Drilldown* 和 Drillup* 系列的函數非常重要。 請考慮使用Hierarchize 函數來正確地對第一個集的成員進行排序。 |
示例
除了第二個集以外,以下三個示例都是相似的。 在第一個示例時,第二個集為 United States。 因此,從結果集中排除 Colorado。 它是 United States 的后代。
SELECT DrillUpMember (
{ [Geography].[Geography].[Country].[Canada]
,[Geography].[Geography].[Country].[United States]
,[Geography].[Geography].[State-Province].[Colorado]
,[Geography].[Geography].[State-Province].[Alberta]
,[Geography].[Geography].[State-Province].[Brunswick]
}
, {[Geography].[Geography].[Country].[United States]}
) ON 0
FROM [Adventure Works]
示例二向我們顯示了成員順序的重要性。 因為 DrillupMember 僅淺化了第一個集中由后代緊跟的這些成員,它不淺化 Canada 成員。 Canada 與其后代由 United States 和 Colorado 分隔開來。 如果你對成員重新排序,使 Canada 直接位於 Alberta 上方,則 Alberta 和 Brunswick 都將從行集中排除。
SELECT DrillUpMember (
{ [Geography].[Geography].[Country].[Canada]
,[Geography].[Geography].[Country].[United States]
,[Geography].[Geography].[State-Province].[Colorado]
,[Geography].[Geography].[State-Province].[Alberta]
,[Geography].[Geography].[State-Province].[Brunswick]
}
, {[Geography].[Geography].[Country].[Canada]}
)
ON 0
FROM [Adventure Works]
示例三顯示了 Hierarchize 的使用可以如何降低成員順序的影響以及如何淺化 Canada 成員。
SELECT DrillUpMember (
Hierarchize
(
{ [Geography].[Geography].[Country].[Canada]
,[Geography].[Geography].[Country].[United States]
,[Geography].[Geography].[State-Province].[Colorado]
,[Geography].[Geography].[State-Province].[Alberta]
,[Geography].[Geography].[State-Province].[Brunswick]
}
), {[Geography].[Geography].[Country].[Canada]}
)
ON 0
FROM [Adventure Works]
47 . Error (MDX)
引發錯誤,可以根據需要選擇提供指定的錯誤消息。
語法
Error( [ Error_Text ] )
參數
Error_Text
包含要返回的錯誤消息的有效字符串表達式。
示例
以下查詢說明如何在計算度量值內使用 Error 函數:
WITH MEMBER MEASURES.ERRORDEMO AS ERROR("THIS IS AN ERROR")
SELECT
MEASURES.ERRORDEMO ON 0
FROM [Adventure Works]
48 . Except (MDX)
計算兩個集並刪除第一個集中與第二個集中的元組重復的元組,也可以選擇保留重復項。
語法
Except(Set_Expression1, Set_Expression2 [, ALL ] )
參數
Set_Expression1
返回集的有效多維表達式 (MDX)。
Set_Expression2
返回集的有效多維表達式 (MDX)。
注釋
如果指定了 ALL,該函數將保留在第一個集中找到的重復項,但仍會刪除在第二個集中找到的重復項。 成員的返回順序與它們在第一個集中出現的順序相同。
示例
以下示例說明了此函數的用法。
//This query shows the quantity of orders for all products,
//with the exception of Components, which are not
//sold.
SELECT
[Date].[Month of Year].Children ON COLUMNS,
Except
([Product].[Product Categories].[All].Children ,
{[Product].[Product Categories].[Components]}
) ON ROWS
FROM
[Adventure Works]
WHERE
([Measures].[Order Quantity])
49 . Exists (MDX)
返回與第二個指定集的一個或多個元組共存的第一個指定集中的元組集。 該函數手動執行自動 Exists 以自動方式執行的操作。 有關自動 Exists 的詳細信息,請參閱 MDX 中的重要概念 (Analysis Services)。
如果提供了可選的 <Measure Group Name>,則函數返回與第二個集中的一個或多個元組共存的元組以及在指定度量值組的事實數據表中具有關聯行的元組。
語法
Exists( Set_Expression1 , Set_Expression2 [, MeasureGroupName] )
參數
Set_Expression1
返回集的有效多維表達式 (MDX)。
Set_Expression2
返回集的有效多維表達式 (MDX)。
MeasureGroupName
指定度量值組名稱的有效字符串表達式。
注釋
如果指定了 MeasureGroupName 參數,則帶有包含 Null 值的度量值的度量值組行會影響 Exists。 下面是此形式的 Exists 和 Nonempty 函數之間的差異:如果這些度量值的 NullProcessing 屬性設置為 Preserve,則意味着在對該部分的多維數據集運行查詢時這些度量值將顯示 Null 值;NonEmpty 始終從集中刪除具有 Null 度量值的元組,而具有 MeasureGroupName 參數的 Exists 將不篩選具有關聯的度量值組行的元組,甚至在度量值為 Null 時也是如此。
如果使用 MeasureGroupName 參數,結果取決於引用的度量值組中是否具有可見度量值;如果引用的度量值組中無可見度量值,則無論Set_Expression1 和 Set_Expression2 的值為何,EXISTS 將始終返回空集。
示例
居住在加利福尼亞的客戶:
SELECT [Measures].[Internet Sales Amount] ON 0,
EXISTS(
[Customer].[Customer].[Customer].MEMBERS
, {[Customer].[State-Province].&[CA]&[US]}
) ON 1
FROM [Adventure Works]
居住在加利福尼亞並且有銷售額的客戶:
SELECT [Measures].[Internet Sales Amount] ON 0,
EXISTS(
[Customer].[Customer].[Customer].MEMBERS
, {[Customer].[State-Province].&[CA]&[US]}
, "Internet Sales") ON 1
FROM [Adventure Works]
有銷售額的客戶:
SELECT [Measures].[Internet Sales Amount] ON 0,
EXISTS(
[Customer].[Customer].[Customer].MEMBERS
, , "Internet Sales") ON 1
FROM [Adventure Works]
購買了自行車的客戶:
SELECT [Measures].[Internet Sales Amount] ON 0,
EXISTS(
[Customer].[Customer].[Customer].MEMBERS
, {[Product].[Product Categories].[Category].&[1]}
, "Internet Sales") ON 1
FROM [Adventure Works]
50 . Extract (MDX)
返回由提取的層次結構元素中的元組構成的集。
語法
Extract(Set_Expression, Hierarchy_Expression1 [,Hierarchy_Expression2, ...n] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Hierarchy_Expression1
返回層次結構的有效多維表達式 (MDX)。
Hierarchy_Expression2
返回層次結構的有效多維表達式 (MDX)。
注釋
Extract 函數返回由提取的層次結構元素中的元組構成的集。 對於指定集中的每個元組,將指定層次結構的成員提取到結果集中的新元組。 此函數始終刪除重復元組。
Extract 函數執行的操作與 Crossjoin 函數相反。
示例
以下查詢說明如何在由 NonEmpty 函數返回的元組集上使用 Extract 函數:
SELECT [Measures].[Internet Sales Amount] ON 0,
//Returns the distinct combinations of Customer and Date for all purchases
//of Bike Racks or Bike Stands
EXTRACT(
NONEMPTY(
[Customer].[Customer].[Customer].MEMBERS
*
[Date].[Date].[Date].MEMBERS
*
{[Product].[Product Categories].[Subcategory].&[26],[Product].[Product Categories].[Subcategory].&[27]}
*
{[Measures].[Internet Sales Amount]}
)
, [Customer].[Customer], [Date].[Date])
ON 1
FROM [Adventure Works]
51 . Filter (MDX)
返回根據搜索條件對指定集進行篩選后得到的集。
語法
Filter(Set_Expression, Logical_Expression )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Logical_Expression
計算結果為 True 或 False 的有效多維表達式 (MDX) 邏輯表達式。
注釋
Filter 函數對指定集中的每個元組計算指定的邏輯表達式。 如果邏輯表達式計算結果為 true,該函數將返回由指定集中的每個元組構成的集。 如果所有元組的計算結果都不為 true,則返回一個空集。
Filter 函數的工作方式與 IIf 函數類似。 IIf 函數只返回兩個選項中的一個,返回哪一個取決於 MDX 邏輯表達式的值;而 Filter 函數返回符合指定搜索條件的元組集。 實際上,Filter 函數是對集中的每個元組執行 IIf(Logical_Expression, Set_Expression.Current, NULL),然后返回所得到的集。
示例
以下示例說明 Filter 函數在查詢的行軸上的用法,以便僅返回 Internet Sales Amount 大於 $10000 的 Date:
SELECT [Measures].[Internet Sales Amount] ON 0,
FILTER(
[Date].[Date].[Date].MEMBERS
, [Measures].[Internet Sales Amount]>10000)
ON 1
FROM
[Adventure Works]
Filter function 函數還可以在計算成員定義內部使用。 下面的示例將從 Adventure Works 多維數據集中返回 2003 年前九個月(包含在 Date 維度中)聚合的 Measures.[Order Quantity] 成員之和。 PeriodsToDate 函數定義 Aggregate 函數對其進行運算的集中的元組。 Filter 函數將返回元組限制為先前時段內 Reseller Sales Amount 度量值較低的那些元組。
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])
52 . FirstChild (MDX)
返回指定成員的第一個子成員。
語法
Member_Expression.FirstChild
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
示例
下面的查詢返回 Fiscal 層次結構中 2003 會計年度的第一個子級,也就是 2003 會計年度的第一個半期。
SELECT [Date].[Fiscal].[Fiscal Year].&[2003].FirstChild ON 0
FROM [Adventure Works]
53 . FirstSibling (MDX)
返回成員的父成員的第一個子成員。
語法
Member_Expression.FirstSibling
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
示例
以下查詢將返回 Fiscal 層次結構中 Fiscal Year 2003 的第一個同級,即 Fiscal Year 2002。
SELECT [Date].[Fiscal].[Fiscal Year].&[2003].FirstSibling ON 0
FROM [Adventure Works]
54 . Generate (MDX)
將一個集應用於另一個集中的每個成員,然后對得到的集求並集。 另外,此函數返回通過用字符串表達式對集求值而創建的串聯字符串。
語法
Set expression syntax
Generate( Set_Expression1 , Set_Expression2 [ , ALL ] )
String expression syntax
Generate( Set_Expression1 , String_Expression [ ,Delimiter ] )
參數
Set_Expression1
返回集的有效多維表達式 (MDX)。
Set_Expression2
返回集的有效多維表達式 (MDX)。
String_Expression
通常為指定集中每個元組當前成員名稱 (CurrentMember.Name) 的有效字符串表達式。
Delimiter
以字符串表達式表示的有效分隔符。
注釋
如果指定了第二個集,則 Generate 函數將第二個集中的元組應用於第一個集中的每個元組,再對所得到的集求並集,然后返回生成的集。 如果指定了 ALL,則函數在所得到的集中保留重復項。
如果指定了字符串表達式,則 Generate 函數對第一個集中的每個元組求指定字符串表達式的值,再串聯得到的結果,然后返回生成的值。 根據需要,可以分隔字符串,從而分隔得到的串聯字符串中的每個結果。
示例
集
在以下示例中,由於 [Date].[Calendar Year].[Calendar Year].MEMBERS 集中有四個成員,因此,查詢四次返回包含 Measure Internet Sales Amount 的集:
SELECT
GENERATE( [Date].[Calendar Year].[Calendar Year].MEMBERS
, {[Measures].[Internet Sales Amount]}, ALL)
ON 0
FROM [Adventure Works]
刪除 ALL 將更改查詢,這樣僅返回一次 Internet Sales Amount:
SELECT
GENERATE( [Date].[Calendar Year].[Calendar Year].MEMBERS
, {[Measures].[Internet Sales Amount]})
ON 0
FROM [Adventure Works]
Generate 最常見的實際用法是為一組成員計算復雜集表達式,如 TopCount。 以下示例查詢顯示行上每個日歷年的前 10 種產品:
SELECT
{[Measures].[Internet Sales Amount]}
ON 0,
GENERATE(
[Date].[Calendar Year].[Calendar Year].MEMBERS
, TOPCOUNT(
[Date].[Calendar Year].CURRENTMEMBER
*
[Product].[Product].[Product].MEMBERS
,10, [Measures].[Internet Sales Amount]))
ON 1
FROM [Adventure Works]
請注意,每年顯示不同的前 10 種產品,使用 Generate 是得到此結果的唯一方法。 將日歷年和前 10 種產品的集進行簡單交叉聯接將顯示所有時間的前 10 種產品(每年都重復),如以下示例所示:
SELECT
{[Measures].[Internet Sales Amount]}
ON 0,
[Date].[Calendar Year].[Calendar Year].MEMBERS
*
TOPCOUNT(
[Product].[Product].[Product].MEMBERS
,10, [Measures].[Internet Sales Amount])
ON 1
FROM [Adventure Works]
字符串
以下示例說明如何使用 Generate 返回字符串:
WITH
MEMBER MEASURES.GENERATESTRINGDEMO AS
GENERATE(
[Date].[Calendar Year].[Calendar Year].MEMBERS,
[Date].[Calendar Year].CURRENTMEMBER.NAME)
MEMBER MEASURES.GENERATEDELIMITEDSTRINGDEMO AS
GENERATE(
[Date].[Calendar Year].[Calendar Year].MEMBERS,
[Date].[Calendar Year].CURRENTMEMBER.NAME, " AND ")
SELECT
{MEASURES.GENERATESTRINGDEMO, MEASURES.GENERATEDELIMITEDSTRINGDEMO}
ON 0
FROM [Adventure Works]
| 注意 |
| 由於利用此形式的 Generate 函數能夠返回顯示集中所有成員名稱的字符串,因此,調試計算時,此形式會很有用。 與 SetToStr (MDX) 函數返回的集的嚴格 MDX 表示形式相比,此形式可能更易於讀取。 |
55 . Head (MDX)
返回集中指定數目的前幾個元素,同時保留重復項。
語法
Head(Set_Expression [ ,Count ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Count
指定要返回的元組數的有效數值表達式。
注釋
Head 函數從指定集的開始處返回指定的元組數目。 並保留元素的順序。 Count 的默認值為 1。 如果指定的元組數目小於 1,則 Head 函數返回空集。 如果指定的元組數目超過了集中的元組數目,則此函數返回原始集。
示例
以下示例根據 Reseller Gross Profit 返回產品的前五大銷售子類別(與層次結構無關)。 Head 函數用於在使用 Order 函數將結果排序后,僅返回結果中的前 5 個集。
SELECT
[Measures].[Reseller Gross Profit] ON 0,
Head
(Order
([Product].[Product Categories].[SubCategory].members
,[Measures].[Reseller Gross Profit]
,BDESC
)
,5
) ON 1
FROM [Adventure Works]
56 . Hierarchize (MDX)
對層次結構中的某個集的成員進行排序。
語法
Hierarchize(Set_Expression [ , POST ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
注釋
Hierarchize 函數按層次結構的順序組織指定集中的成員。 此函數始終保留重復項。
如果未指定 POST,則此函數按自然順序對一定級別的成員進行排序。 如果未指定其他排序條件,則成員的自然順序就是它們在層次結構中的默認排序順序。 子成員會緊跟在它們的父成員之后。
如果指定了 POST,則 Hierarchize 函數按非自然順序對一定級別的成員進行排序。 也就是說,子成員優先於他們的父級。
示例
下例淺化了 Canada 成員。 Hierarchize 函數用於按層次結構的順序組織指定集中的成員,DrillUpMember 函數也要求如此。
SELECT DrillUpMember
(
Hierarchize
(
{[Geography].[Geography].[Country].[Canada]
,[Geography].[Geography].[Country].[United States]
,[Geography].[Geography].[State-Province].[Alberta]
,[Geography].[Geography].[State-Province].[Brunswick]
,[Geography].[Geography].[State-Province].[Colorado]
}
), {[Geography].[Geography].[Country].[United States]}
)
ON 0
FROM [Adventure Works]
下面的示例將從 Adventure Works 多維數據集中返回 2003 年前九個月(包含在 Date 維度中)聚合的 Measures.[Order Quantity] 成員之和。PeriodsToDate 函數定義 Aggregate 函數對其進行運算的集中的元組。 Hierarchize 函數按層次結構的順序組織 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])
57 . 層次結構 Hierarchy (MDX)
返回包含指定成員或級別的層次結構。
語法
Member expression syntax
Member_Expression.Hierarchy
Level expression syntax
Level_Expression.Hierarchy
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
Level_Expression
返回級別的有效多維表達式 (MDX)。
示例
下面的示例返回 AdventureWorks 多維數據集中 Data 維度的 Calendar 層次結構的名稱。
WITH
MEMBER Measures.HierarchyName as
[Date].[Calendar].Currentmember.Hierarchy.Name
SELECT {Measures.HierarchyName} ON 0,
{[Date].[Calendar].[All Periods]} ON 1
FROM [Adventure Works]
58 . IIf (MDX)
根據布爾條件為 true 還是 false,計算不同的分支表達式。
語法
IIf(Logical_Expression, Expression1 [HINT <hints>], Expression2 [HINT <hints>])
參數
IIf 函數有三個參數:iif(<條件>, <then 分支>, <else 分支>)。
Logical_Expression
計算結果為 true (1) 或 false (0) 的條件。 它必須是有效的多維表達式 (MDX) 邏輯表達式。
Expression1 Hint [Eager|Strict|Lazy]]
邏輯表達式的計算結果為 true 時使用。 Expression1 必須是有效的多維表達式 (MDX) 表達式。
Expression2 Hint [Eager|Strict|Lazy]]
邏輯表達式的計算結果為 false 時使用。 Expression2 必須是有效的多維表達式 (MDX) 表達式。
注釋
此表達式的值為零時,邏輯表達式指定的條件的計算結果為 false。 對於其他任何值,計算結果均為 true。
條件為 true 時,IIf 函數返回第一個表達式。 否則,該函數返回第二個表達式。
指定的表達式可以返回值或 MDX 對象。 此外,指定表達式的類型無需匹配。
建議不要用 IIf 函數來創建基於搜索條件的成員集。 請改用 Filter 函數使用邏輯表達式對指定集中的每個成員求值,然后返回成員子集。
| 注意 |
| 如果任意一個表達式的計算結果為 NULL,則當滿足該條件時,結果集為 NULL。 |
提示是一個可選修飾符,用於決定如何以及何時計算表達式。 它允許您通過指定計算表達式的方式來覆蓋默認查詢計划。
EAGER 針對原始 IIF 子空間計算表達式。
STRICT 僅在邏輯條件表達式創建的受限制子空間中計算表達式。
LAZY 在逐個單元的模式下計算表達式。
EAGER 和 STRICT 僅應用於 IIF 的 then-else 分支,LAZY 則應用於所有 MDX 表達式。 任意 MDX 表達式可以后跟 HINT LAZY,后者在逐個單元的模式下計算該表達式。
在提示中,EAGER 和 STRICT 是互斥的;可以在不同表達式的相同 IIF(,,) 中使用它們。
有關詳細信息,請參閱 SQL Server Analysis Services 2008 中的 IIF 函數查詢提示和 MDX IIF 函數和 CASE 語句的執行計划和計划提示。
示例
以下查詢說明 IIF 在計算度量值內部的簡單用法,該函數在度量值 Internet Sales Amount 大於或小於 10000 美元時返回兩個不同的字符串值之一:
WITH MEMBER MEASURES.IIFDEMO AS
IIF([Measures].[Internet Sales Amount]>10000
, "Sales Are High", "Sales Are Low")
SELECT {[Measures].[Internet Sales Amount],MEASURES.IIFDEMO} ON 0,
[Date].[Date].[Date].MEMBERS ON 1
FROM [Adventure Works]
IIF 的十分常見的用法是處理計算度量值內部的“被零除”錯誤,如以下示例所示:
WITH
//Returns 1.#INF when the previous period contains no value
//but the current period does
MEMBER MEASURES.[Previous Period Growth With Errors] AS
([Measures].[Internet Sales Amount]-([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER.PREVMEMBER))
/
([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER.PREVMEMBER)
,FORMAT_STRING='PERCENT'
//Traps division by zero and returns null when the previous period contains
//no value but the current period does
MEMBER MEASURES.[Previous Period Growth] AS
IIF(([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER.PREVMEMBER)=0,
NULL,
([Measures].[Internet Sales Amount]-([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER.PREVMEMBER))
/
([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER.PREVMEMBER)
),FORMAT_STRING='PERCENT'
SELECT {[Measures].[Internet Sales Amount],MEASURES.[Previous Period Growth With Errors], MEASURES.[Previous Period Growth]} ON 0,
DESCENDANTS(
[Date].[Calendar].[Calendar Year].&[2004],
[Date].[Calendar].[Date])
ON 1
FROM [Adventure Works]
WHERE([Product].[Product Categories].[Subcategory].&[26])
以下是 IIF 的一個示例,在 Generate 函數內部返回兩個集之一,以便在行上創建一個復雜的元組集:
SELECT {[Measures].[Internet Sales Amount]} ON 0,
//If Internet Sales Amount is zero or null
//returns the current year and the All Customers member
//else returns the current year broken down by Country
GENERATE(
[Date].[Calendar Year].[Calendar Year].MEMBERS
, IIF([Measures].[Internet Sales Amount]=0,
{([Date].[Calendar Year].CURRENTMEMBER, [Customer].[Country].[All Customers])}
, {{[Date].[Calendar Year].CURRENTMEMBER} * [Customer].[Country].[Country].MEMBERS}
))
ON 1
FROM [Adventure Works]
WHERE([Product].[Product Categories].[Subcategory].&[26])
最后,此示例顯示如何使用計划提示:
WITH MEMBER MEASURES.X AS
IIF(
[Measures].[Internet Sales Amount]=0
, NULL
, (1/[Measures].[Internet Sales Amount]) HINT EAGER)
SELECT {[Measures].x} ON 0,
[Customer].[Customer Geography].[Country].MEMBERS ON 1
FROM [Adventure Works]
59 . Instr (MDX)
返回一個字符串在另一字符串中第一次出現的位置。
語法
InStr([start, ]searched_string, search_string[, compare])
參數
start
(可選)設置每個搜索的起始位置的一個數值表達式。 如果省略此值,則搜索將會在第一個字符位置開始。 如果 start 為 null,則函數返回值未定義。
searched_string
要搜索的字符串表達式。
search_string
要對其進行搜索的字符串表達式。
Compare
(可選)一個整數值。 始終忽略此參數。 定義此參數是為了與其他語言的其他 Instr 函數兼容。
返回值
具有 String2 在 String1 中的起始位置的一個整數值。
此外,InStr 函數根據以下條件返回在下表中列出的值:
| 條件 |
返回值 |
| String1 為零長度 |
零 (0) |
| String1 為 Null |
未定義 |
| String2 為零長度 |
start |
| String2 為 Null |
未定義 |
| 找不到 String2 |
零 (0) |
| start 大於 Len(String2) |
零 (0) |
注釋
| 注意 |
| Instr 始終執行不區分大小寫的比較。 |
示例
以下示例說明了 Instr 函數的用法並演示了不同的結果情形。
with
member [Date].[Date].[Results] as "Results"
member measures.[lowercase found in lowercase string] as InStr( "abcdefghijklmnñopqrstuvwxyz", "o")
member measures.[uppercase found in lowercase string] as InStr( "abcdefghijklmnñopqrstuvwxyz", "O")
member measures.[searched string is empty] as InStr( "", "o")
member measures.[searched string is null] as iif(IsError(InStr( null, "o")), "Is Error", iif(IsNull(InStr( null, "o")), "Is Null","Is undefined"))
member measures.[search string is empty] as InStr( "abcdefghijklmnñopqrstuvwxyz", "")
member measures.[search string is empty start 10] as InStr(10, "abcdefghijklmnñopqrstuvwxyz", "")
member measures.[search string is null] as iif(IsError(InStr( null, "o")), "Is Error", iif(IsNull(InStr( null, "o")), "Is Null","Is undefined"))
member measures.[found from start 10] as InStr( 10, "abcdefghijklmnñopqrstuvwxyz", "o")
member measures.[NOT found from start 17] as InStr( 17, "abcdefghijklmnñopqrstuvwxyz", "o")
member measures.[NULL start] as iif(IsError(InStr( null, "abcdefghijklmnñopqrstuvwxyz", "o")), "Is Error", iif(IsNull(InStr( null, "abcdefghijklmnñopqrstuvwxyz", "o")), "Is Null","Is undefined"))
member measures.[start greater than searched length] as InStr( 170, "abcdefghijklmnñopqrstuvwxyz", "o")
select [Results] on columns,
{ measures.[lowercase found in lowercase string]
, measures.[uppercase found in lowercase string]
, measures.[searched string is empty]
, measures.[searched string is null]
, measures.[search string is empty]
, measures.[search string is empty start 10]
, measures.[search string is null]
, measures.[found from start 10]
, measures.[NOT found from start 17]
, measures.[NULL start]
, measures.[start greater than searched length]
} on rows
from [Adventure Works]
下表顯示了獲得的結果。
| 結果 |
|
| lowercase found in lowercase string |
16 |
| uppercase found in lowercase string |
16 |
| searched string is empty |
0 |
| searched string is null |
未定義 |
| search string is empty |
1 |
| search string is empty start 10 |
10 |
| search string is null |
未定義 |
| found from start 10 |
16 |
| NOT found from start 17 |
0 |
| NULL start |
未定義 |
| start greater than searched length |
0 |
60 . Intersect (MDX)
返回兩個輸入集的交集,可以選擇保留重復項。
語法
Intersect(Set_Expression1 , Set_Expression2 [ , ALL ] )
參數
Set_Expression1
返回集的有效多維表達式 (MDX)。
Set_Expression2
返回集的有效多維表達式 (MDX)。
注釋
Intersect 函數返回兩個集的交集。 默認情況下,此函數會先刪除兩個集合中的重復項,然后再對這兩個集合求交集。 指定的兩個集合必須具有相同的維度。
可以使用可選的 ALL 標志來保留重復項。 如果指定了 ALL,Intersect 函數除了照常對非重復的元素求交集以外,還會對第一個集與第二個集中的重復項求交集。 指定的兩個集合必須具有相同的維度。
示例
下面的查詢將返回 2003 年和 2004 年,這是在指定的兩個集合中均出現的成員:
SELECT
INTERSECT(
{[Date].[Calendar Year].&[2001], [Date].[Calendar Year].&[2002],[Date].[Calendar Year].&[2003]}
, {[Date].[Calendar Year].&[2002],[Date].[Calendar Year].&[2003], [Date].[Calendar Year].&[2004]})
ON 0
FROM
[Adventure Works]
下面的查詢將失敗,因為指定的兩個集合包含來自不同層次結構的成員:
SELECT
INTERSECT(
{[Date].[Calendar Year].&[2001]}
, {[Customer].[City].&[Abingdon]&[ENG]})
ON 0
FROM
[Adventure Works]
61 . IsAncestor (MDX)
返回一個指定成員是否為另一個指定成員的祖先。
語法
IsAncestor(Member_Expression1, Member_Expression2)
參數
Member_Expression1
返回成員的有效多維表達式 (MDX)。
Member_Expression2
返回成員的有效多維表達式 (MDX)。
注釋
如果指定的第一個成員是指定的第二個成員的祖先,則 IsAncestor 函數返回 true。 否則,該函數返回 false。
示例
如果 [Date].[Fiscal].CurrentMember 是 2003 年 1 月的祖先,則下面的示例將返回 true:
WITH MEMBER MEASURES.ISANCESTORDEMO AS
IsAncestor([Date].[Fiscal].CurrentMember, [Date].[Fiscal].[Month].&[2003]&[1])
SELECT MEASURES.ISANCESTORDEMO ON 0,
[Date].[Fiscal].MEMBERS ON 1
FROM [Adventure Works]
62 . IsEmpty (MDX)
返回表達式的計算結果是否為空單元值。
語法
IsEmpty(Value_Expression)
參數
Value_Expression
有效 MDX(多維表達式)表達式,通常返回成員或元組的單元坐標。
注釋
如果表達式的計算結果為空單元值,則 IsEmpty 函數返回 true。 否則,此函數返回 false。
| 注意 |
| 成員的默認屬性為成員的值。 |
IsEmpty 函數是唯一可以可靠測試空單元的方法,因為空單元值在 Microsoft SQL Server Analysis Services 中具有特殊含義。
| 重要提示 |
| 如果對值表達式的求值返回錯誤,該函數將返回 false。 值表達式也可能返回錯誤,例如,屬性引用引用了無效或不存在的屬性。 |
有關空單元的詳細信息,請參閱 OLE DB 文檔。
示例
如果 Date 維度的 Fiscal 層次結構上當前成員的 Internet Sales Amount 返回一個空單元,則下面的示例將返回 TRUE:
WITH MEMBER MEASURES.ISEMPTYDEMO AS
IsEmpty([Measures].[Internet Sales Amount])
SELECT {[Measures].[Internet Sales Amount],MEASURES.ISEMPTYDEMO} ON 0,
[Date].[Fiscal].MEMBERS ON 1
FROM [Adventure Works]
63 . IsGeneration (MDX)
返回指定成員是否處於指定的代中。
語法
IsGeneration(Member_Expression, Generation_Number)
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
Generation_Number
指定對指定成員進行計算的代的數值表達式。
注釋
如果指定成員在指定的代號中,則 IsGeneration 函數返回 true。 否則,該函數返回 false。 另外,如果指定成員的計算結果為空成員,則IsGeneration 函數也返回 false。
為了創建代索引,葉成員的代索引為 0。 非葉成員的代索引的確定方式為:先從指定成員的所有子成員的並集中獲取最高的代索引,然后向該索引添加 1。 由於非葉成員的代索引的確定方式,一個非葉成員可能會屬於多個代。
示例
如果 [Date].[Fiscal].CurrentMember 屬於第二代,下面的示例將返回 TRUE。
WITH MEMBER MEASURES.ISGENERATIONDEMO AS
IsGeneration([Date].[Fiscal].CURRENTMEMBER, 2)
SELECT {MEASURES.ISGENERATIONDEMO} ON 0,
[Date].[Fiscal].MEMBERS ON 1
FROM [Adventure Works]
64 . IsLeaf (MDX)
確定指定成員是否為葉成員。
語法
IsLeaf(Member_Expression)
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋
如果指定的成員是葉成員,則 IsLeaf 函數返回 true。 否則,該函數返回 false。
示例
如果 [Date].[Fiscal].CurrentMember 是葉成員,下面的示例將返回 TRUE:
WITH MEMBER MEASURES.ISLEAFDEMO AS
IsLeaf([Date].[Fiscal].CURRENTMEMBER)
SELECT {MEASURES.ISLEAFDEMO} ON 0,
[Date].[Fiscal].MEMBERS ON 1
FROM [Adventure Works]
65 . IsSibling (MDX)
返回一個指定成員是否為另一個指定成員的同級。
語法
IsSibling(Member_Expression1, Member_Expression2)
參數
Member_Expression1
返回成員的有效多維表達式 (MDX)。
Member_Expression2
返回成員的有效多維表達式 (MDX)。
注釋
如果第一個指定成員與第二個指定成員是同級,則 IsSibling 函數返回 true。 否則,該函數返回 false。
示例
如果 Date 維度的 Fiscal 層次結構上的當前成員是 2002 年 7 月的同級,則下面的示例將返回 TRUE:
WITH MEMBER MEASURES.ISSIBLINGDEMO AS
IsSibling([Date].[Fiscal].CURRENTMEMBER, [Date].[Fiscal].[Month].&[2002]&[7])
SELECT {MEASURES.ISSIBLINGDEMO} ON 0,
[Date].[Fiscal].MEMBERS ON 1
FROM [Adventure Works]
66 . Item(成員)(MDX)
返回指定元組中的成員。
語法
Tuple_Expression.Item( Index )
參數
Tuple_Expression
返回元組的有效多維表達式 (MDX)。
Index
指定要返回元組中指定特定成員位置的有效數值表達式。
注釋
Item 函數返回指定元組中的成員。 此函數返回在 Index 所指定的從零開始計算的位置處找到的成員。
示例
下面的示例返回各列上的成員 [2003](元組 [Date].[Calendar Year].&[2003], [Measures].[Internet Sales Amount] ). 中的第一項):
SELECT
{( [Date].[Calendar Year].&[2003], [Measures].[Internet Sales Amount] ).Item(0)} ON 0
,{[Measures].[Reseller Sales Amount]} ON 1
FROM [Adventure Works]
67 . Item(元組)(MDX)
返回某個集中的元組。
語法
Index syntax
Set_Expression.Item(Index)
String expression syntax
Set_Expression.Item(String_Expression1 [ ,String_Expression2,...n])
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
String_Expression1
通常是以字符串表示的元組的有效字符串表達式。
String_Expression2
通常是以字符串表示的元組的有效字符串表達式。
Index
根據集中位置指定要返回的特定元組的有效數值表達式。
注釋
Item 函數返回指定集中的元組。 可以通過三種方式來調用 Item 函數:
如果指定了一個字符串表達式,則 Item 函數返回指定的元組。 例如,"([2005].Q3, [Store05])"。
如果指定了多個字符串表達式,則 Item 函數返回由指定的坐標定義的元組。 字符串數必須與軸數一致,而且每個字符串都必須標識一個唯一的層次結構。 例如,"[2005].Q3", "[Store05]"。
如果指定了一個整數,則 Item 函數返回位於 Index 所指定的從零開始計算的位置處的元組。
示例
下面的示例返回 ([1996],Sales):
{([1996],Sales), ([1997],Sales), ([1998],Sales)}.Item(0)
下面的示例使用一個級別表達式,並返回 Australia 中每個 State-Province 的 Internet Sales Amount 及其占 Australia 總 Internet Sales Amount 的百分比。 此示例使用 Item 函數從 Ancestors 函數返回的集中提取第一個項目(僅元組)。
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]
68 . KPIGoal (MDX)
返回計算指定關鍵績效指標 (KPI) 目標部分的值的成員。
語法
KPIGoal(KPI_Name)
參數
KPI_Name
指定 KPI 名稱的有效字符串表達式。
注釋
示例
下例將為“會計年度”屬性層次結構的三個成員的后代返回渠道收入度量值的 KPI 值、KPI 目標、KPI 狀態和 KPI 走向:
SELECT
{ KPIValue("Channel Revenue"),
KPIGoal("Channel Revenue"),
KPIStatus("Channel Revenue"),
KPITrend("Channel Revenue")
} ON Columns,
Descendants
( { [Date].[Fiscal].[Fiscal Year].&[2002],
[Date].[Fiscal].[Fiscal Year].&[2003],
[Date].[Fiscal].[Fiscal Year].&[2004]
}, [Date].[Fiscal].[Fiscal Quarter]
) ON Rows
FROM [Adventure Works]
69 . KPIStatus (MDX)
返回表示指定關鍵績效指標 (KPI) 的狀態部分的規范化值。
語法
KPIStatus(KPI_Name)
參數
KPI_Name
指定 KPI 名稱的有效字符串表達式。
注釋
狀態值通常為介於 -1 到 1 之間的規范化值。
示例
下例將返回 Fiscal Year 屬性層次結構中三個成員后代的渠道收入度量值的 KPI 值、KPI 目標、KPI 狀態和 KPI 走向:
SELECT
{ KPIValue("Channel Revenue"),
KPIGoal("Channel Revenue"),
KPIStatus("Channel Revenue"),
KPITrend("Channel Revenue")
} ON Columns,
Descendants
( { [Date].[Fiscal].[Fiscal Year].&[2002],
[Date].[Fiscal].[Fiscal Year].&[2003],
[Date].[Fiscal].[Fiscal Year].&[2004]
}, [Date].[Fiscal].[Fiscal Quarter]
) ON Rows
FROM [Adventure Works]
70 . KPITrend (MDX)
返回表示指定關鍵績效指標 (KPI) 走向部分的規范化值。
語法
KPITrend(KPI_Name)
參數
KPI_Name
指定 KPI 名稱的有效字符串表達式。
注釋
走向值通常為介於 -1 到 1 之間的規范化值。
示例
下例將返回 Fiscal Year 屬性層次結構中三個成員后代的渠道收入度量值的 KPI 值、KPI 目標、KPI 狀態和 KPI 走向:
SELECT
{ KPIValue("Channel Revenue"),
KPIGoal("Channel Revenue"),
KPIStatus("Channel Revenue"),
KPITrend("Channel Revenue")
} ON Columns,
Descendants
( { [Date].[Fiscal].[Fiscal Year].&[2002],
[Date].[Fiscal].[Fiscal Year].&[2003],
[Date].[Fiscal].[Fiscal Year].&[2004]
}, [Date].[Fiscal].[Fiscal Quarter]
) ON Rows
FROM [Adventure Works]
71 . KPIWeight (MDX)
返回指定關鍵績效指標 (KPI) 的權重。
語法
KPIWeight(KPI_Name)
參數
KPI_Name
指定 KPI 名稱的有效字符串表達式。
注釋
返回的值是 KPI 在父級中所占的比例。
72 . KPICurrentTimeMember (MDX)
返回指定關鍵績效指標 (KPI) 的當前時間成員。
語法
KPICurrentTimeMember(KPI_Name)
參數
KPI_Name
指定 KPI 名稱的有效字符串表達式。
注釋
KPI 可具有與時間維度的默認成員不同的時間成員。
73 . KPIValue (MDX)
返回計算指定關鍵績效指標 (KPI) 的值的成員。
語法
KPIValue(KPI_Name)
參數
KPI_Name
指定 KPI 名稱的有效字符串表達式。
注釋
示例
下例將返回 Fiscal Year 屬性層次結構中三個成員后代的渠道收入度量值的 KPI 值、KPI 目標、KPI 狀態和 KPI 走向。
SELECT
{ KPIValue("Channel Revenue"),
KPIGoal("Channel Revenue"),
KPIStatus("Channel Revenue"),
KPITrend("Channel Revenue")
} ON Columns,
Descendants
( { [Date].[Fiscal].[Fiscal Year].&[2002],
[Date].[Fiscal].[Fiscal Year].&[2003],
[Date].[Fiscal].[Fiscal Year].&[2004]
}, [Date].[Fiscal].[Fiscal Quarter]
) ON Rows
FROM [Adventure Works]
74 . Lag (MDX)
返回在成員級別中比指定成員位置靠前且靠前位數為指定位數的成員。
語法
Member_Expression.Lag(Index)
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
Index
指定成員位置滯后位數的有效數值表達式。
注釋
級別內的成員位置由屬性層次結構的自然順序決定。 位置的編號從零開始。
如果指定的滯后為 0,則 Lag 函數返回所指定成員本身。
如果指定的滯后為負,則 Lag 函數返回后續成員。
Lag(1) 等效於 PrevMember 函數。 Lag(-1) 等效於 NextMember 函數。
Lag 函數與 Lead 函數相似,只不過 Lead 函數與 Lag 函數查找成員的方向相反。 也就是說,Lag(n) 等效於 Lead(-n)。
示例
下例將返回 2001 年 12 月的值:
SELECT [Date].[Fiscal].[Month].[February 2002].Lag(2) ON 0
FROM [Adventure Works]
下例將返回 2002 年 3 月的值:
SELECT [Date].[Fiscal].[Month].[February 2002].Lag(-1) ON 0
FROM [Adventure Works]
75 . LastChild (MDX)
返回指定成員的最后一個子成員。
語法
Member_Expression.LastChild
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
示例
下例將返回 2001 年 9 月的值,它是 2002 會計年度第一個會計季度的最后一個子成員。
SELECT [Date].[Fiscal].[Fiscal Quarter].[Q1 FY 2002].LastChild ON 0
FROM [Adventure Works]
76 . LastPeriods (MDX)
返回指定成員之前的成員集(含該成員)。
語法
LastPeriods(Index [ ,Member_Expression ] )
參數
Index
指定期間數的有效數值表達式。
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋
如果指定的期間數為正,則 LastPeriods 函數返回一個成員集,其中的成員從比指定成員表達式滯后 Index - 1 個位置的成員開始,到指定的成員為止。 此函數所返回的成員數等於 Index。
如果指定的期間數為負,則 LastPeriods 函數返回一個成員集,其中的成員從指定的成員開始,到比指定的成員超前 Index - 1 個位置的成員為止。 此函數所返回的成員數等於 Index 的絕對值。
如果指定的期間數為零,則 LastPeriods 函數返回空集。 這不同於 Lag 函數,該函數在指定了 0 時返回指定的成員。
如果未指定成員,LastPeriods 函數將使用 Time.CurrentMember。 如果沒有任何一個維度標記為 Time 維度,該函數將在不發生錯誤的情況下分析並執行,但將導致客戶端應用程序出現單元錯誤。
示例
下面的示例返回 2002 會計年度第二、第三和第四會計季度的默認度量值。
SELECT LastPeriods(3,[Date].[Fiscal].[Fiscal Quarter].[Q4 FY 2002]) ON 0
FROM [Adventure Works]
| 注意 |
| 此示例還可以用 :(冒號)運算符編寫: [Date].[Fiscal].[Fiscal Quarter].[Q4 FY 2002]: [Date].[Fiscal].[Fiscal Quarter].[Q2 FY 2002] |
下面的示例返回 2002 會計年度第一會計季度的默認度量值。 雖然指定的期間數為三個,但是只能返回一個,因為該會計年度中沒有更早的期間。
SELECT LastPeriods
(3,[Date].[Fiscal].[Fiscal Quarter].[Q1 FY 2002]
) ON 0
FROM [Adventure Works]
77 . LastSibling (MDX)
返回指定成員的父成員的最后一個子成員。
語法
Member_Expression.LastSibling
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
示例
下面的示例返回 2002 年 7 月最后一天的默認度量值。
SELECT [Date].[Fiscal].[Date].&[20020717].LastSibling
ON 0
FROM [Adventure Works]
78 . Lead (MDX)
返回在成員級別中比指定成員位置靠后且靠后位數為指定位數的成員。
語法
Member_Expression.Lead( Index )
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
Index
指定成員位置位數的有效數值表達式。
注釋
級別內的成員位置由屬性層次結構的自然順序決定。 位置的編號從零開始。
如果指定的前置位數為零 (0),則 Lead 函數返回指定的成員。
如果指定的前置位數為負,則 Lead 函數返回前面的成員。
Lead(1) 等效於 NextMember 函數。 Lead(-1) 等效於 PrevMember 函數。
Lead 函數與 Lag 函數相似,只不過 Lag 函數與 Lead 函數查找成員的方向相反。 也就是說,Lead(n) 等效於 Lag(-n)。
示例
下例將返回 2001 年 12 月的值:
SELECT [Date].[Fiscal].[Month].[February 2002].Lead(-2) ON 0
FROM [Adventure Works]
下例將返回 2002 年 3 月的值:
SELECT [Date].[Fiscal].[Month].[February 2002].Lead(1) ON 0
FROM [Adventure Works]
79. Leaves (MDX)
返回由所有屬性(或者限制為屬於特定維度的屬性)組成的集。 對於返回集中的每個屬性 x,如果 x 是粒度屬性或者直接或間接與粒度屬性相關,則在屬性 x 上設置粒度而不會影響切片。 Leaves 函數設計為用在 SCOPE 語句內部或賦值語句的左側。
語法
Leaves( [ Dimension_expression ] )
參數
Dimension_Expression
返回維度的有效多維表達式 (MDX)。
注釋
葉成員是由所有屬性層次結構中的最低級別交叉聯接構成的元組。 已排除了計算成員。
如果指定了維度名稱,則 Leaves 函數返回的集中將包含指定維度的鍵屬性的葉成員。
如果維度與多個度量值組相關聯,將使用當前作用域中度量值的維度。
如果未指定維度名稱,則此函數返回的集中將包含整個多維數據集的葉成員。
| 注意 |
| 如果維度表達式解析為層次結構,並且層次結構的唯一名稱與維度的唯一名稱相同(多維數據集維度屬性 HierarchyUniqueNameStyle=ExcludeDimensionName,並且層次結構名稱 = 維度名稱),則已經使用該維度。 |
| 重要提示 |
| 如果並非所有屬性在當前范圍內的度量值組中均具備相同的粒度,則會產生錯誤。 |
80. Level (MDX)
返回成員的級別。
語法
Member_Expression.Level
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
示例
以下示例使用 Level 函數返回 Adventure Works 多維數據集中的所有月份。
SELECT[Date].[Fiscal].[Month].[February 2002].Level.Members ON 0,
[Measures].[Internet Sales Amount] ON 1
FROM [Adventure Works]
下例使用 Level 函數返回 Adventure Works 多維數據集中“型號名稱”屬性層次結構內的“多用途自行車架”級別的名稱。
WITH MEMBER Measures.x AS
[Product].[Model Name].[All-Purpose Bike Stand].Level.Name
SELECT Measures.x ON 0
FROM [Adventure Works]
81. Levels (MDX)
返回由數值表達式指定在維度或層次結構中的位置的級別,或返回由字符串表達式指定名稱的級別。
語法
Numeric expression syntax
Hierarchy_Expression.Levels( Level_Number )
String expression syntax
Hierarchy_Expression.Levels( Level_Name )
參數
Hierarchy_Expression
返回層次結構的有效多維表達式 (MDX)。
Level_Number
指定級別號的有效數值表達式。
Level_Name
指定級別名稱的有效字符串表達式。
注釋
如果指定了級別號,則 Levels 函數返回與從零開始的指定位置相關聯的級別。
如果指定了級別名稱,則 Levels 函數返回指定的級別。
| 注意 |
| 將字符串表達式語法用於用戶定義的函數。 |
示例
下例說明了 Levels 函數的各種語法。
數值
以下示例返回國家(地區)級別:
SELECT [Geography].[Geography].Levels(1) ON 0
FROM [Adventure Works]
字符串
以下示例返回國家(地區)級別:
SELECT [Geography].[Geography].Levels('Country') ON 0
FROM [Adventure Works]
82. LinkMember (MDX)
返回相當於指定層次結構中的指定成員的成員。
語法
LinkMember(Member_Expression, Hierarchy_Expression)
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
Hierarchy_Expression
返回層次結構的有效多維表達式 (MDX)。
注釋
LinkMember 函數返回與相關層次結構中指定成員每個級別的鍵值相匹配的指定層次結構中的成員。 每個級別上的屬性必須具有相同的鍵基數和數據類型。 在非自然層次結構中,如果某屬性的鍵值有多個匹配項,結果將是錯誤的或不確定。
示例
下面的示例使用 LinkMember 函數從 Adventure Works 多維數據集中返回 Calendar 層次結構中 Date.Date 屬性層次結構的“July 1, 2002”成員后代的默認度量值。
SELECT Hierarchize
(Ascendants
(LinkMember
([Date].[Date].[July 1, 2002], [Date].[Calendar]
)
)
) ON 0
FROM [Adventure Works]
83. LinRegIntercept (MDX)
對集進行線性回歸計算,並返回回歸線公式 y = ax + b 中 x 截距的值。
語法
LinRegIntercept(Set_Expression, Numeric_Expression_y [ ,Numeric_Expression_x ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression_y
返回表示 Y 軸值的數字的有效數值表達式,通常是單元坐標的多維表達式 (MDX)。
Numeric_Expression_x
返回表示 X 軸值的數字的有效數值表達式,通常是單元坐標的多維表達式 (MDX)。
注釋
線性回歸使用最小二乘法,可以計算出回歸線(即一系列點的最佳擬合線)的公式。 回歸線具有如下公式,其中 a 為斜率,b 為截距:
y = ax+b
LinRegIntercept 函數對指定集計算第一個數值表達式的值,以獲得 Y 軸的值。 然后,該函數對指定集計算第二個數值表達式(如果指定)的值,以獲得 X 軸的值。 如果未指定第二個數值表達式,則該函數使用指定集中的單元的當前上下文作為 X 軸的值。 通常不對時間維度指定 X 軸參數。
獲取點集后,LinRegIntercept 函數返回回歸線的截距(前一等式中的 b)。
| 注意 |
| LinRegIntercept 函數將忽略空單元或包含文本或邏輯值的單元。 但是,該函數可以包含值為零的單元。 |
示例
下例將返回單位銷售額和存儲銷售額的回歸線截距。
LinRegIntercept(LastPeriods(10),[Measures].[Unit Sales],[Measures].[Store Sales])
84. LinRegPoint (MDX)
計算集的線性回歸,並為特定 x 值返回回歸線公式 y = ax + b 中的 y-intercept 值。
語法
LinRegPoint(Slice_Expression_x, Set_Expression, Numeric_Expression_y [ ,Numeric_Expression_x ] )
參數
Slice_Expression_x
一個有效的數值表達式,通常為返回一個數值(該數值表示切片軸的值)的單元坐標的多維表達式 (MDX)。
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression_y
返回表示 Y 軸值的數字的有效數值表達式,通常是單元坐標的多維表達式 (MDX)。
Numeric_Expression_x
返回表示 X 軸值的數字的有效數值表達式,通常是單元坐標的多維表達式 (MDX)。
注釋
線性回歸使用最小二乘法,可以計算出回歸線(即一系列點的最佳擬合線)的公式。 回歸線具有如下公式,其中 a 為斜率,b 為截距:
y = ax+b
LinRegPoint 函數根據第二個數值表達式對指定的集求值,以獲得 Y 軸的值。 然后,此函數根據第三個數值表達式(如果已指定)對指定集求值,以獲取 X 軸的值。 如果未指定第三個數值表達式,則該函數將使用指定集中單元的當前上下文作為 X 軸的值。 通常不對“時間”維度指定 X 軸參數。
一旦計算完線性回歸線,即為第一個數值表達式計算等式的值,並且隨后返回該值。
| 注意 |
| LinRegPoint 函數會忽略空單元或包含文本的單元。 但是,該函數可以包含值為零的單元。 |
示例
下例根據單位銷售額和商店銷售額之間的統計關系,依據過去十個時期的數據得出單位銷售額的預測值。
LinRegPoint([Measures].[Unit Sales],LastPeriods(10),[Measures].[Unit Sales],[Measures].[Store Sales])
85. LinRegR2 (MDX)
計算集的線性回歸並返回確定系數 R2。
語法
LinRegR2(Set_Expression, Numeric_Expression_y [ ,Numeric_Expression_x ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression_y
返回表示 Y 軸值的數字的有效數值表達式,通常是單元坐標的多維表達式 (MDX)。
Numeric_Expression_x
返回表示 X 軸值的數字的有效數值表達式,通常是單元坐標的多維表達式 (MDX)。
注釋
線性回歸使用最小二乘法,可以計算出回歸線(即一系列點的最佳擬合線)的公式。 回歸線具有如下公式,其中 a 為斜率,b 為截距:
y = ax+b
LinRegR2 函數根據第一個數值表達式對指定的集求值,以獲得Y軸的值。 然后,該函數對指定集計算第二個數值表達式(如果指定)的值,以獲得 X 軸的值。 如果未指定第二個數值表達式,則此函數使用指定集中的單元的當前上下文作為X 軸的值。 通常不對時間維度指定 X軸參數。
獲得點集后,LinRegR2 函數會返回用來描述線性方程與點的擬合程度的統計 R2。
| 注意 |
| LinRegR2 函數將忽略空單元以及包含文本或邏輯值的單元。 但是,該函數可以包含值為零的單元。 |
示例
下面的示例返回統計量 R2,它描述線性回歸方程與單元銷售額和存儲銷售額度量值點的擬合度。
LinRegR2(LastPeriods(10), [Measures].[Unit Sales],[Measures].[Store Sales])
86. LinRegSlope (MDX)
對集進行線性回歸計算,並返回回歸線公式 y = ax + b 中斜率的值。
語法
LinRegSlope(Set_Expression, Numeric_Expression_y [ ,Numeric_Expression_x ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression_y
返回表示 Y 軸值的數字的有效數值表達式,通常是單元坐標的多維表達式 (MDX)。
Numeric_Expression_x
返回表示 X 軸值的數字的有效數值表達式,通常是單元坐標的多維表達式 (MDX)。
注釋
線性回歸使用最小二乘法,可以計算出回歸線(即一系列點的最佳擬合線)的公式。 回歸線具有如下公式,其中 a 為斜率,b 為截距:
y = ax+b
LinRegSlope 函數根據第一個數值表達式對指定的集求值,以獲得 Y 軸的值。 然后,此函數根據第二個數值表達式(如果已指定)對指定的集表達式求值,以獲取 X 軸的值。 如果未指定第二個數值表達式,則此函數使用指定集中的單元的當前上下文作為 X 軸的值。 通常不對時間維度指定 X 軸參數。
獲取點集后,LinRegSlope 函數返回回歸線的斜率(前一等式中的 a)。
| 注意 |
| LinRegSlope 函數將忽略空單元,以及包含文本或邏輯值的單元。 但是,該函數將包含值為零的單元。 |
示例
下面的示例返回單位銷售額和商店銷售額度量值的回歸線的斜率。
LinRegSlope(LastPeriods(10),[Measures].[Unit Sales],[Measures].[Store Sales])
87. LinRegVariance (MDX)
對集進行線性回歸計算,並返回與回歸線公式 y = ax + b 相關的方差。
語法
LinRegVariance(Set_Expression, Numeric_Expression_y [ ,Numeric_Expression_x ] ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression_y
返回表示 Y 軸值的數字的有效數值表達式,通常是單元坐標的多維表達式 (MDX)。
Numeric_Expression_x
返回表示 X 軸值的數字的有效數值表達式,通常是單元坐標的多維表達式 (MDX)。
注釋
線性回歸使用最小二乘法,可以計算出回歸線(即一系列點的最佳擬合線)的公式。 回歸線具有如下公式,其中 a 為斜率,b 為截距:
y = ax+b
LinRegVariance 函數針對指定集計算第一個數值表達式的值,以獲得 Y 軸的值。 然后,該函數針對指定集計算第二個數值表達式(如果指定)的值,以獲得 X軸的值。 如果未指定第二個數值表達式,則此函數使用指定集中的單元的當前上下文作為X 軸的值。 通常不對時間維度指定 X 軸參數。
獲得點集后,LinRegVariance 函數會返回用來描述線性方程與點的擬合程度的總體方差。
| 注意 |
| LinRegVariance 函數將忽略空單元,以及包含文本或邏輯值的單元。 但是,該函數將包含值為零的單元。 |
示例
下例返回一個方差,該方差描述了單位銷售額和商店銷售額度量值的線性方程與點的擬合程度。
LinRegVariance(LastPeriods(10),[Measures].[Unit Sales],[Measures].[Store Sales])
88. LookupCube (MDX)
返回用多維表達式 (MDX) 對同一數據庫中的另一個指定多維數據集求得的值。
語法
Numeric expression syntax
LookupCube(Cube_Name, Numeric_Expression )
String expression syntax
LookupCube(Cube_Name, String_Expression )
參數
Cube_Name
指定多維數據集名稱的有效字符串表達式。
Numeric_Expression
一個有效的數值表達式,通常為返回一個數值的單元坐標的多維表達式 (MDX)。
String_Expression
一個有效的字符串表達式,通常為返回一個字符串的單元坐標的有效多維表達式 (MDX)。
注釋
如果指定了某個數值表達式,則 LookupCube 函數在指定的多維數據集內計算指定的數值表達式並且返回得到的數值。
如果指定了某個字符串表達式,則 LookupCube 函數在指定的多維數據集內計算指定的字符串表達式並且返回得到的字符串。
LookupCube 函數在源多維數據集(對其執行包含 LookupCube 函數的 MDX 查詢)所在的數據庫內對多維數據集進行處理。
| 重要提示 |
| 因為當前查詢的上下文不會延續到將要查詢的多維數據集,所以必須在數值或字符串表達式內提供任何必要的當前成員。 |
使用 LookupCube 函數的任何計算很可能會遭遇不佳的性能。 請考慮重新設計您的解決方案,而不是使用此函數,以便在一個多維數據集中提供您所需的所有數據。
示例
以下查詢演示 LookupCube 的用法:
WITH MEMBER MEASURES.LOOKUPCUBEDEMO AS
LOOKUPCUBE("Adventure Works", "[Measures].[In" + "ternet Sales Amount]")
SELECT MEASURES.LOOKUPCUBEDEMO ON 0
FROM [Adventure Works]
89.Max (MDX)
返回對集求值的數值表達式的最大值。
語法
Max( Set_Expression [ , Numeric_Expression ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression
有效的數值表達式,通常為返回數值的單元坐標的多維表達式 (MDX)。
注釋
如果指定了數值表達式,則對集計算指定數值表達式的值,然后返回求得的最大值。 如果沒有指定數值表達式,則在指定集成員的當前上下文中計算指定集,然后返回求得的最大值。
| 注意 |
| 計算一組數值的最大值時,Analysis Services 將忽略空值。 |
示例
下面的示例將返回 Adventure Works 多維數據集中每個季度、子類別和國家(地區)的最大每月銷售額。
WITH MEMBER Measures.x AS Max
([Date].[Calendar].CurrentMember.Children
, [Measures].[Reseller Order Quantity]
)
SELECT Measures.x ON 0
,NON EMPTY [Date].[Calendar].[Calendar Quarter]*
[Product].[Product Categories].[Subcategory].members *
[Geography].[Geography].[Country].Members
ON 1
FROM [Adventure Works]
90.MeasureGroupMeasures (MDX)
返回一組屬於指定度量值組的度量值。
語法
MEASUREGROUPMEASURES(MeasureGroupName)
參數
MeasureGroupName
有效字符串表達式,其中包含要從中檢索度量值集的度量值組的名稱。
注釋
指定的字符串必須與度量值組名稱精確匹配。 對於帶空格的度量值組,不要求一定使用方括號。
示例
下例返回 Adventure Works 多維數據集“Internet Sales”度量值組中的所有度量值。
SELECT MeasureGroupMeasures('Internet Sales') ON 0
FROM [Adventure Works]
91. Median (MDX)
返回對集求值的數值表達式的中值。
語法
Median(Set_Expression [ ,Numeric_Expression ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression
有效的數值表達式,通常為返回數值的單元坐標的多維表達式 (MDX)。
注釋
如果指定了數值表達式,則對集計算指定數值表達式的值,然后返回求得的中值。 如果沒有指定數值表達式,則在指定集成員的當前上下文中計算指定集,然后返回求得的中值。
中值是一組有序數值的中間值。 (中值不同於平均值,平均值是一組數值的總和除以這組數值的個數所得的值)。 中值是通過選擇最小值以使這組數值中至少有一半值不大於所選的值來確定的。 如果這組數值的個數為奇數,則中值對應於單個值。 如果這組數值的個數為偶數,則中值對應於兩個中間值的和除以 2 所得的值。
| 注意 |
| 計算一組有序數值的中值時,Analysis Services 將忽略空值。 |
示例
下例將返回 Adventure Works 多維數據集中每個季度、每個子類別和每個國家(地區)的每月銷售額中值。
WITH MEMBER Measures.x AS Median
([Date].[Calendar].CurrentMember.Children
, [Measures].[Reseller Order Quantity]
)
SELECT Measures.x ON 0
,NON EMPTY [Date].[Calendar].[Calendar Quarter]*
[Product].[Product Categories].[Subcategory].members *
[Geography].[Geography].[Country].Members
ON 1
FROM [Adventure Works]
92. Members(集)(MDX)
返回某個維度、級別或層次結構中的成員集。
語法
Hierarchy expression syntax
Hierarchy_Expression.Members
Level expression Syntax
Level_Expression.Members
參數
Hierarchy_Expression
返回層次結構的有效多維表達式 (MDX)。
Level_Expression
返回級別的有效多維表達式 (MDX)。
注釋
如果指定了某個層次結構表達式,則 Members (Set) 函數返回該指定層次結構內所有成員(不包括計算成員)的集。 若要獲取層次結構中所有成員(計算成員或其他成員)的集,請使用 AllMembers (MDX) 函數
如果指定了某個級別表達式,則 Members (Set) 函數返回該指定級別的所有成員的集。
| 重要提示 |
| 如果維度僅包含單個可見層次結構,由於在此情況下維度名稱將解析為其唯一可見的層次結構,所以既可以通過維度名稱也可以通過層次結構名稱來引用該層次結構。 例如,因為 Measures.Members 解析為 Measures 維度中唯一的層次結構,所以 Measures.Members 是有效的 MDX 表達式。 |
示例
下例返回 Adventure Works 多維數據集中“日歷年”層次結構的所有成員的集。
SELECT
[Date].[Calendar].[Calendar Year].Members ON 0
FROM
[Adventure Works]
下面的示例將返回 [Product].[Products].[Product Line] 級別中每個成員在 2003 年的訂單數量。 Members 函數將返回代表該級別所有成員的集。
SELECT
{Measures.[Order Quantity]} ON COLUMNS,
[Product].[Product Line].[Product Line].Members ON ROWS
FROM
[Adventure Works]
WHERE
{[Date].[Calendar Year].[Calendar Year].&[2003]}
93. Members(字符串)(MDX)
返回字符串表達式指定的成員。
語法
Members(Member_Name)
參數
Member_Name
指定成員名稱的有效字符串表達式。
注釋
Members (String) 函數返回已指定名稱的單個成員。 通常,將 Members (String) 函數與外部函數一起使用,為 Members (String) 函數提供一個用於標識成員的字符串,並且 Members (String) 函數返回該指定成員的值。
示例
下面的示例使用 Members (String) 函數將指定的字符串轉換為有效成員,然后為該字符串中指定的成員返回默認度量值。 指定的字符串用單引號引起來。 默認度量值為 Reseller Sales Amount 度量值。
SELECT Members ('[Geography].[Geography].[Country].&[United States] ') ON 0
FROM [Adventure Works]
94. MemberToStr (MDX)
返回與指定成員對應的多維表達式 (MDX) 格式的字符串。
語法
MemberToStr(Member_Expression)
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋
此函數返回包含成員的唯一名稱的字符串。 它通常用於將某一成員的唯一名稱返回到外部函數。
示例
下例返回字符串 [Geography].[Geography].[Country].&[United States]:
WITH MEMBER Measures.x AS MemberToStr
([Geography].[Geography].[Country].[United States])
SELECT Measures.x ON 0
FROM [Adventure Works]
95. MemberValue (MDX)
返回成員的值。
語法
Member_Expression.MemberValue
參數
Member_Expression
計算結果為成員的有效多維表達式 (MDX)。
返回值
返回的成員值包含以下信息(按這些信息在返回值中出現的順序列出):
值綁定(如果已定義)。
原始數據類型的鍵(如果不存在名稱綁定,或者鍵和標題綁定到同一列)。
成員的標題。
示例
下例將返回 Adventure Works 多維數據集 Date 維度中的第一個日期的值綁定、成員鍵和標題。
WITH MEMBER Measures.ValueColumn as [Date].[Calendar].[July 1, 2001].MemberValue
MEMBER Measures.KeyColumn as [Date].[Calendar].[July 1, 2001].Member_Key
MEMBER Measures.NameColumn as [Date].[Calendar].[July 1, 2001].Member_Name
SELECT {Measures.ValueColumn, Measures.KeyColumn, Measures.NameColumn} ON 0
from [Adventure Works]
96. Min (MDX)
返回對集求值的數值表達式的最小值。
語法
Min( Set_Expression [ , Numeric_Expression ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression
有效的數值表達式,通常為返回數值的單元坐標的多維表達式 (MDX)。
注釋
如果指定了數值表達式,則指定的數值表達式對集求值,然后返回該求值的最小值。 如果未指定數值表達式,則在指定集的成員的當前上下文中對該集求值,然后該求值的最小值。
| 注意 |
| 計算一組數值的最小值時,Analysis Services 將忽略空值。 |
示例
下面的示例返回 Adventure Works 多維數據集中每個子類別和國家/地區的最小季度銷售額。
WITH MEMBER Measures.x AS Min
([Date].[Calendar].CurrentMember.Children
, [Measures].[Reseller Order Quantity]
)
SELECT Measures.x ON 0
,NON EMPTY [Date].[Calendar].[Calendar Quarter]*
[Product].[Product Categories].[Subcategory].members *
[Geography].[Geography].[Country].Members
ON 1
FROM [Adventure Works]
97. Mtd (MDX)
按照時間維度中的年級別的約束,從給定成員所在的級別返回一組同級成員,從第一個同級成員開始到給定成員為止。
語法
Mtd( [ Member_Expression ] )
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋
如果未指定成員表達式,則默認值為第一個層次結構的當前成員並且具有度量值組中 Time 類型的第一個維度中的 Months 類型的級別。
在某一級別所基於的屬性層次結構的 Type 屬性設置為 Months 時,Mtd 函數是 PeriodsToDate 函數的快捷函數。 也就是說,Mtd(Member_Expression) 等效於 PeriodsToDate(Month_Level_Expression,Member_Expression)。
示例
下例將返回 2002 年 7 月(截止於 2002 年 7 月 20 日)Internet 銷售的當月運費成本總和。
WITH MEMBER Measures.x AS SUM
(
MTD([Date].[Calendar].[Date].[July 20, 2002])
, [Measures].[Internet Freight Cost]
)
SELECT Measures.x ON 0
FROM [Adventure Works]
98. Name (MDX)
返回維度、層次結構、級別或成員的名稱。
語法
Dimension expression syntax
Dimension_Expression.Name
Hierarchy expression syntax
Hierarchy_Expression.Name
Level_expression syntax
Level_Expression.Name
Member expression syntax
Member_Expression.Name
參數
Dimension_Expression
返回維度的有效多維表達式 (MDX)。
Hierarchy_Expression
返回層次結構的有效多維表達式 (MDX)。
Level_Expression
返回級別的有效多維表達式 (MDX)。
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋
Name 函數返回對象的名稱,而不是唯一名稱。
示例
維度、層次結構和級別表達式示例
下面的示例返回 Date 維度的維度名稱以及 July 2001 成員的層次結構和級別名稱。
WITH MEMBER Measures.DimensionName AS [Date].Name
MEMBER Measures.HierarchyName AS [Date].[Calendar].[July 2001].Hierarchy.Name
MEMBER Measures.LevelName as [Date].[Calendar].[July 2001].Level.Name
SELECT {Measures.DimensionName, Measures.HierarchyName, Measures.LevelName} ON 0
from [Adventure Works]
成員表達式示例
下面的示例返回成員名稱以及成員值、成員鍵和成員標題。
WITH MEMBER MemberName AS [Date].[Calendar].[July 1, 2001].Name
MEMBER Measures.ValueColumn as [Date].[Calendar].[July 1, 2001].MemberValue
MEMBER Measures.KeyColumn as [Date].[Calendar].[July 1, 2001].Member_Key
MEMBER Measures.NameColumn as [Date].[Calendar].[July 1, 2001].Member_Name
SELECT {Measures.MemberName, Measures.ValueColumn, Measures.KeyColumn, Measures.NameColumn} ON 0
from [Adventure Works]
99. NameToSet (MDX)
返回多維表達式 (MDX) 格式的字符串指定的成員組成的集。
語法
NameToSet(Member_Name)
參數
Member_Name
代表成員名稱的有效字符串表達式。
注釋
如果指定的成員名稱存在,則 NameToSet 函數返回包含該成員的集。 否則,此函數返回空集。
| 注意 |
| 指定的成員名稱只能是成員名稱,不能是成員表達式。 若要使用成員表達式,請參閱 StrToSet (MDX)。 |
示例
下例返回指定成員名稱的默認度量值。
SELECT NameToSet('[Date].[Calendar].[July 2001]') ON 0
FROM [Adventure Works]
100. NextMember (MDX)
返回指定成員所在級別的下一個成員。
語法
Member_Expression.NextMember
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋
NextMember 函數返回與指定成員位於同一級別的下一個成員。
示例
下例將返回作為 July 2001 成員的下一個成員的 August 2001 成員。
SELECT [Date].[Calendar].[Month].[July 2001].NextMember ON 0
FROM [Adventure Works]
101. NonEmpty (MDX)
根據第一個指定集與第二個集的叉積,返回指定集中的非空元組集。
語法
NONEMPTY(set_expression1 [,set_expression2])
參數
set_expression1
返回集的有效多維表達式 (MDX)。
set_expression2
返回集的有效多維表達式 (MDX)。
注釋
此函數返回位於第一個指定集中並且在對第二個集中的元組求值時不為空的元組。 NonEmpty 函數將考慮計算並保留重復元組。 如果未提供第二個集,將在多維數據集中屬性層次結構和度量值的成員的當前坐標上下文中對表達式求值。
| 注意 |
|
| 使用此函數,而不使用不推薦的 NonEmptyCrossjoin (MDX) 函數。 |
|
| 重要提示 |
|
| 非空是元組所引用的單元的特征,而不是元組本身的特征。 |
|
示例
以下查詢說明 NonEmpty 的簡單示例,該函數返回 2001 年 7 月 1 日 Internet Sales Amount 的值為非 null 的所有 Customer:
SELECT [Measures].[Internet Sales Amount] ON 0,
NONEMPTY(
[Customer].[Customer].[Customer].MEMBERS
, {([Date].[Calendar].[Date].&[20010701], [Measures].[Internet Sales Amount])}
)
ON 1
FROM [Adventure Works]
以下示例將返回包含客戶和采購日期的元組集,並且使用 Filter 函數和 NonEmpty 函數來查找每個客戶的最后一次采購日期:
WITH SET MYROWS AS FILTER
(NONEMPTY
([Customer].[Customer Geography].[Customer].MEMBERS
* [Date].[Date].[Date].MEMBERS
, [Measures].[Internet Sales Amount]
) AS MYSET
, NOT(MYSET.CURRENT.ITEM(0)
IS MYSET.ITEM(RANK(MYSET.CURRENT, MYSET)).ITEM(0))
)
SELECT [Measures].[Internet Sales Amount] ON 0,
MYROWS ON 1
FROM [Adventure Works]
102. NonEmptyCrossjoin (MDX)
返回包含一個或多個集的叉積的集,不包括空元組以及無相關事實數據表數據的元組。
語法
NonEmptyCrossjoin(Set_Expression1 [ ,Set_Expression2,...] [,Count ] )
參數
Set_Expression1
返回集的有效多維表達式 (MDX)。
Set_Expression2
返回集的有效多維表達式 (MDX)。
Count
指定返回集的數量的有效數值表達式。
注釋
NonEmptyCrossjoin 函數以集的形式返回兩個或多個集的叉積,不包括空元組或者無基礎事實表提供的數據的元組。 鑒於 NonEmptyCrossjoin函數的工作方式,所有計算成員均被自動排除。
如果沒有指定 Count,該函數將交叉聯接所有指定的集並在結果集中排除空成員。 如果指定了集的數量,該函數將從第一個指定的集開始,交叉聯接指定數量的集。 NonEmptyCrossjoin 函數使用在后續的指定集中指定但尚未交叉聯接的剩余集來確定哪些成員在交叉聯接后得到的集中被視為非空。 NonEmptyCrossjoin 函數不影響計算度量值的 NON_EMPTY_BEHAVIOR 設置。
| 重要提示 |
| 不推薦使用此函數並且不應使用它,保留此函數僅是為了維護向后兼容性。 應改用帶有度量值組名稱參數的 Exists (MDX) 函數或 NonEmpty (MDX) 函數。 |
103. OpeningPeriod (MDX)
返回指定級別(也可以是指定成員)的后代中的第一個同級。
語法
OpeningPeriod( [ Level_Expression [ , Member_Expression ] ] )
參數
Level_Expression
返回級別的有效多維表達式 (MDX)。
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋
該函數主要用於時間維度,但是也可以用於任何維度。
如果指定了級別表達式,則 OpeningPeriod 函數使用包含指定級別的層次結構,返回指定級別上的默認成員的后代中的第一個同級。
如果指定了級別表達式和成員表達式,則 OpeningPeriod 函數返回包含指定級別的層次結構中位於指定級別上指定成員后代中的第一個同級。
如果既不指定級別表達式也不指定成員表達式,則 OpeningPeriod 函數使用默認級別和時間類型維度的成員。
| 注意 |
| ClosingPeriod 函數與 OpeningPeriod 函數相似,只不過 ClosingPeriod 函數返回的是最后一個同級而不是第一個同級。 |
示例
下面的示例將返回 Date 維度(Time 類型)FY2002 成員的默認度量值。 返回該成員是因為 Fiscal Year 級別是 [All] 級別的第一個后代,Fiscal 層次結構為默認層次結構是由於 Fiscal 層次結構是層次結構集合中第一個用戶定義的層次結構,而且 FY2002 成員是該層次結構中該級別上的第一個同級。
SELECT OpeningPeriod() ON 0
FROM [Adventure Works]
下例將返回 Date.Date 屬性層次結構 Date.Date.Date 級別上“July 1, 2001”成員的默認度量值。 該成員是 Date.Date 屬性層次結構中 [All] 級別后代的第一個同級成員。
SELECT OpeningPeriod([Date].[Date].[Date]) ON 0
FROM [Adventure Works]
下面的示例將返回“January, 2003”成員的默認度量值,該成員是 Calendar 用戶定義層次結構中年度級別上 2003 成員后代的第一個同級成員。
SELECT OpeningPeriod([Date].[Calendar].[Month],[Date].[Calendar].[Calendar Year].&[2003]) ON 0
FROM [Adventure Works]
下面的示例將返回“July, 2002”成員的默認度量值,該成員是 Fiscal 用戶定義層次結構中年度級別上 2003 成員后代的第一個同級成員。
SELECT OpeningPeriod([Date].[Fiscal].[Month],[Date].[Fiscal].[Fiscal Year].&[2003]) ON 0
FROM [Adventure Works]
104. Order (MDX)
排列指定集的成員,可以選擇保留或打亂原有的層次結構。
語法
Numeric expression syntax
Order(Set_Expression, Numeric_Expression
[ , { ASC | DESC | BASC | BDESC } ] )
String expression syntax
Order(Set_Expression, String_Expression
[ , { ASC | DESC | BASC | BDESC } ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression
有效數值表達式,通常為返回數值的單元坐標的多維表達式 (MDX)。
String_Expression
通常是單元坐標(返回以字符串表示的數字)的有效多維表達式 (MDX) 的有效字符串表達式。
注釋
Order 函數既可以考慮層次結構(通過使用 ASC 或 DESC 標志來指定),也可以不考慮層次結構(通過使用 BASC 或 BDESC 標志來指定,其中B 表示“打亂層次結構”)。 如果指定了 ASC 或 DESC,則 Order 函數先根據成員在層次結構中的位置進行排列,然后對每一級別進行排序。 如果指定了 BASC 或 BDESC,則 Order 函數排列集中的所有成員時不考慮層次結構。 如果未指定任何標志,則默認為 ASC。
如果 Order 函數用於其兩個或多個層次結構執行叉積的集合,並且使用 DESC 標志,則只對該集合中最后一個層次結構的成員進行排序。 這與 Analysis Services 2000 不同,后者對集合中的所有層次結構進行排序。
示例
下面的示例從 Adventure Works 多維數據集返回 Date 維度上 Calendar 層次結構中所有日歷季度的分銷商訂單的數目。Order 函數重新為 ROWS 軸的集合進行排序。 Order 函數根據 [Calendar] 層次結構確定的層次結構順序以降序按照 [Reseller Order Count] 對該集合進行排序。
SELECT
Measures.[Reseller Order Count] ON COLUMNS,
Order(
[Date].[Calendar].[Calendar Quarter].MEMBERS
,Measures.[Reseller Order Count]
,DESC
) ON ROWS
FROM [Adventure Works]
請注意在 DESC 標志更改為 BDESC 時,此示例中的層次結構是如何斷開的,以及如何返回日歷季度的列表(與層次結構無關)。
SELECT
Measures.[Reseller Order Count] ON COLUMNS,
Order(
[Date].[Calendar].[Calendar Quarter].MEMBERS
,Measures.[Reseller Order Count]
,BDESC
) ON ROWS
FROM [Adventure Works]
以下示例根據 Reseller Gross Profit(分銷商毛利潤),返回前五個銷售產品子類別的分銷商銷售額度量值,而不管層次結構如何。 Subset 函數用於在使用 Order 函數對結果進行排序之后,僅返回集中的前五個元組。
SELECT Subset
(Order
([Product].[Product Categories].[SubCategory].members
,[Measures].[Reseller Gross Profit]
,BDESC
)
,0
,5
) ON 0
FROM [Adventure Works]
下面的示例使用 Rank 函數根據 Reseller Sales Amount 度量值對 City 層次結構的成員進行排名,然后以排名順序顯示它們。 通過使用 Order 函數先對 City 層次結構的成員集進行排序,僅執行一次排序,然后在以排序順序顯示之前執行線性掃描。
WITH
SET OrderedCities AS Order
([Geography].[City].[City].members
, [Measures].[Reseller Sales Amount], BDESC
)
MEMBER [Measures].[City Rank] AS Rank
([Geography].[City].CurrentMember, OrderedCities)
SELECT {[Measures].[City Rank],[Measures].[Reseller Sales Amount]} ON 0
,Order
([Geography].[City].[City].MEMBERS
,[City Rank], ASC)
ON 1
FROM [Adventure Works]
下面的示例返回集中唯一的產品的數目,同時在使用 Filter 函數之前使用 Order 函數對非空元組進行排序。 CurrentOrdinal 函數用於比較和消除等同值。
WITH MEMBER [Measures].[PrdTies] AS Count
(Filter
(Order
(NonEmpty
([Product].[Product].[Product].Members
, {[Measures].[Reseller Order Quantity]}
)
, [Measures].[Reseller Order Quantity]
, BDESC
) AS OrdPrds
, (OrdPrds.CurrentOrdinal < OrdPrds.Count
AND [Measures].[Reseller Order Quantity] =
( [Measures].[Reseller Order Quantity]
, OrdPrds.Item
(OrdPrds.CurrentOrdinal
)
)
)
OR (OrdPrds.CurrentOrdinal > 1
AND [Measures].[Reseller Order Quantity] =
([Measures].[Reseller Order Quantity]
, OrdPrds.Item
(OrdPrds.CurrentOrdinal-2)
)
)
)
)
SELECT {[Measures].[PrdTies]} ON 0
FROM [Adventure Works]
為了理解 DESC 標志是如何使用元組集的,請首先考慮以下查詢的結果:
SELECT
{[Measures].[Tax Amount]} ON 0,
ORDER(
[Sales Territory].[Sales Territory].[Group].MEMBERS
,[Measures].[Tax Amount], DESC)
ON 1
FROM [Adventure Works]
在行軸上,您可以看到 Sales Territory Groups 已按 Tax Amount 的降序排序,如下所示:North America、Europe、Pacific、NA。 現在,看一下如果將 Sales Territory Groups 集合與 Product Subcategories 集合執行叉積並且以相同方式應用 Order 函數后會發生什么情況,如下所示:
SELECT
{[Measures].[Tax Amount]} ON 0,
ORDER(
[Sales Territory].[Sales Territory].[Group].MEMBERS
*
{[Product].[Product Categories].[subCategory].Members}
,[Measures].[Tax Amount], DESC)
ON 1
FROM [Adventure Works]
盡管 Product Subcategories 的集合已按層次結構順序的降序進行排序,但 Sales Territory Groups 現在未排序並且以它們在層次結構上出現的順序出現:Europe、NA、North America 和 Pacific。 其原因在於,僅對元組集合中最后一個層次結構 Product Subcategories 進行了排序。 若要重現 Analysis Services 2000 的行為,請使用一系列嵌套的 Generate 函數來在執行叉積前對每個集合進行排序,例如:
SELECT
{[Measures].[Tax Amount]} ON 0,
GENERATE(
ORDER(
[Sales Territory].[Sales Territory].[Group].MEMBERS
,[Measures].[Tax Amount], DESC)
,
ORDER(
[Sales Territory].[Sales Territory].CURRENTMEMBER
*
{[Product].[Product Categories].[subCategory].Members}
,[Measures].[Tax Amount], DESC))
ON 1
FROM [Adventure Works]
105. Ordinal (MDX)
返回與某一級別關聯的序數值,從零開始計算。
語法
Level_Expression.Ordinal
參數
Level_Expression
返回級別的有效多維表達式 (MDX)。
注釋
Ordinal 函數經常與 IIF 和 CurrentMember 函數一起使用,以根據查詢結果中每個特定單元格的序號位置,有條件地在不同的層次結構級別上顯示不同的值。 例如,可以使用 Ordinal 函數在某些級別上執行計算,並在其他級別上顯示默認值“N/A”。
示例
下面的示例返回 Calendar 層次結構中的 Calendar Quarter 級別的序號。
WITH MEMBER Measures.x AS [Date].[Calendar].[Calendar Quarter].Ordinal
SELECT Measures.x on 0
FROM [Adventure Works]
106. ParallelPeriod (MDX)
返回上一期間具有與指定成員相同的相對位置的成員。
語法
ParallelPeriod( [ Level_Expression [ ,Index [ , Member_Expression ] ] ] )
參數
Level_Expression
返回級別的有效多維表達式 (MDX)。
Index
指定要滯后的並行期間數的有效數值表達式。
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋
ParallelPeriod 函數類似於 Cousin 函數,但與時序的關系更密切。 ParallelPeriod 函數在指定級別處獲取指定成員的祖先,然后查找具有指定滯后的該祖先的同級,最后返回該同級后代中指定成員的並行期間。
ParallelPeriod 函數具有下列默認值:
如果既沒有指定級別表達式,也沒有指定成員表達式,則默認成員值為度量值組中類型為 Time 的第一個維度上第一個層次結構的當前成員。
如果指定了級別表達式,但未指定成員表達式,則默認成員值為 Level_Expression.Hierarchy.CurrentMember。
默認索引值為 1。
默認級別為指定成員的父級別。
ParallelPeriod 函數等效於下面的 MDX 語句:
Cousin(Member_Expression, Ancestor(Member_Expression, Level_Expression) .Lag(Numeric_Expression))
示例
下面的示例以季度級別為基准並以三個期間為間隔,返回了 October 2003(2003 年 10 月)的並行期間,即 2003 年 1 月。
SELECT ParallelPeriod ([Date].[Calendar].[Calendar Quarter]
, 3
, [Date].[Calendar].[Month].[October 2003])
ON 0
FROM [Adventure Works]
下面的示例以半期級別為基准並以三個期間為間隔,返回了 October 2003(2002 年 10 月)的並行期間,即 2002 年 4 月。
SELECT ParallelPeriod ([Date].[Calendar].[Calendar Semester]
, 3
, [Date].[Calendar].[Month].[October 2003])
ON 0
FROM [Adventure Works]
107. Parent (MDX)
返回成員的父成員。
語法
Member_Expression.Parent
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋
Parent 函數返回指定成員的父成員。
示例
以下例返回“July 1, 2001”成員的父成員。 第一個示例在日期屬性層次結構的上下文中指定了該成員並返回“所有時期”成員。
SELECT [Date].[Date].[July 1, 2001].Parent ON 0
FROM [Adventure Works]
下例在日歷層次結構的上下文中指定了“July 1, 2001”成員。
SELECT [Date].[Calendar].[July 1, 2001].Parent ON 0
FROM [Adventure Works]
108. PeriodsToDate (MDX)
按照時間維度中的指定級別的約束,從給定成員所在的級別返回一組同級成員,從第一個同級成員開始到給定成員為止。
語法
PeriodsToDate( [ Level_Expression [ ,Member_Expression ] ] )
參數
Level_Expression
返回級別的有效多維表達式 (MDX)。
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋
在指定級別的范圍內,PeriodsToDate 函數將返回與指定成員處於同一級別、從第一個期間開始到指定成員結束的期間集。
如果指定了級別,則層次結構的當前成員是指 hierarchy。CurrentMember,其中 hierarchy 是指定級別的層次結構。
如果既未指定級別,也未指定成員,則該級別是度量值組中 Time 類型的第一個維度上第一個層次結構的當前成員的父級。
PeriodsToDate( Level_Expression, Member_Expression ) 的功能與以下 MDX 表達式相同:
TopCount(Descendants(Ancestor(Member_Expression, Level_Expression), Member_Expression.Level), 1):Member_Expression
示例
下面的示例從 Adventure Works 多維數據集中返回 Measures.[Order Quantity] 成員在 2003 日歷年前八個月(包含在 Date 維度中)內的聚合值。
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]
下面的示例聚合了 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]
109. Predict (MDX)
| 注意 |
| 此函數由於內部不一致而正被刪除。 有關使用 DMX 表達式的解決方法,請查看示例部分。 |
返回用數值表達式對數據挖掘模型求得的值。
語法
Predict(Mining_Model_Name,String_Expression)
參數
Mining_Model_Name
表示挖掘模型名稱的有效字符串表達式。
String_Expression
計算結果為指定挖掘模型的有效 DMX 表達式的有效字符串表達式。
注釋
Predict 函數計算指定挖掘模型上下文中指定字符串表達式的值。
在數據挖掘表達式 (DMX) 參考中提供了數據挖掘語法和函數。
示例
下面的示例使用 Customer Clusters 挖掘模型預測群集的名稱以及與特定客戶的距離:
WITH MEMBER MEASURES.CLNAME AS
PREDICT("Customer Clusters", "Cluster()")
MEMBER MEASURES.CLDISTANCE AS
PREDICT("Customer Clusters", "ClusterDistance(Cluster())")
SELECT {MEASURES.CLNAME, MEASURES.CLDISTANCE} ON 0
FROM [Adventure Works]
WHERE([Customer].[Customer Geography].[Customer].&[12012])
110. PrevMember (MDX)
返回指定成員所在級別的上一個成員。
語法
Member_Expression.PrevMember
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋
PrevMember 函數返回與指定成員位於同一級別的上一個成員。
示例
下面的示例顯示一個簡單查詢,它使用 PrevMember 函數緊靠行軸上當前成員之前顯示該成員的名稱:
WITH MEMBER MEASURES.PREVMEMBERDEMO AS
[Date].[Calendar].CURRENTMEMBER.PREVMEMBER.NAME
SELECT MEASURES.PREVMEMBERDEMO ON 0,
[Date].[Calendar].MEMBERS ON 1
FROM [Adventure Works]
下面的示例根據用 Aggregate 函數計算的用戶選擇的 State-Province 成員值,返回上一個時期銷售額下滑的分銷商的計數。 Hierarchize 和DrillDownLevel 函數用於為 Product 維度中的產品類別返回呈下降趨勢的銷售額值。 PrevMember 函數用於將當前時間段與上一時間段進行比較。
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])
111. Properties (MDX)
返回一個包含成員屬性值的字符串(或強類型值)。
語法
Member_Expression.Properties(Property_Name [, TYPED])
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
Property_Name
成員屬性名稱的有效字符串表達式。
注釋
Properties 函數返回指定成員屬性的指定成員值。 成員屬性可以是任何內部成員屬性(如 NAME、ID、KEY、或 CAPTION),也可以是用戶定義的成員屬性。 有關詳細信息,請參閱內部成員屬性 (MDX)和用戶定義的成員屬性 (MDX)。
默認情況下,將該值強迫為一個字符串。 如果指定了 TYPED,則返回值為強類型。
如果屬性是內部的,則函數返回成員的原始類型。
如果屬性是用戶定義的,則返回值的類型與 MemberValue 函數的返回值類型相同。
| 注意 |
| Properties ('Key') 返回與 Key0 相同的結果,但組合鍵除外。 Properties ('Key') 將為組合鍵返回 null。 將 Keyx 語法用於組合鍵,如示例所示。 Properties('Key0')、Properties('Key1')、Properties('Key2') 等共同構成了組合鍵。 |
示例
下例既返回內部屬性也返回用戶定義成員屬性,並且利用 TYPED 參數返回“星期幾”成員屬性的強類型值。
WITH MEMBER Measures.MemberName AS
[Date].[Calendar].[July 1, 2003].Properties('Name')
MEMBER Measures.MemberVal AS
[Date].[Calendar].[July 1, 2003].Properties('Member_Value')
MEMBER Measures.MemberKey AS
[Date].[Calendar].[July 1, 2003].Properties('Key')
MEMBER Measures.MemberID AS
[Date].[Calendar].[July 1, 2003].Properties('ID')
MEMBER Measures.MemberCaption AS
[Date].[Calendar].[July 1, 2003].Properties('Caption')
MEMBER Measures.DayName AS
[Date].[Calendar].[July 1, 2003].Properties('Day Name', TYPED)
MEMBER Measures.DayNameTyped AS
[Date].[Calendar].[July 1, 2003].Properties('Day Name')
MEMBER Measures.DayofWeek AS
[Date].[Calendar].[July 1, 2003].Properties('Day of Week')
MEMBER Measures.DayofMonth AS
[Date].[Calendar].[July 1, 2003].Properties('Day of Month')
MEMBER Measures.DayofYear AS
[Date].[Calendar].[July 1, 2003].Properties('Day of Year')
SELECT {Measures.MemberName
, Measures.MemberVal
, Measures.MemberKey
, Measures.MemberID
, Measures.MemberCaption
, Measures.DayName
, Measures.DayNameTyped
, Measures.DayofWeek
, Measures.DayofMonth
, Measures.DayofYear
} ON 0
FROM [Adventure Works]
以下示例演示了 KEYx 屬性的用法。
WITH
MEMBER Measures.MemberKey AS
[Customer].[Customer Geography].[State-Province].&[QLD]&[AU].Properties('Key')
MEMBER Measures.MemberKey0 AS
[Customer].[Customer Geography].[State-Province].&[QLD]&[AU].Properties('Key0')
MEMBER Measures.MemberKey1 AS
[Customer].[Customer Geography].[State-Province].&[QLD]&[AU].Properties('Key1')
SELECT {Measures.MemberKey
, Measures.MemberKey0
, Measures.MemberKey1
} ON 0
FROM [Adventure Works]
112. Qtd (MDX)
按照 Time 維度中的 Quarter 級別的約束,從與給定成員相同的級別中返回同級成員的集,從第一個同級成員開始到給定成員為止。
語法
Qtd( [ Member_Expression ] )
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋
如果未指定成員表達式,則默認值為第一個層次結構的當前成員並且具有度量值組中Time 類型的第一個維度中的 Quarters 類型的級別。
Qtd 函數是 PeriodsToDate (MDX) 函數的快捷函數,它將后者的級別表達式參數設置為 Quarter。 也就是說,Qtd(Member_Expression) 的功能與 PeriodsToDate(Quarter_Level_Expression, Member_Expression) 相同。
示例
下例將從 Adventure Works 多維數據集中返回在 2003 日歷年度第三季度前兩個月(包含在 Date 維度中)聚合的 Measures.[Order Quantity]成員之和。
WITH MEMBER [Date].[Calendar].[First2MonthsSecondSemester2003] AS
Aggregate(
QTD([Date].[Calendar].[Month].[August 2003])
)
SELECT
[Date].[Calendar].[First2MonthsSecondSemester2003] ON COLUMNS,
[Product].[Category].Children ON ROWS
FROM
[Adventure Works]
WHERE
[Measures].[Order Quantity]
113. Rank (MDX)
返回指定元組在指定集中的排名(從 1 開始)。
語法
Rank(Tuple_Expression, Set_Expression [ ,Numeric Expression ] )
參數
Tuple_Expression
返回元組的有效多維表達式 (MDX)。
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression
有效的數值表達式,通常為返回數值的單元坐標的多維表達式 (MDX)。
注釋
如果指定了數值表達式,則 Rank 函數通過對指定的元組計算指定的數值表達式的值,來確定該元組的排名(排名從 1 開始)。 如果指定了數值表達式,則 Rank 函數會為集中具有相同值的元組分配相同的排名。 為值相同的元組分配相同的排名,會影響該集中后續元組的排名。 例如,由以下元組組成的集:{(a,b), (e,f), (c,d)}。 元組 (a,b) 與元組 (c,d) 具有相同的值。 如果元組 (a,b) 的排名為 1,則 (a,b) 和 (c,d) 的排名都為 1。 但元組(e,f) 的排名為 3。 此集中可能沒有排名為 2 的元組。
如果未指定數值表達式,則 Rank 函數返回指定元組的序號位置(序號從 1 開始)。
Rank 函數不會對集進行排序。
示例
下面的示例將返回包含客戶和采購日期的元組集,並且使用 Filter、NonEmpty、Item 和 Rank 函數來查找每個客戶的最后一次采購日期。
WITH SET MYROWS AS FILTER
(NONEMPTY
([Customer].[Customer Geography].MEMBERS
* [Date].[Date].[Date].MEMBERS
, [Measures].[Internet Sales Amount]
) AS MYSET
, NOT(MYSET.CURRENT.ITEM(0)
IS MYSET.ITEM(RANK(MYSET.CURRENT, MYSET)).ITEM(0))
)
SELECT [Measures].[Internet Sales Amount] ON 0,
MYROWS ON 1
FROM [Adventure Works]
下面的示例使用 Order 函數而不是 Rank 函數,根據 Reseller Sales Amount 度量值為 City 層次結構的成員排名,然后按照排名高低顯示它們。通過使用 Order 函數先對 City 層次結構的成員集進行排序,僅執行一次排序,然后在以排序順序顯示之前執行線性掃描。
WITH
SET OrderedCities AS Order
([Geography].[City].[City].members
, [Measures].[Reseller Sales Amount], BDESC
)
MEMBER [Measures].[City Rank] AS Rank
([Geography].[City].CurrentMember, OrderedCities)
SELECT {[Measures].[City Rank],[Measures].[Reseller Sales Amount]} ON 0
,Order
([Geography].[City].[City].MEMBERS
,[City Rank], ASC)
ON 1
FROM [Adventure Works]
114. RollupChildren (MDX)
使用指定的一元運算符,通過匯總指定成員的子成員的值來返回生成的值。
語法
RollupChildren(Member_Expression, Unary_Operator)
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
Unary_Operator
指定一元運算符的有效字符串表達式。
注釋
RollupChildren 函數使用指定的一元運算符,對所指定成員的子成員的值進行匯總。
下表說明了可用於此函數的有效一元運算符。
| 運算符 |
結果 |
| + |
total = total + current child |
| - |
總額 = 總額 - 當前子級 |
| * |
total = total * current child |
| / |
total = total / current child |
| % |
total = (total / current child) * 100 |
| ~ |
不在匯總結果中使用子成員。 子成員的值將被忽略。 |
如果成員屬性中的運算符未顯示在列表中,則會發生錯誤。 求值順序取決於同級的順序,而不是運算符的優先順序。
示例
下例使用名為“Alternate Rollup Operator”的成員屬性(包含一元運算符的備用值)以備用方式匯總 Account(帳戶)維度中 Net Profit(凈利潤)層次結構的子成員。 該成員屬性不在 Adventure Works 多維數據集中,但是可以創建。 可以在假設分析的預算應用中使用 RollupChildren函數。
RollupChildren
( [Account].[Net Profit]
, [Account].CurrentMember.Properties ('Alternate Rollup Operator') )
115. Root (MDX)
返回一個元組,該元組包含來自多維數據集、維度或元組的當前作用域中的各個屬性層次結構的 All 成員。 有關作用域的詳細信息,請參閱 SCOPE 語句 (MDX)。
| 注意 |
| 如果屬性層次結構中沒有 All 成員,則元組包含該層次結構的默認成員。 |
語法
Cube syntax
Root ()
Dimension syntax
Root( Dimension_Name )
Tuple syntax
Root( Tuple_Expression )
參數
Dimension_Name
指定維度名稱的有效字符串表達式。
Tuple_Expression
返回元組的有效多維表達式 (MDX)。
注釋
如果未指定維度名稱和元組表達式,則 Root 函數從多維數據集的每個屬性層次結構中返回包含 All 成員(如果 All 成員不存在,則為默認成員)的元組。 成員在元組中的順序基於多維數據集中定義屬性層次結構的順序。
如果指定了維度名稱,則 Root 函數根據當前成員的上下文,從該維度中的每個屬性層次結構中返回包含 All 成員(如果 All 成員不存在,則為默認成員)的元組。 成員在元組中的順序基於維度中定義屬性層次結構的順序。
| 注意 |
| 如果指定了層次結構名稱,Tuple 函數將從該層次結構名稱中選取維度名稱。 |
如果指定了元組表達式,則 Root 函數返回的元組包含指定元組與未顯式包括在指定元組中的所有其他維度屬性的 All 成員的交集。
示例
下例將從 Adventure Works 多維數據集的每個層次結構中返回包含 All 成員(如果 All 成員不存在,則為默認成員)的元組。
SELECT Root()ON 0
FROM [Adventure Works]
下例將從 Adventure Works 多維數據集的 Date 維度的每個層次結構中返回包含 All 成員(如果 All 成員不存在,則為默認成員)的元組,並且還將返回這些默認成員與 Measures 維度中指定成員的交集的值。
SELECT Root([Date]) ON 0
FROM [Adventure Works]
WHERE [Measures].[Order Count]
下例將從 Adventure Works 多維數據集的 Date 維度的每個非指定層次結構中返回包含指定的元組成員 (July 1, 2001) 和 All 成員(如果 All 成員不存在,則為默認成員)的元組,並且還將返回這些成員與 Measures 維度中指定成員的交集的值。
SELECT Root([Date].[July 1, 2001]) ON 0
FROM [Adventure Works]
WHERE [Measures].[Order Count]
116. SetToArray (MDX)
將一個或多個集轉換為數組,以便在用戶定義的函數中使用。
語法
SetToArray(Set_Expression1 [ ,Set_Expression2,...n ][ ,Numeric_Expression ] )
參數
Set_Expression1
返回集的有效多維表達式 (MDX)。
Set_Expression2
返回集的有效多維表達式 (MDX)。
Numeric_Expression
返回數字的有效數值表達式,通常為單元坐標的多維表達式 (MDX)。
注釋
SetToArray 函數將一個或多個集轉換為數組,以便在用戶定義的函數中使用。 所得到的數組中的維度數與指定的集數相同。
可選的數值表達式可以為數組單元提供值。 如果未指定數值表達式,則在當前上下文中對集的交叉聯接求值。
所得到的數組中的單元坐標與各個集在列表中的位置相對應。 例如,有三個集,SA、SB 和 SC。 其中每個集都有兩個元素。 則 MDX 語句SetToArray(SA, SB, SC) 創建以下三維數組:
(SA1, SB1, SC1) (SA2, SB1, SC1) (SA1, SB2, SC1) (SA2, SB2, SC1)
(SA1, SB1, SC2) (SA2, SB1, SC2) (SA1, SB2, SC2) (SA2, SB2, SC2)
| 注意 |
| SetToArray 函數的返回類型為 VARIANT 類型 VT_ARRAY。 因此,SetToArray 函數的輸出只能用作用戶定義函數的輸入。 |
示例
下例將返回一個數組。
SetToArray([Geography].[Geography].Members, [Measures].[Internet Sales Amount])
117.SetToStr (MDX)
返回多維表達式 (MDX) 格式的字符串,它對應於指定的集合。
語法
SetToStr(Set_Expression)
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
注釋
該函數用於將某集的字符串表示形式傳輸到外部函數,以進行分析。 返回的字符串以括號 {} 括起,並用逗號分隔集中的每一項。
示例
下面的示例將返回包含 Geography.Country 屬性層次結構的所有成員的字符串。
WITH MEMBER Measures.x AS SetToStr (Geography.Geography.Children)
SELECT Measures.x ON 0
FROM [Adventure Works]
118. Siblings (MDX)
返回指定成員的同級,包括該成員本身。
語法
Member_Expression.Siblings
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
示例
下面的示例返回 March 2003 的同級(即 January 2003 和 February 2003,也包括 March 2003)的默認度量值。
SELECT [Date].[Calendar].[Month].[March 2003].Siblings ON 0
FROM [Adventure Works]
119. Stddev (MDX)
Stdev函數的別名。
120. StddevP (MDX)
StdevP 函數的別名。
121. Stdev (MDX)
返回數值表達式用無偏差總體公式(除以 n-1)對集求得的樣本標准偏差。
語法
Stdev(Set_Expression [ ,Numeric_Expression ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression
有效數值表達式,通常為返回數值的單元坐標的多維表達式 (MDX)。
注釋
Stdev 函數使用無偏差總體公式,而 StdevP 函數使用有偏差總體公式。
示例
下例將使用無偏差總體公式返回對日歷年 2003 的前三個月求得的 Internet Order Quantity 的標准偏差。
WITH MEMBER Measures.x AS
Stdev
( { [Date].[Calendar].[Month].[January 2003],
[Date].[Calendar].[Month].[February 2003],
[Date].[Calendar].[Month].[March 2003]},
[Measures].[Internet Order Quantity])
SELECT Measures.x ON 0
FROM [Adventure Works]
122. StdevP (MDX)
返回數值表達式用有偏差總體公式(除以 n)對集求得的總體標准偏差。
語法
StdevP(Set_Expression [ ,Numeric_Expression ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression
有效數值表達式,通常為返回數值的單元坐標的多維表達式 (MDX)。
注釋
StdevP 函數使用有偏差總體公式,而 Stdev 函數使用無偏差總體公式。
示例
下面的示例將使用有偏差總體公式返回對 2003 日歷年度中前三個月求得的 Internet Order Quantity 的標准偏差。
WITH MEMBER Measures.x AS
StdevP
( { [Date].[Calendar].[Month].[January 2003],
[Date].[Calendar].[Month].[February 2003],
[Date].[Calendar].[Month].[March 2003]},
[Measures].[Internet Order Quantity])
SELECT Measures.x ON 0
FROM [Adventure Works]
123. StripCalculatedMembers (MDX)
返回通過從指定集中刪除計算成員而生成的集。
語法
StripCalculatedMembers(Set_Expression)
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
注釋
StripCalculatedMembers 函數從集中刪除計算成員。 可以使用 AddCalculatedMembers 函數將計算成員添加到某個集中,該函數將返回服務器上定義的計算成員或者使用 WITH MEMBER 語法在查詢本身中添加的計算成員。
示例
以下示例從查詢中刪除所有計算成員。
WITH MEMBER Measures.MemberName AS
[Date].[Calendar].[July 1, 2003].Properties('Name')
MEMBER Measures.MemberVal AS
[Date].[Calendar].[July 1, 2003].Properties('Member_Value')
MEMBER Measures.MemberKey AS
[Date].[Calendar].[July 1, 2003].Properties('Key')
MEMBER Measures.MemberID AS
[Date].[Calendar].[July 1, 2003].Properties('ID')
MEMBER Measures.MemberCaption AS
[Date].[Calendar].[July 1, 2003].Properties('Caption')
MEMBER Measures.DayName AS
[Date].[Calendar].[July 1, 2003].Properties('Day Name', TYPED)
MEMBER Measures.DayNameTyped AS
[Date].[Calendar].[July 1, 2003].Properties('Day Name')
MEMBER Measures.DayofWeek AS
[Date].[Calendar].[July 1, 2003].Properties('Day of Week')
MEMBER Measures.DayofMonth AS
[Date].[Calendar].[July 1, 2003].Properties('Day of Month')
MEMBER Measures.DayofYear AS
[Date].[Calendar].[July 1, 2003].Properties('Day of Year')
SELECT StripCalculatedMembers(
{ Measures.DefaultMember
, Measures.MemberName
, Measures.MemberVal
, Measures.MemberKey
, Measures.MemberID
, Measures.MemberCaption
, Measures.DayName
, Measures.DayNameTyped
, Measures.DayofWeek
, Measures.DayofMonth
, Measures.DayofYear
}
) ON 0
FROM [Adventure Works]
124. StrToMember (MDX)
返回多維表達式 (MDX) 格式的字符串指定的成員。
語法
StrToMember(Member_Name [,CONSTRAINED] )
參數
Member_Name
直接或間接指定成員的有效字符串表達式。
注釋
StrToMember 函數返回字符串表達式中指定的成員。 StrToMember 函數通常與用戶定義函數一起使用,以從外部函數或在參數化 MDX 查詢時向 MDX 語句返回成員規范。
如果使用 CONSTRAINED 標志,則成員名稱必須可直接解析為限定或未限定的成員名稱。 此標志通過指定字符串可降低注入攻擊的風險。如果所提供的字符串無法直接解析為限定或未限定的成員名稱,將出現以下錯誤:“違反了 STRTOMEMBER 函數中 CONSTRAINED 標志所規定的限制。”
如果未使用 CONSTRAINED 標志,指定的成員將能直接解析為成員名稱,或解析為 MDX 表達式以解析為名稱。
為了更好地理解集和成員之間的差異,請參閱“使用集表達式”和“使用成員表達式”。
示例
下面的示例使用 StrToMember 函數返回 State-Province 屬性層次結構中 Bayern 成員的 Reseller Sales Amount 度量值。 指定字符串提供了限定的成員名稱。
SELECT {StrToMember ('[Geography].[State-Province].[Bayern]')}
ON 0,
{[Measures].[Reseller Sales Amount]} ON 1
FROM [Adventure Works]
下面的示例使用 StrToMember 函數返回 Bayern 成員的 Reseller Sales Amount 度量值。 由於成員名稱字符串僅提供了一個未限定的成員名稱,因此該查詢返回指定成員的第一個實例,而指定成員恰好在 Customer 維度(不與 Reseller Sales 相交)的 Customer Geography 層次結構中。 最佳做法要求指定限定名稱以確保獲得預期的結果。
SELECT {StrToMember ('[Bayern]').Parent}
ON 0,
{[Measures].[Reseller Sales Amount]} ON 1
FROM [Adventure Works]
下面的示例使用 StrToMember 函數返回 State-Province 屬性層次結構中 Bayern 成員的 Reseller Sales Amount 度量值。 所提供的成員名稱字符串解析為限定的成員名稱。
SELECT {StrToMember('[Geography].[Geography].[Country].[Germany].FirstChild', CONSTRAINED)}
ON 0,
{[Measures].[Reseller Sales Amount]} ON 1
FROM [Adventure Works]
下面的示例返回因 CONSTRAINED 標志而引起的錯誤。 雖然所提供的成員名稱字符串包含一個可解析為限定的成員名稱的有效 MDX 成員表達式,但是 CONSTRAINED 標志要求成員名稱字符串包含限定或未限定的成員名稱。
SELECT StrToMember ('[Geography].[Geography].[Country].[Germany].FirstChild', CONSTRAINED)
ON 0
FROM [Adventure Works]
125.StrToSet (MDX)
返回多維表達式 (MDX) 格式的字符串指定的集。
語法
StrToSet(Set_Specification [,CONSTRAINED] )
參數
Set_Specification
直接或間接指定某個集的有效字符串表達式。
注釋
StrToSet 函數返回字符串表達式中指定的集。 StrToSet 函數通常與用戶定義函數一起使用,以從外部函數或在參數化 MDX 查詢時向 MDX 語句返回集規范。
如果使用了 CONSTRAINED 標志,則該集規范必須包含限定或非限定成員名稱,或包含以括號 {} 括起來的限定或非限定成員名稱的一組元組。 此標志通過指定字符串可降低注入攻擊的風險。 如果提供的字符串不能直接解析為限定或非限定的成員名稱,則會出現下列出錯信息:“違反了 STRTOSET 函數中 CONSTRAINED 標志所規定的限制。”
如果未使用 CONSTRAINED 標志,則指定的集規范可以解析為返回一個集的有效多維表達式 (MDX)。
為了更好地理解集和成員之間的差異,請參閱“使用集表達式”和“使用成員表達式”。
示例
下例使用 StrToSet 函數,返回 State-Province 屬性層次結構的成員集。 該集規范提供一個有效的 MDX 集表達式。
SELECT StrToSet ('[Geography].[State-Province].Members')
ON 0
FROM [Adventure Works]
下面的示例返回因 CONSTRAINED 標志而引起的錯誤。 如果集規范提供一個有效的 MDX 集表達式,則 CONSTRAINED 標志在集規范中需要限定或非限定的成員名稱。
SELECT StrToSet ('[Geography].[State-Province].Members', CONSTRAINED)
ON 0
FROM [Adventure Works]
下例返回德國和加拿大的“分銷商銷售額”度量值。 指定字符串中提供的集規范包含了 CONSTRAINED 標志所需的限定成員名稱。
SELECT StrToSet ('{[Geography].[Geography].[Country].[Germany],[Geography].[Geography].[Country].[Canada]}', CONSTRAINED)
ON 0
FROM [Adventure Works]
126. StrToTuple (MDX)
返回多維表達式 (MDX) 格式的字符串指定的元組。
語法
StrToTuple(Tuple_Specification [,CONSTRAINED] )
參數
Tuple_Specification
直接或間接指定元組的有效字符串表達式。
注釋
StrToTuple 函數返回指定的集。 StrToTuple 函數通常與用戶定義函數一起使用,以將外部函數中的元組規范返回到 MDX 語句。
如果使用 CONSTRAINED 標志,則元組規范必須包含限定或未限定的成員名稱。 此標志通過指定字符串可降低注入攻擊的風險。 如果所提供的字符串無法直接解析為限定或未限定的成員名稱,將出現以下錯誤:“違反了 STRTOTUPLE 函數中 CONSTRAINED 標志所規定的限制。”
如果未使用 CONSTRAINED 標志,則指定的元組可以解析為有效的 MDX 表達式以返回元組。
示例
下面的示例返回 Bayern 成員在日歷年度 2004 的 Reseller Sales Amount 度量值。 提供的元組規范包含有效的 MDX 元組表達式。
SELECT StrToTuple ('([Geography].[State-Province].[Bayern],[Date].[Calendar Year].[CY 2004], [Measures].[Reseller Sales Amount])')
ON 0
FROM [Adventure Works]
下面的示例返回 Bayern 成員在日歷年度 2004 的 Reseller Sales Amount 度量值。 提供的元組規范包含了 CONSTRAINED 標志所需的限定成員名稱。
SELECT StrToTuple ('([Geography].[State-Province].[Bayern],[Date].[Calendar Year].[CY 2004], [Measures].[Reseller Sales Amount])', CONSTRAINED)
ON 0
FROM [Adventure Works]
下面的示例返回 Bayern 成員在日歷年度 2004 的 Reseller Sales Amount 度量值。 提供的元組規范包含有效的 MDX 元組表達式。
SELECT StrToTuple ('([Geography].[State-Province].[Bayern],[Date].[Calendar Year].&[2003].NEXTMEMBER, [Measures].[Reseller Sales Amount])')
ON 0
FROM [Adventure Works]
下面的示例返回因 CONSTRAINED 標志而引起的錯誤。 雖然所提供的元組規范包含有效的 MDX 元組表達式,但是 CONSTRAINED 標志要求元組規范包含限定或未限定的成員名稱。
SELECT StrToTuple ('([Geography].[State-Province].[Bayern],[Date].[Calendar Year].&[2003].NEXTMEMBER, [Measures].[Reseller Sales Amount])', CONSTRAINED)
ON 0
FROM [Adventure Works]
127. StrToValue (MDX)
返回多維表達式 (MDX) 格式的字符串指定的數值。
語法
StrToValue(MDX_Expression [,CONSTRAINED] )
參數
MDX_Expression
直接或間接解析為單個單元的有效字符串表達式。
注釋
StrToValue 函數返回 MDX 表達式指定的數值。 StrToValue 函數通常與用戶定義函數一起使用,以從某個外部函數向可解析為單個單元的 MDX 語句返回一個 MDX 表達式。
如果使用 CONSTRAINED 標志,則 MDX 表達式只能包含一個標量值。 通過指定字符串,使用 CONSTRAINED 標志可降低發生注入攻擊的風險。 如果提供的 MDX 表達式不能直接解析為標量值,則會出現下列出錯信息:“違反了 STRTOVALUE 函數中 CONSTRAINED 標志所規定的限制。”
當未使用 CONSTRAINED 標志時,指定的 MDX 表達式的復雜程度不受限制,只要該表達式可解析為能夠返回單個單元的有效多維表達式 (MDX) 即可。
| 注意 |
| 如果 MDX 表達式的結果以文本方式存儲,並且您希望對返回值執行算術運算,那么將該結果作為數值返回將十分有用。 |
示例
下例使用 StrToValue 函數將每輛自行車的重量作為值返回。
WITH MEMBER Measures.x AS
StrToValue
([Product].[Product].CurrentMember.Properties ('Weight')
,CONSTRAINED
)
SELECT Measures.x ON 0
,[Product].[Product].[Product].Members ON 1
FROM [Adventure Works]
WHERE [Product].[Product Categories].[Bikes]
128. Subset (MDX)
返回指定集中的元組的子集。
語法
Subset(Set_Expression, Start [ ,Count ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Start
指定要返回第一個元組位置的有效數值表達式。
Count
指定要返回的元組數的有效數值表達式。
注釋
Subset 函數從指定集的指定開始位置起返回包含指定元組數的子集。 開始位置基於以零為基的索引;即 0 對應於指定集中的第一個元組,1 對應於第二個元組,依此類推。
如果未指定 Count,則函數返回從 Start 到集末尾的所有元組。
示例
下例根據 Reseller Gross Profit(分銷商毛利潤),返回前五個銷售產品子類別的分銷商銷售額度量值,而不管層次結構如何。 Subset 函數用於在使用 Order 函數將結果排序后,僅返回結果中的前五個集。
SELECT Subset
(Order
([Product].[Product Categories].[SubCategory].members
,[Measures].[Reseller Gross Profit]
,BDESC
)
,0
,5
) ON 0
FROM [Adventure Works]
129. Sum (MDX)
返回對指定集計算數值表達式求得的和。
語法
Sum( Set_Expression [ , Numeric_Expression ] )
參數
Set_Expression
有效的多維表達式 (MDX) 集表達式。
Numeric_Expression
有效數值表達式,通常為返回數值的單元坐標的多維表達式 (MDX)。
注釋
如果指定了數值表達式,則對集計算指定數值表達式的值然后求和。 如果沒有指定數值表達式,則在指定集成員的當前上下文中計算指定集然后求和。 如果將 SUM 函數應用於非數值表達式,則結果不確定。
| 注意 |
| 計算一組數值的總和時,Analysis Services 將忽略空值。 |
示例
下例將返回 2001 和 2002 日歷年 Product.Category 屬性層次結構的所有成員的 Reseller Sales Amount 之和。
WITH MEMBER Measures.x AS SUM
( { [Date].[Calendar Year].&[2001]
, [Date].[Calendar Year].&[2002] }
, [Measures].[Reseller Sales Amount]
)
SELECT Measures.x ON 0
,[Product].[Category].Members ON 1
FROM [Adventure Works]
下例將返回截至 2002 年 7 月 20 日 7 月份的 Internet 銷售運費之和。
WITH MEMBER Measures.x AS SUM
(
MTD([Date].[Calendar].[Date].[July 20, 2002])
, [Measures].[Internet Freight Cost]
)
SELECT Measures.x ON 0
FROM [Adventure Works]
下面的示例使用 WITH MEMBER 關鍵字和 SUM 函數定義 Measures 維度中計算成員,其中包含 Geography 維度 Country 屬性層次結構中的 Canada 和 United States 成員的 Reseller Sales Amount 度量值之和。
WITH MEMBER Measures.NorthAmerica AS SUM
(
{[Geography].[Country].&[Canada]
, [Geography].[Country].&[United States]}
,[Measures].[Reseller Sales Amount]
)
SELECT {[Measures].[NorthAmerica]} ON 0,
[Product].[Category].members ON 1
FROM [Adventure Works]
通常,SUM 函數與 CURRENTMEMBER 函數或 YTD 之類的函數(返回根據層次結構的當前成員而變化的集合)一起使用。 例如,下面的查詢返回所有日期(從日歷年的開始到行軸上顯示的日期)的 Internet Sales Amount 度量值的總和。
WITH MEMBER MEASURES.YTDSUM AS
SUM(YTD(), [Measures].[Internet Sales Amount])
SELECT {[Measures].[Internet Sales Amount], MEASURES.YTDSUM} ON 0,
[Date].[Calendar].MEMBERS ON 1
FROM [Adventure Works]
130. Tail (MDX)
返回集末尾的子集。
語法
Tail(Set_Expression [ ,Count ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Count
指定要返回的元組數的有效數值表達式。
注釋
Tail 函數從指定集的結尾處返回指定的元組數目。 會保留元素的順序。 Count 的默認值為 1。 如果指定的元組數目小於 1,則該函數返回空集。如果指定的元組數目超過了集中的元組數目,則此函數返回原始集。
示例
下例根據 Reseller Gross Profit(分銷商毛利潤),返回前五個銷售產品子類別的分銷商銷售額度量值,而不管層次結構如何。 Tail 函數用於在使用 Order 函數將結果排序后,僅返回結果中的后五個集。
SELECT Tail
(Order
([Product].[Product Categories].[SubCategory].members
,[Measures].[Reseller Gross Profit]
,BASC
)
,5
) ON 0
FROM [Adventure Works]
131.This (MDX)
返回用於多維表達式 (MDX) 腳本中的分配的當前子多維數據集。
語法
This
注釋
This 函數可用於代替任何子多維數據集表達式,以提供 MDX 計算腳本中的當前作用域內的當前子多維數據集。 必須在分配的左側使用 This 函數。
示例
以下 MDX 腳本片段說明如何將 This 關鍵字用於 SCOPE 語句來為子多維數據集進行分配:
Scope
(
[Date].[Fiscal Year].&[2005],
[Date].[Fiscal].[Fiscal Quarter].Members,
[Measures].[Sales Amount Quota]
) ;
This = ParallelPeriod
(
[Date].[Fiscal].[Fiscal Year], 1,
[Date].[Fiscal].CurrentMember
) * 1.35 ;
/*-- Allocate equally to months in FY 2002 -----------------------------*/
Scope
(
[Date].[Fiscal Year].&[2002],
[Date].[Fiscal].[Month].Members
) ;
This = [Date].[Fiscal].CurrentMember.Parent / 3 ;
End Scope ;
End Scope;
132. ToggleDrillState (MDX)
在成員之間切換深化模式和淺化模式的狀態。
語法
ToggleDrillState(Set_Expression1,Set_Expression2 [, [RECURSIVE]
[,INCLUDE_CALC_MEMBERS] ] )
參數
Set_Expression1
返回集的有效多維表達式 (MDX)。
Set_Expression2
返回集的有效多維表達式 (MDX)。
Recursive
(可選)。 指示集的遞歸比較的關鍵字。 ToggleDrillState 函數結合了 DrillupMember 函數和 DrilldownMember 函數。 僅當該成員處於 DrilldownMember 狀態才適用遞歸。
Include_calc_members
(可選)。 指示是否在深化級別包括計算成員(如果存在)的標志。
注釋
ToggleDrillState 函數切換每個存在於第一個集中的第二個集的成員的鑽取狀態。 第一個集可以包含任意維數的元組,但是第二個集必須包含單個維度的成員。 ToggleDrillState 函數結合了 DrillupMember 函數和 DrilldownMember 函數。 如果第二個集中的成員 m 存在於第一個集中,並且該成員被深化(即,其后有一個直接后代),那么 DrillupMember(Set_Expression1, {m}) 將應用於第一個集中的成員或元組。 如果 m 成員被淺化(即,m 后沒有 m 的直接后代),則對第一個集應用 DrilldownMember(Set_Expression1, {m}[, RECURSIVE])。
如果使用了可選的 RECURSIVE 標志,則循環應用淺化和深化。 關於循環標志的詳細信息,請參閱 DrillupMember 函數和 DrilldownMember 函數。
通過查詢 XMLA 屬性 MdpropMdxDrillFunctions,您可以確認服務器為鑽取功能提供的支持的級別;有關詳細信息,請參閱支持的 XMLA 屬性 (XMLA)。
請參閱 數據庫日志:MDX 集函數:ToggleDrillState() 函數(用於涉及這個函數的方案和示例)。
示例
下例對第一個集中的澳大利亞成員進行深化,而對第一個集中的美國成員進行淺化。
SELECT ToggleDrillState
({[Geography].[Geography].[Country].Members, [Geography].[Geography].[Country].&[United States].Children},
{[Geography].[Geography].[Country].[Australia]
, [Geography].[Geography].[Country].&[United States]}
--, recursive
--, include_calc_members
) ON 0
FROM [Adventure Works]
133. TopCount (MDX)
按降序對集進行排序,並返回指定數目的最大值元素。
語法
TopCount(Set_Expression,Count [ ,Numeric_Expression ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Count
指定要返回的元組數的有效數值表達式。
Numeric_Expression
有效數值表達式,通常為返回數值的單元坐標的多維表達式 (MDX)。
注釋
如果指定了數值表達式,則 TopCount 函數根據數值表達式指定的值(通過計算指定對集得出),對指定集指定的集中的元組按降序排序。 對集進行排序后,TopCount 函數返回指定數目的具有最大值的元組。
| 重要提示 |
| 與 BottomCount 函數一樣,TopCount 函數總是會打亂層次結構。 |
如果未指定數值表達式,則函數按照自然順序返回成員集,而不進行任何排序,其行為如同 Head (MDX) 函數。
示例
下面的示例按 Internet Sales Amount 返回前 10 個日期:
SELECT [Measures].[Internet Sales Amount] ON 0,
TOPCOUNT([Date].[Date].[Date].MEMBERS, 10, [Measures].[Internet Sales Amount])
ON 1
FROM [Adventure Works]
下面的示例返回 Bike 類別包含 Geography 維度中 Geography 層次結構的 City 級別的所有成員組合的集中的前五個成員,並按照 Reseller Sales Amount 度量值進行排序(從成員集中銷售額最高的成員開始)。
SELECT [Measures].[Reseller Sales Amount] ON 0,
TopCount
({[Geography].[Geography].[City].Members
*[Date].[Fiscal].[Fiscal Year].Members}
, 5
, [Measures].[Reseller Sales Amount]
) ON 1
FROM [Adventure Works]
WHERE([Product].[Product Categories].Bikes)
134. TopPercent (MDX)
按降序對集進行排序,並返回一個最大值元組集,該元組集的累積合計等於或大於指定的百分比。
語法
TopPercent(Set_Expression, Percentage, Numeric_Expression)
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Percentage
指定要返回的元組數的有效數值表達式。
| 重要提示 |
| Percentage 需要是正數值;負值將生成錯誤。 |
Numeric_Expression
通常是單元坐標(返回數字)的多維表達式 (MDX) 的有效數值表達式。
注釋
TopPercent 函數使用指定的集對指定的數值表達式求和,同時對該集按降序排序。 然后,該函數返回具有最高值的元素,其總合計值的累積百分比至少是指定的百分比。 該函數返回累積合計至少達到指定百分比的最小子集。 返回的元素從大到小排序。
| 注意 |
|
| 如果 Numeric_Expression 返回任何負值,則 TopPercent 將僅返回一 (1) 行。 請參閱針對此行為的詳細演示的第二個示例。 |
|
| 重要提示 |
|
| 與 BottomPercent 函數一樣,TopPercent 函數總是會打亂層次結構。 |
|
示例
下面的示例返回對於“自行車”類別,幫助實現前 10% 的分銷商銷售額的最佳城市。 結果將按降序排序,並且從具有最高銷售額的城市開始。
SELECT [Measures].[Reseller Sales Amount] ON 0,
TopPercent
({[Geography].[Geography].[City].Members}
, 10
, [Measures].[Reseller Sales Amount]
) ON 1
FROM [Adventure Works]
WHERE([Product].[Product Categories].[Bikes])
上面的表達式生成以下結果:
| Reseller Sales Amount |
|
| Toronto |
$3,508,904.84 |
| London |
$1,521,530.09 |
| Seattle |
$1,209,418.16 |
| Paris |
$1,170,425.18 |
使用下面的查詢可以獲取原始數據集,並返回 588 行:
SELECT [Measures].[Reseller Sales Amount] ON 0,
Order
({[Geography].[Geography].[City].Members}
, [Measures].[Reseller Sales Amount]
, BDESC
) ON 1
FROM [Adventure Works]
WHERE([Product].[Product Categories].[Bikes])
示例
下面的演練將幫助您理解 Numeric_Expression 中負值的影響。 首先,將生成一些可展示該行為的上下文。
下面的查詢將返回一個表,由分銷商的“Sales Amount”、“Total Product Cost”和“Gross Profit”構成,並且按利潤的降序排序。 請注意,對於利潤僅存在負值;因此,最小的利潤損失將出現在最頂部。
SELECT { [Measures].[Reseller Sales Amount], [Measures].[Reseller Total Product Cost], [Measures].[Reseller Gross Profit] } ON columns
, ORDER( [Product].[Product Categories].[Bikes].[Touring Bikes].children, [Measures].[Reseller Gross Profit], BDESC ) ON rows
FROM [Adventure Works]
上述查詢會返回以下結果;為便於閱讀,中間部分的行已刪除。
| Reseller Sales Amount |
Reseller Total Product Cost |
Reseller Gross Profit |
|
| Touring-2000 Blue, 50 |
$157,444.56 |
$163,112.57 |
($5,668.01) |
| Touring-2000 Blue, 46 |
$321,027.03 |
$333,021.50 |
($11,994.47) |
| Touring-3000 Blue, 62 |
$87,773.61 |
$100,133.52 |
($12,359.91) |
| … |
… |
… |
… |
| Touring-1000 Yellow, 46 |
$1,016,312.83 |
$1,234,454.27 |
($218,141.44) |
| Touring-1000 Yellow, 60 |
$1,184,363.30 |
$1,443,407.51 |
($259,044.21) |
現在,如果要求您按利潤展示前 100% 的自行車,則編寫如下查詢:
SELECT { [Measures].[Reseller Sales Amount], [Measures].[Reseller Total Product Cost], [Measures].[Reseller Gross Profit] } ON columns
, TOPPERCENT( [Product].[Product Categories].[Bikes].[Touring Bikes].children, 100,[Measures].[Reseller Gross Profit] ) ON rows
FROM [Adventure Works]
請注意,查詢要求百分之百 (100%);這意味着應返回所有行。 但是,因為在 Numeric_Expression 中存在負值,所以僅返回一行。
| Reseller Sales Amount |
Reseller Total Product Cost |
Reseller Gross Profit |
|
| Touring-2000 Blue, 50 |
$157,444.56 |
$163,112.57 |
($5,668.01) |
135. TopSum (MDX)
對集進行排序並返回累計合計至少達到指定值的最前面元素。
語法
TopSum(Set_Expression, Value, Numeric_Expression)
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Value
指定與每個元組相比較的值的有效數值表達式。
Numeric_Expression
返回度量值的有效數值表達式,通常是多維表達式 (MDX)。
注釋
TopSum 函數計算對指定集求得的指定度量值的和,同時對該集按降序排序。 然后,該函數返回最大值元素,其指定數值表達式的合計至少為指定值。 此函數返回集的最小子集,其累積合計至少為指定值。 返回的元素按從大到小的順序排序。
| 重要提示 |
| 與 BottomSum 函數一樣,TopSum 函數總是會打亂層次結構。 |
示例
下面的示例返回 Geography 維度中 Geography 層次結構內 City 級別的最小成員集(對於 Bike 類別),使用 Reseller Sales Amount 度量值時該集的累積合計至少為 6,000,000(從集中具有最大銷售額的成員開始)。
SELECT [Measures].[Reseller Sales Amount] ON 0,
TopSum
({[Geography].[Geography].[City].Members}
, 6000000
, [Measures].[Reseller Sales Amount]
) ON 1
FROM [Adventure Works]
WHERE([Product].[Product Categories].Bikes)
136. TupleToStr (MDX)
返回多維表達式 (MDX) 格式的字符串,它對應於指定的元組。
語法
TupleToStr(Tuple_Expression)
參數
Tuple_Expression
返回元組的有效多維表達式 (MDX)。
注釋
此函數用於將元組的字符串表示形式傳輸給外部函數進行分析。 返回的字符串將用大括號 {} 括起來;如果元組中明確定義了多個成員,則每個成員之間用逗號分隔。
示例
下面的示例返回字符串 ([Date].[Calendar Year].&[2001],[Geography].[Geography].[Country].&[United States]):
WITH MEMBER Measures.x AS TupleToStr
(
([Date].[Calendar Year].&[2001]
, [Geography].[Geography].[Country].&[United States]
)
)
SELECT Measures.x ON 0
FROM [Adventure Works]
下面的示例與上面的示例返回相同的字符串。
WITH SET s AS
{
([Date].[Calendar Year].&[2001],
[Geography].[Geography].[Country].&[United States]
)
}
MEMBER Measures.x AS TupleToStr ( s.Item(0) )
SELECT Measures.x ON 0
FROM [Adventure Works]
137. Union (MDX)
返回兩個集的並集,並且可以選擇保留重復成員。
語法
Standard syntax
Union(Set_Expression1, Set_Expression2 [,...n][, ALL])
Alternate syntax 1
Set_Expression1 + Set_Expression2 [+...n]
Alternate syntax 2
{Set_Expression1 , Set_Expression2 [,...n]}
參數
Set Expression 1
返回集的有效多維表達式 (MDX)。
Set Expression 2
返回集的有效多維表達式 (MDX)。
注釋
此函數可返回兩個或多個指定集的並集。使用標准語法和替代語法 1 時,默認情況下會消除重復項。 使用標准語法和 ALL 標志可以保留並集中的重復項。 從該集的尾部刪除重復項。 使用替代語法 2 時始終會保留重復項。
示例
以下示例將使用每種語法來演示 Union 函數的行為。
標准語法,消除重復項
SELECT Union
([Date].[Calendar Year].children
, {[Date].[Calendar Year].[CY 2002]}
, {[Date].[Calendar Year].[CY 2003]}
) ON 0
FROM [Adventure Works]
標准語法,保留重復項
SELECT Union
([Date].[Calendar Year].children
, {[Date].[Calendar Year].[CY 2002]}
, {[Date].[Calendar Year].[CY 2003]}
, ALL
) ON 0
FROM [Adventure Works]
替代語法 1,消除重復項
SELECT
[Date].[Calendar Year].children
+ {[Date].[Calendar Year].[CY 2002]}
+ {[Date].[Calendar Year].[CY 2003]} ON 0
FROM [Adventure Works]
替代語法 2,保留重復項
SELECT
{[Date].[Calendar Year].children
, [Date].[Calendar Year].[CY 2002]
, [Date].[Calendar Year].[CY 2003]} ON 0
FROM [Adventure Works]
138. UniqueName (MDX)
返回指定的維度、層次結構、級別或成員的唯一名稱。
語法
Dimension expression syntax
Dimension_Expression.UniqueName
Hierarchy expression syntax
Hierarchy_Expression.UniqueName
Level expression syntax
Level_Expression.UniqueName
Member expression syntax
Member_Expression.UniqueName
參數
Dimension_Expression
解析為維度的有效多維表達式 (MDX)。
Hierarchy_Expression
返回層次結構的有效多維表達式 (MDX)。
Level_Expression
返回級別的有效多維表達式 (MDX)。
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋
UniqueName 函數返回對象的唯一名稱,而不是由 Name 函數返回的名稱。 返回的名稱不包括多維數據集的名稱。 返回的結果取決於服務器端設置或 MDX Unique Name Style 連接字符串屬性。
示例
下例將返回 Adventure Works 多維數據集中的 Product 維度、Product Categories 層次結構、Subcategory 級別和 Bike Racks 成員的唯一名稱值。
WITH MEMBER DimensionUniqueName
AS [Product].UniqueName
MEMBER HierarchyUniqueName
AS [Product].[Product Categories].UniqueName
MEMBER LevelUniqueName
AS [Product].[Product Categories].[Subcategory].UniqueName
MEMBER MemberUniqueName
AS [Product].[Product Categories].[Subcategory].[Bike Racks]
SELECT
{DimensionUniqueName
, HierarchyUniqueName
, LevelUniqueName
, MemberUniqueName }
ON 0
FROM [Adventure Works]
139. UnknownMember (MDX)
返回與級別或成員關聯的未知成員。
語法
Member expression syntax
Member_Expression.UnknownMember
Hierarchy_expression syntax
Hierarchy_Expression.UnknownMember
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
Hierarchy_Expression
返回層次結構的有效多維表達式 (MDX)。
注釋
當層次結構未知時,Microsoft SQL Server Analysis Services 將創建一個未知成員,以便將事實數據表數據與該層次結構相關聯。 未知成員可位於下列級別之一:
位於未聚合的屬性層次結構的頂級。
位於自然層次結構的 All 級別下的第一級。
位於非自然層次結構的任何一級。
如果指定了成員表達式,UnknownMember 函數將返回指定成員的未知子成員。 如果指定的成員不存在,該函數將返回空。
如果指定了層次結構表達式,UnknownMember 函數將返回位於頂級的未知成員(如果存在)。
如果級別或成員中不存在未知成員,UnknownMember 函數將創建一個空成員。
| 注意 |
| 如果層次結構或成員中不存在未知成員,將生成一個錯誤。 |
示例
下面的示例為 Measures 維度的所有成員返回 Product 屬性層次結構中 All Products 成員的未知成員。
SELECT [Product].[Product].[All Products].UnknownMember
ON Columns,
[Measures].Members
ON Rows
FROM [Adventure Works]
下面的示例為 Measures 維度的所有成員返回 Product Categories 層次結構的未知成員。
SELECT [Product].[Product Categories].UnknownMember
ON Columns,
[Measures].Members
ON Rows
FROM [Adventure Works]
140. Unorder (MDX)
從指定集中刪除任何強制排序。
語法
Unorder(Set_Expression)
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
注釋
Unorder 函數刪除集中包含的元組被其他任意函數或語句(例如 Order 函數)強制實施的任一順序。 由 Unorder 函數返回的集中的元組順序是不確定的。
將 Unorder 函數用作 Microsoft SQL Server Analysis Services 的提示以對級處理進行查詢優化。 如果集中的元組順序對計算或查詢並不重要,則使用 Unorder 函數可提高性能。 例如,與 Analysis Services 需要保留順序時相比,NonEmpty (MDX) 函數在提供給它的集未經排序時表現地更為出色;盡管使用 SQL Server 2014 Analysis Services (SSAS) 時,查詢處理器會嘗試自動對許多函數(例如 Sum 和 Aggregate)執行此函數。 使用 Unorder 的性能優勢可能僅在包含數百萬元組的非常大的集中才會體現出來。
示例
下面的偽代碼說明了此函數的語法。
NonEmpty (UnOrder (<set_expression>))
141. UserName (MDX)
返回當前連接的域名和用戶名。
語法
UserName [ ( ) ]
注釋
返回值為以下格式的字符串:
domain-name\user-name
示例
下例將返回正在執行查詢的用戶的用戶名。
WITH MEMBER Measures.x AS UserName
SELECT Measures.x ON COLUMNS
FROM [Adventure Works]
142. ValidMeasure (MDX)
在返回指定元組的結果時,通過將不適用的維度強制到“全部”級別(如果是不可聚合的,則為默認成員)來返回多維數據集中的度量值。
語法
ValidMeasure(Tuple_Expression)
參數
Tuple_Expression
返回元組的有效多維表達式 (MDX)。
注釋
ValidMeasure 函數返回元組的值,並且忽略與元組返回其值的度量值的度量值組無關的屬性。 出於以下兩個原因,屬性可與度量值無關:
屬性的維度與元組中度量值的度量值組無關。
屬性的維度與度量值的度量值組無關,但粒度屬性不是鍵屬性,並且粒度屬性與元組中的屬性沒有直接關系。
該函數指定的行為是默認服務器端行為,並且受度量值組對象的 IgnoreUnrelatedDimensions 屬性控制。
對於具有粒度的指定元組中的每個屬性(也就是說,元組中的成員不是“全部”成員),其當前坐標按如下方式移動:
與指定屬性成員相關的屬性移動至與當前成員共存的成員。
與指定屬性成員相關的屬性移動至“全部”成員(如果層次結構是不可聚合的,則為默認成員)。
不相關的屬性移動至“全部”成員(根據度量值)。
示例
下面的查詢顯示如何使用 ValidMeasure 函數來覆蓋 IgnoreUnrelatedDimensions 屬性的行為。 在 Adventure Works 多維數據集中,Sales Targets 度量值組將 IgnoreUnrelatedDimensions 設置為 False;因為 Date 維度在 Calendar Quarter 粒度聯接到此度量值組,所以這意味着,Sales Quota 度量值默認情況下將在 Calendar Quarter 下返回 Null(盡管在 MDX 腳本中也存在將值向下分配給 Month 級別的計算)。 在計算度量值中使用 ValidMeasure 函數可用於使 Sales Quota 度量值的行為就像 IgnoreUnrelatedDimensions 設置為 True 一樣並且強制 Sales Quota 顯示當前 Calendar Quarter 的值。
WITH MEMBER MEASURES.VTEST AS VALIDMEASURE([Measures].[Sales Amount Quota])
SELECT {[Measures].[Sales Amount Quota], MEASURES.VTEST} ON 0,
[Date].[Calendar].MEMBERS ON 1
FROM [Adventure Works]
同樣,Sales Targets 度量值組與 Promotion 維度完全沒有任何關系,因此,在 Promotion 上任何層次結構的“全部”成員之下,它將返回 Null。此外,可以通過使用 ValidMeasure 更改此行為:
WITH MEMBER MEASURES.VTEST AS VALIDMEASURE([Measures].[Sales Amount Quota])
SELECT {[Measures].[Sales Amount Quota], MEASURES.VTEST} ON 0,
[Promotion].[Promotions].members ON 1
FROM [Adventure Works]
143.Value (MDX)
返回查詢上下文中的屬性層次結構的當前成員與 Measures 維度的當前成員的交集的值。
語法
Member_Expression[.Value]
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋
Value 函數以字符串形式返回指定成員的值。 由於成員的值是成員的默認屬性,並且如果未指定其他值則其值為返回的成員值,因此 Value 參數是可選的。 有關成員屬性的詳細信息,請參閱內部成員屬性 (MDX)和用戶定義的成員屬性 (MDX)。
示例
下例將返回成員值並顯式返回該成員的名稱。
WITH MEMBER [Date].[Calendar].NumericValue as [Date].[Calendar].[July 1, 2001].Value
MEMBER [Date].[Calendar].MemberName AS [Date].[Calendar].[July 1, 2001].Name
SELECT {[Date].[Calendar].NumericValue, [Date].[Calendar].MemberName} ON 0
from [Adventure Works]
下例將以軸上成員的默認返回值返回成員值。
SELECT {[Date].[Calendar].[July 1, 2001]} ON 0
from [Adventure Works]
144. Var (MDX)
返回用無偏差總體公式(除以 n)對集計算數值表達式而求得的樣本方差。
語法
Var(Set_Expression [ ,Numeric_Expression ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression
有效的數值表達式,通常為返回數值的單元坐標多維表達式 (MDX)。
注釋
Var 函數返回對指定的集計算指定的數值表達式而求得的無偏差方差。
Var 函數使用無偏差總體公式,而 VarP 函數使用有偏差總體公式。
145. Variance (MDX)
Var 函數的別名。
146. VarianceP (MDX)
VarP 函數的別名。
147. VarP
返回數值表達式用有偏差總體公式(除以 n-1)對集求得的總體方差。
語法
VarP(Set_Expression [ ,Numeric_Expression ] )
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Numeric_Expression
返回數字的有效數值表達式,通常為單元坐標的多維表達式 (MDX)。
注釋
VarP 函數返回指定的數值表達式對指定的集求得的有偏差方差。
VarP 函數使用有偏差總體公式,而 Var 函數使用無偏差總體公式。
148. VisualTotals (MDX)
返回通過動態計算指定集內子成員的合計而生成的集,可以選擇在得到的結果集內為父成員名稱應用某種模式。
語法
VisualTotals(Set_Expression[,Pattern])
參數
Set_Expression
返回集的有效多維表達式 (MDX)。
Pattern
集中父成員的有效字符串表達式,包含星號 (*) 作為父名稱的替代字符。
注釋
指定的集表達式可以指定包含單個維度內任何級別成員(通常是具有祖先-后代關系的成員)的集。 VisualTotals 函數計算指定集中子成員值的總和,並在計算結果總和時忽略未包括在集中的子成員。 直觀地對以層次結構順序排序的集計算總和。 如果集中成員的順序違背了層次結構,則結果就不是直觀合計了。 例如,VisualTotals (USA, WA, CA, Seattle) 不將 WA 返回為 Seattle,而返回 WA、CA 和 Seattle 的值,然后計算這些值的總和作為 USA 的直觀合計,同時計算兩次 Seattle 的銷售額。
| 注意 |
| 將 VisualTotals 函數應用於與度量值無關或在度量值組粒度以下的維度成員會導致各值被替換為空值。 |
Pattern 是可選的,可指定合計標簽的格式。 Pattern 需要用星號 (*) 作為父成員的替代字符,而字符串中的剩余文本出現在與父名稱相串聯的結果中。 若要顯示星號,請使用兩個星號 (**)。
示例
下面的示例根據所指定的一個后代 - 7 月,返回 2001 日歷年第三季度的直觀合計。
SELECT VisualTotals
({[Date].[Calendar].[Calendar Quarter].&[2001]&[3]
,[Date].[Calendar].[Month].&[2001]&[7]}) ON 0
FROM [Adventure Works]
下面的示例返回 Product 維度中 Category 屬性層次結構的 [All] 成員及其四個子級中的兩個。 對 Internet Sales Amount 度量值的 [All] 成員返回的合計是僅針對 Accessories 和 Clothing 成員的合計。 另外,模式參數用於指定 [All Products] 列的標簽。
SELECT
VisualTotals
({[Product].[Category].[All Products]
,[Product].[Category].[Accessories]
,[Product].[Category].[Clothing]}
, '* - Visual Total'
) ON Columns
, [Measures].[Internet Sales Amount] ON Rows
FROM [Adventure Works]
149. Wtd (MDX)
按照時間維度中的周級別的約束,從給定成員所在的級別返回一組同級成員,從第一個同級成員開始到給定成員為止。
語法
Wtd( [ Member_Expression ] )
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋
如果未指定成員表達式,則默認值為第一個層次結構的當前成員並且具有度量值組中 Time (Time.CurrentMember) 類型的第一個維度中的 Weeks 類型的級別。
Wtd 函數是 PeriodsToDate 函數的快捷函數,它將后者的級別設置為 Weeks。 也就是說,Wtd(Member_Expression) 等效於PeriodsToDate(Week_Level_Expression,Member_Expression)。
150. Ytd (MDX)
按照 Time 維度中的 Year 級別的約束,從與給定成員相同的級別中返回同級成員的集,從第一個同級成員開始到給定成員為止。
語法
Ytd( [ Member_Expression ] )
參數
Member_Expression
返回成員的有效多維表達式 (MDX)。
注釋
如果未指定成員表達式,則默認值為第一個層次結構的當前成員並且具有度量值組中 Time 類型的第一個維度中的 Years 類型的級別。
在級別所基於的屬性層次結構的 Type 屬性設置為 Years 的情況下,Ytd 函數是 PeriodsToDate 函數的快捷函數。 也就是說,Ytd(Member_Expression) 等效於 PeriodsToDate(Year_Level_Expression,Member_Expression)。 請注意,在 Type 屬性設置為FiscalYears 時,此函數將不起作用。
示例
下面的示例將從 Adventure Works 多維數據集中返回在 2003 日歷年度的前八個月(包含在 Date 維度中)聚合的 Measures.[Order Quantity]成員之和。
WITH MEMBER [Date].[Calendar].[First8MonthsCY2003] AS
Aggregate(
YTD([Date].[Calendar].[Month].[August 2003])
)
SELECT
[Date].[Calendar].[First8MonthsCY2003] ON COLUMNS,
[Product].[Category].Children ON ROWS
FROM
[Adventure Works]
WHERE
[Measures].[Order Quantity]
通常在使用 Ytd 時不指定參數,這意味着 CurrentMember (MDX) 函數將在報表中顯示本年度至今的連續累積合計,如以下查詢中所示:
WITH MEMBER MEASURES.YTDDEMO AS
AGGREGATE(YTD(), [Measures].[Internet Sales Amount])
SELECT {[Measures].[Internet Sales Amount], MEASURES.YTDDEMO} ON 0,
[Date].[Calendar].MEMBERS ON 1
FROM [Adventure Works]
