在WHERE子句中使用日期和父子项的SSAS 2008R2 mdx查询
我是使用AdventureWorksDW2008R2 db和AdventureWorks2008R2 olap与AdventureWorks多维数据集的olap新手 我想使用T-SQL根据结果编写mdx查询:-在WHERE子句中使用日期和父子项的SSAS 2008R2 mdx查询,ssas,mdx,Ssas,Mdx,我是使用AdventureWorksDW2008R2 db和AdventureWorks2008R2 olap与AdventureWorks多维数据集的olap新手 我想使用T-SQL根据结果编写mdx查询:- select FactResellerSales.OrderDateKey, SUM(FactResellerSales.SalesAmount) as 'Reseller Sales Amount' from FactResellerSales with (nolock
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的EmployeeKey。您需要将员工维度与您感兴趣的日期交叉连接 以下内容将为您提供正确的值
SELECT { [Measures].[Reseller Sales Amount] } ON COLUMNS
FROM [Adventure Works]
WHERE ({ [Employee].[Employee Department].[Employee].[Jae B. Pak]},
{[Date].[Date].&[20070901] })
MDX中的where子句是一个切片器,其行为不同于SQLWHERE子句(值得一读)。下面的行交叉连接将提供相同的结果,而不使用切片器,但将在结果中包含维度属性
SELECT { [Measures].[Reseller Sales Amount] } ON COLUMNS,
CROSSJOIN({ [Employee].[Employee Department].[Employee].[Jae B. Pak]}, {[Date].[Date].&[20070901] }) ON Rows
FROM [Adventure Works]
最后,如果您希望基于“类似SQL”的返回,可以使用instr(以下给出了名称中包含ja的所有员工)
希望这能让你继续你能提供更多关于员工维度结构的信息吗?维度是否有一些可能用于名称的属性属性?对不起,我是新手。如何提供有关员工维度结构的信息?它是Microsoft提供的示例多维数据集。
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]