MDX WHERE与FILTER选项

时间:2014-05-28 12:52:28

标签: ssas mdx cube

我有一个查询,我需要进行一些过滤。我可以在子多维数据集中执行此操作,但我想知道是否可以在没有子多维数据集的WHERE子句中执行此操作。我认为这个解决方案会更快/更清洁。我需要在上个月过滤出IB> 0的产品型号,这是我目前为止的解决方案(只是查询的一部分):

SELECT  {[Measures].[AFR],[Measures].[IB]} ON COLUMNS,
([dim_ProductModel].[ODM].children)*[Dim_Date].[Date Full].children  ON ROWS 
FROM 
(
    SELECT 
FILTER([dim_ProductModel].[Product Model].children,
([Measures].[IB]*[Dim_Date].[Date Full].&[2014-04-01]>0)) ON COLUMNS FROM
[cub_dashboard_spares]
)

但是,我更喜欢在没有子查询的情况下将它放在一个查询中(虽然它不起作用):

SELECT  {[Measures].[AFR],[Measures].[IB]} ON COLUMNS,
([dim_ProductModel].[ODM].children)*[Dim_Date].[Date Full].children  ON ROWS 
FROM 
[cub_dashboard_spares]
WHERE FILTER([dim_ProductModel].[Product Model].children,
([Measures].[IB]*[Dim_Date].[Date Full].&[2014-04-01]>0))

我收到一些错误消息: 他的MDX函数CURRENTMEMBER失败,因为...的坐标包含一个..

我基本上理解为什么他不接受是在WHERE子句中我应该更具体但我想知道是否有可能重写它以使其有效。

我不希望ProductModel出现在结果集中。

1 个答案:

答案 0 :(得分:0)

SELECT  {[Measures].[AFR],[Measures].[IB]} ON COLUMNS,
([dim_ProductModel].[ODM].children)*[Dim_Date].[Date Full].children  ON ROWS 
FROM 
[cub_dashboard_spares]
WHERE 
   ({[dim_ProductModel].[Product Model].children},
    [Measures].[IB],
    PERIODSTODATE( 
      [Dim_Date].[Date Full], //<<needs to be a level from your Dim_date
      [Dim_Date].[Date Full].&[2014-04-01])  //<<needs to be a member from the levelyou have used in above argument
      )