在WHERE子句中使用Date和Parent Child进行SSAS 2008R2 mdx查询

时间:2013-03-20 07:34:45

标签: ssas mdx

我使用AdventureWorksDW2008R2 db和Adventure Works 2008R2 olap与Adventure Works多维数据集进行olap的新手。

我想根据使用T-SQL的结果编写一个mdx查询: -

select 
  FactResellerSales.OrderDateKey, 
  SUM(FactResellerSales.SalesAmount) as 'Reseller Sales Amount' 

from FactResellerSales with (nolock)

inner join DimEmployee on DimEmployee.EmployeeKey = FactResellerSales.EmployeeKey

where 
   FactResellerSales.OrderDateKey=20070901
   and DimEmployee.FirstName='Jae' and DimEmployee.LastName='Pak'

group by FactResellerSales.OrderDateKey

结果:

OrderDateKey      Reseller Sales Amount
20070901          415046.9295

使用mdx查询,我只能执行以下操作: -

SELECT [Measures].[Reseller Sales Amount] ON COLUMNS,

NON EMPTY [Date].[Date].members ON ROWS

FROM [Adventure Works]

WHERE [Employee].[Employees].&[291]

结果是从2006年7月1日到2008年6月1日,每天都有相应的经销商销售额摘要。

我的问题是,在mdx查询WHERE子句中我该怎么做:

a)按日期过滤,即2007年9月1日?它不接受日期维度。

b)员工使用“Jae B. Pak”名称进行过滤,该名称是多级层次结构,而不是使用员工键291。

1 个答案:

答案 0 :(得分:0)

您需要将员工维度与您感兴趣的日期交叉加入。

以下内容将为您提供值;

SELECT { [Measures].[Reseller Sales Amount] } ON COLUMNS
FROM [Adventure Works]
WHERE ({ [Employee].[Employee Department].[Employee].[Jae B. Pak]},
         {[Date].[Date].&[20070901] }) 

MDX中的where子句是一个切片器,其行为与SQL where子句不同(值得一读)。以下行上的交叉连接将在不使用切片器的情况下提供相同的结果,但会在结果中包含维度属性。

SELECT { [Measures].[Reseller Sales Amount] } ON COLUMNS,
CROSSJOIN({ [Employee].[Employee Department].[Employee].[Jae B. Pak]}, {[Date].[Date].&[20070901] }) ON Rows
FROM [Adventure Works]

最后,如果你想根据'SQL Like'返回,你可以使用instr(以下给出所有员工名称中包含ja的信息)

SELECT [Measures].[Reseller Sales Amount] ON COLUMNS,
{FILTER([Employee].[Employees].allmembers,
instr([Employee].[Employees].currentmember.member_caption,'Ja')>0) *  [Date].[Date].&[20070901]} ON ROWS
FROM [Adventure Works] 

希望能让你前进