2015-11-03 95 views
5

我很難理解如何濾除多維表達的結果。通過多對多表格篩選

這是我的數據庫模式。

A simple database schema

這是我的數據。

Manufacturer 
╔════╦═══════════════════╗ 
║ Id ║  Name  ║ 
╠════╬═══════════════════╣ 
║ 1 ║ Awesome Computers ║ 
║ 2 ║ TailSpin Toys  ║ 
╚════╩═══════════════════╝ 

Item 
╔════╦═════════╦════════════════╦═══════╗ 
║ Id ║ Name ║ ManufacturerId ║ Stock ║ 
╠════╬═════════╬════════════════╬═══════╣ 
║ 1 ║ PC  ║    1 ║ 40 ║ 
║ 2 ║ Server ║    1 ║ 10 ║ 
║ 3 ║ STB  ║    2 ║ 80 ║ 
║ 4 ║ Console ║    2 ║ 50 ║ 
╚════╩═════════╩════════════════╩═══════╝ 

Part 
╔════╦══════════════════╦════════╦══════════╦═══════╗ 
║ Id ║  Name  ║ ItemId ║ StatusId ║ Stock ║ 
╠════╬══════════════════╬════════╬══════════╬═══════╣ 
║ 1 ║ MBO    ║  1 ║  1 ║ 100 ║ 
║ 2 ║ Processor  ║  1 ║  1 ║ 100 ║ 
║ 3 ║ Server MBO  ║  2 ║  2 ║ 20 ║ 
║ 4 ║ Server processor ║  2 ║  2 ║ 20 ║ 
║ 5 ║ Main box   ║  3 ║  2 ║ 40 ║ 
║ 7 ║ Adapter   ║  3 ║  3 ║ 30 ║ 
║ 8 ║ Controller  ║  4 ║  2 ║ 40 ║ 
║ 10 ║ Adapter   ║  4 ║  1 ║ 60 ║ 
║ 11 ║ Memory card  ║  4 ║  2 ║ 80 ║ 
╚════╩══════════════════╩════════╩══════════╩═══════╝ 

Status 
╔════╦═════════════╗ 
║ Id ║ Name  ║ 
╠════╬═════════════╣ 
║ 1 ║ No data  ║ 
║ 2 ║ Available ║ 
║ 3 ║ Unavailable ║ 
╚════╩═════════════╝ 

我將所有東西都導入到表格模型解決方案中。 在此之後,我創建了兩個措施:

  • 表編號:ItemStock:= SUM([股票])
  • 表部分:PartStock:= SUM([股票])

然後我將多維數據集部署到服務器。

通過運行下面的MDX查詢...

SELECT 
    NON EMPTY { 
     [Part].[Name].CHILDREN 
    } ON ROWS, 
    { 
     [Measures].[PartStock] 
    } ON COLUMNS 
FROM [Model] 
WHERE (
    { 
     [Status].[Id].&[1] 
    } 
) 

...我得到這個結果集...

╔═══════════╦═══════════╗ 
║   ║ PartStock ║ 
╠═══════════╬═══════════╣ 
║ Adapter ║  60 ║ 
║ MBO  ║  100 ║ 
║ Processor ║  100 ║ 
╚═══════════╩═══════════╝ 

...這是確定。

然而,在運行此MDX查詢時...

SELECT 
    NON EMPTY { 
     [Item].[Name].CHILDREN 
    } ON ROWS, 
    { 
     [Measures].[ItemStock] 
    } ON COLUMNS 
FROM [Model] 
WHERE (
    { 
     [Status].[Id].&[1] 
    } 
) 

...我得到這個結果集...

╔═════════╦═══════════╗ 
║   ║ ItemStock ║ 
╠═════════╬═══════════╣ 
║ Console ║  50 ║ 
║ PC  ║  40 ║ 
║ Server ║  10 ║ 
║ STB  ║  80 ║ 
╚═════════╩═══════════╝ 

我期待的是,在ItemStock表項目將被Part表格過濾爲多對多關係。例如。 MBO,處理器和適配器必須項目1和4的引用,因此其結果必然是制約他們,結果應該會是這樣:

╔═════════╦═══════════╗ 
║   ║ ItemStock ║ 
╠═════════╬═══════════╣ 
║ Console ║  50 ║ 
║ PC  ║  40 ║ 
╚═════════╩═══════════╝ 

我在做什麼錯?

+1

回覆了您發佈到DBA的問題:http://dba.stackexchange.com/questions/119909/filtering-by-many-to-many-table – GregGalloway

回答

0

對於我而言,MDX是未知的,但這裏是一個純粹的SQL解釋。

你的模型實際上是這樣的:

Link to image

要獲得[項目]的[部件]與spesific [狀態]我想用這種純粹的SQL:

SELECT Item.Name 
FROM Item INNER JOIN Part ON Item.Id = Part.ItemID 
WHERE Part.StatusID = 1; 

我可以在您的示例中看到您使用FROM [Model],但在設置中沒有名爲Model的表 - 因此,這可能是VIEW或您應該查看的MDX的某些功能。可能是[模型]視圖中表格之間的JOIN錯誤。