如果单个多维表达式 (MDX) 查询只需要计算成员,则可以使用 WITH 关键字定义该计算成员。 使用 WITH 关键字创建的计算成员在查询完成运行后不再存在。
如本主题中所述,WITH 关键字的语法相当灵活,甚至允许计算成员基于另一个计算成员。
注释
有关计算成员的详细信息,请参阅 在 MDX (MDX) 中生成计算成员。
WITH 关键字语法
使用以下语法将 WITH 关键字添加到 MDX SELECT 语句:
[ WITH <SELECT WITH clause> [ , <SELECT WITH clause> ... ] ] SELECT [ * | ( <SELECT query axis clause> [ , <SELECT query axis clause> ... ] ) ]FROM <SELECT subcube clause> [ <SELECT slicer axis clause> ][ <SELECT cell property list clause> ]
<SELECT WITH clause> ::=
( [ CALCULATED ] MEMBER <CREATE MEMBER body clause>) | <CREATE MEMBER body clause> ::= Member_Identifier AS 'MDX_Expression'
[ <CREATE MEMBER property clause> [ , <CREATE MEMBER property clause> ... ] ]
<CREATE MEMBER property clause> ::=
( MemberProperty_Identifier = Scalar_Expression )
在 WITH 关键字的语法中,Member_Identifier 值是计算成员的完全限定名称。 此完全限定的名称包括与计算成员关联的维度或级别。 该值 MDX_Expression 在计算表达式值后返回计算成员的值。 可以选择性地为计算成员指定基本单元格属性的值,方式是通过在MemberProperty_Identifier参数中提供单元格属性的名称,并在Scalar_Expression参数中提供该属性的具体值。
WITH 关键字示例
以下 MDX 查询定义了一个计算成员,[Measures].[Special Discount]用于根据原始折扣金额计算特殊折扣。
WITH
MEMBER [Measures].[Special Discount] AS
[Measures].[Discount Amount] * 1.5
SELECT
[Measures].[Special Discount] on COLUMNS,
NON EMPTY [Product].[Product].MEMBERS ON Rows
FROM [Adventure Works]
WHERE [Product].[Category].[Bikes]
还可以在层次结构中的任何点创建计算成员。 例如,以下 MDX 查询为一个假设的 Sales 数据立方体定义了 [BigSeller] 这个计算成员。 此计算成员用于确定某指定商店的啤酒和葡萄酒单位销售是否达到至少 100.00。 但是,查询创建的[BigSeller]计算成员不是作为[Product]维度的子成员,而是作为[Beer and Wine]成员的子成员。
WITH
MEMBER [Product].[Beer and Wine].[BigSeller] AS
IIf([Product].[Beer and Wine] > 100, "Yes","No")
SELECT
{[Product].[BigSeller]} ON COLUMNS,
Store.[Store Name].Members ON ROWS
FROM Sales
计算成员不必只依赖于多维数据集中的现有成员。 计算成员也可以基于在同一 MDX 表达式中定义的其他计算成员。 例如,以下 MDX 查询使用在第一个计算成员[Measures].[Special Discount]中创建的值来生成第二个计算成员的值。 [Measures].[Special Discounted Amount]
WITH
MEMBER [Measures].[Special Discount] AS
[Measures].[Discount Percentage] * 1.5,
FORMAT_STRING = 'Percent'
MEMBER [Measures].[Special Discounted Amount] AS
[Measures].[Reseller Average Unit Price] * [Measures].[Special Discount],
FORMAT_STRING = 'Currency'
SELECT
{[Measures].[Special Discount], [Measures].[Special Discounted Amount]} on COLUMNS,
NON EMPTY [Product].[Product].MEMBERS ON Rows
FROM [Adventure Works]
WHERE [Product].[Category].[Bikes]