我使用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。
答案 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]
希望能让你前进