2013-03-20 65 views
0

我新手在olap中使用AdventureWorksDW2008R2數據庫和Adventure Works 2008R2 olap與Adventure Works多維數據集。SSAS 2008R2 mdx查詢使用WHERE子句中的日期和父子

我想按結果使用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日,各自的經銷商銷售額總結ch day。

我的問題是,MDX查詢中的WHERE子句,我該怎麼辦:

一)按日期篩選這是2007年9月1日?它不接受日期維度。

二)員工利用其在多層次結構,而不是使用EmployeeKey是291

+0

你能否提供關於員工維度結構的更多信息?有維度可能用於名稱的一些屬性屬性? – 2013-03-20 19:30:27

+0

我的歉意,我是一個新手。如何提供有關員工維度結構的信息?這是微軟提供的示例多維數據集。 – user2189798 2013-03-21 02:51:17

回答

0

您需要CROSSJOIN,日期爲員工維度的名稱「宰B.白」你篩選有興趣。

以下將給你的價值;

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] 

希望這將得到你要去