2016-05-17 64 views
1

我是一名經驗豐富的SQL開發人員,在我的業餘時間嘗試學習MDX。我瞭解如何部署多維數據集並編寫二維查詢。我現在試圖編寫一個三維查詢。我已經部署了一個立方體,如下圖所示多個維度(和啓發本教程:https://www.youtube.com/watch?v=ctUiHZHr-5M):3+維MDX語句

enter image description here

我試圖創建一個使用在派生表三個維度的MDX。在此前的問題中:MDX - 3rd + dimension example needed whytheq提供了一些例子,但是他們錯誤。

我在網上找不到一個單獨的教程,講述如何使用兩個以上的維度,例如頁;部分等我讀過的每一個教程和我購買的書中的每一個例子都使用了簡單的二維示例。因此,要嘗試開始的問題。

例如,我曾嘗試這樣的:

SELECT 
    [full name] ON 0, 
    measures.amount ON 1 
FROM(
    SELECT 
    customer.[full name].members on 0, 
    salesman.[id].members on 1, 
    [Measures].[Amount] on 2 
    FROM [Analysis Services Test] 
); 

的錯誤是: 「查詢(3,10)分析器:爲 'ID' 的語法不正確」

更新 @mxix指出Excel數據透視表只能顯示兩個維度。這不是三維數據透視表的示例(其尺寸爲:推銷員;客戶和汽車)?

enter image description here

+1

您可以加入您試圖查詢和錯誤? – mxix

+0

答案很簡單,我認爲你的問題必須有一些方面,你沒有足夠清楚地告訴我們。請告訴我們您嘗試了什麼,以及您得到了什麼錯誤。當你嘗試WhyTheQ的例子時,你會得到什麼錯誤? –

+0

@Tab Alleman,我已經更新了這個問題。我對此很新。我只是想看看編譯的多維MDX查詢。 – w0051977

回答

1

我不認爲這回答你的問題,但我希望它能幫助。 對於您提供的給定尺寸。首先我想指出的是,大多數客戶端應用程序只能顯示2軸,這就是爲什麼大多數示例都關注於2軸。 SSMS和Excel數據透視表是一些只能顯示2軸的客戶端示例。

你可以查詢更多的軸,但SSMS將無法顯示你,因爲它只能做表格的數據表示。

這是一個有效的MDX查詢:(但如果你嘗試,你應該得到的SSMS的錯誤)

SELECT 
    [Car].[Id].MEMBERS ON COLUMNS, 
    [Time].[Date].MEMBERS ON ROWS, 
    [Salesman].[Id].MEMBERS ON PAGES 
FROM [Analysis Services Test] 
WHERE 
    [Measures].[Amount] 

但是你可以CROSSJOIN在單軸(*)尺寸從您的數據有效2軸表示中的這些尺寸。

SELECT 
    NON EMPTY 
    [Car].[Id].MEMBERS ON COLUMNS 
    NON EMPTY 
    [Time].[Date].MEMBERS * 
    [Salesman].[Id].MEMBERS ON ROWS 
FROM [Analysis Services Test] 
WHERE 
    [Measures].[Amount 

編輯:

樞軸表只有2軸,你必須在2軸,列和行所表示的確3尺寸。 您不應該混用Axis和Dimensions的概念。他們不一樣。

Excel有一個很酷的擴展,你可以在後臺看到MDX查詢。 https://olappivottableextend.codeplex.com/

您會注意到所有生成的查詢都在0(COLUMNS)和1(ROWS)軸上。

+0

我已更新我的問題與您的評論。你可以看一下嗎? – w0051977

+0

您添加的數據透視表與mxix的第二個腳本非常相似 - 將汽車尺寸添加爲行上的另一個交叉連接。因此,它使用2個主要維度(行/列)和切片器(WHERE子句,有時在概念上被認爲是第三維) – whytheq

+0

@mxix - 我們需要多投一票(您的投票?)來創建一個mdx標籤新的文檔站點:http://stackoverflow.com/documentation/mdx/commit – whytheq

3

你張貼的所有查詢有以下錯誤:

select [full name] from (
select customers.[full name].members on rows, 
salesman.id.members on columns, 
measures.amount on pages 
from [Analysis Services Test] 
) as test; 
  1. as test
  2. 的別名,你就沒有在本節select [full name] from (
  3. 你指定的軸使用customers而在屏幕截圖中,我只能看到Customer
  4. 在截圖中我看不到[full name] s Ø我會變成[Customer].[id]

試試這樣說:

SELECT 
    [Customer].[Id].[Id].members ON 0, 
    [measures].[amount] ON 1 
FROM(
    SELECT 
    [Customer].[Id].[Id].members on 0, 
    [Salesman].[Id].[Id].members on 1, 
    [Measures].[Amount] on 2 
    FROM [Analysis Services Test] 
); 

以上(一次工作!)不會真的太多所以儘量是具體的子查詢:

SELECT 
    [Customer].[Id].members ON 0, 
    [measures].[amount] ON 1 
FROM(
    SELECT 
    [Customer].[Id].[Id].[whytheq] on 0, 
    [Salesman].[Id].[Id].[Ian] on 1, 
    [Measures].[Amount] on 2 
    FROM [Analysis Services Test] 
); 

但爲什麼擔心頁面和部分?沒有太多關於它們的文檔,因爲它們沒有被使用。

即使只有兩個維度,事情會變得相當複雜,很快。有很多的例子擺在那裏,拿的克里斯·韋伯的這個腳本:

WITH 
MEMBER MEASURES.[Returning Customers] AS 
COUNT(
NONEMPTY(
NONEMPTY(
[Customer].[Customer].[Customer].MEMBERS 
, [Measures].[Internet Sales Amount]) 
, {[Measures].[Internet Sales Amount]} 
* {NULL : [Date].[Calendar].CURRENTMEMBER.PREVMEMBER} 
) 
) 
MEMBER MEASURES.[New Customers] AS 
[Measures].[Customer Count] – MEASURES.[Returning Customers] 
SELECT 
{[Measures].[Customer Count] 
, MEASURES.[Returning Customers] 
, MEASURES.[New Customers]} ON 0, 
[Date].[Calendar].[Calendar Year].MEMBERS ON 1 
FROM [Adventure Works]; 

https://blog.crossjoin.co.uk/?s=mdx+new+and+returning

+0

感謝發佈。我得到的第一個錯誤是:「字符串」中沒有找到'[customers]',所以我糾正了這個問題,然後:'字符串'中找不到'[customers]',所以我糾正了那麼,當字符串「」中沒有找到「'[Sales Amount]」,所以我糾正了它,現在它說:「」Query(6,5)MEMBERS函數期望一個參數的層次表達式。 – w0051977

+0

我更改爲您使用的名稱 – whytheq

+0

謝謝,我試過了第二個查詢,迴應是:「字符串[customers]時,未找到維度'[customers]'」。 [全名]被解析了,「我糾正了這個錯誤,現在錯誤是:」uery(6,5)MEMBERS函數期望一個參數的層次表達式。 「 – w0051977