0

私は、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) 291 の EmployeeKey を使用する代わりに、複数レベルの階層にある「Jae B. Pak」という名前を使用して、Employee でフィルター処理します。

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 に答える