0

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

我想使用 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 的 EmployeeKey。

4

1 回答 1

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] 

希望这会让你继续前进

于 2013-03-24T21:09:57.613 回答