5

我很难理解如何过滤掉多维表达式的结果。

这是我的数据库模式。

一个简单的数据库模式

这是我的数据。

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([Stock])
  • 表部分:PartStock:=SUM([Stock])

然后我将多维数据集部署到服务器。

通过运行以下 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、Processor 和 Adapter 引用了第 1 项和第 4 项,因此结果将被限制为它们,结果应该是这样的:

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

我究竟做错了什么?

4

1 回答 1

0

MDX 对我来说是未知的,但这是一个纯 SQL 解释。

你的模型实际上是这样的:

链接到图片

要获得具有特定 [Status] 的 [Parts] 的 [Items],我会使用这个纯 SQL:

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

我可以在您的示例中看到您使用 FROM [Model],但您的设置中没有名为 Model 的表 - 因此这可能是您应该研究的 MDX 视图或某些功能。对于 [Model] 视图,表之间的 JOIN 可能是错误的。

于 2016-01-06T19:52:10.997 回答