2017-08-31 81 views
0

我无法摆脱下列MDX输出查询中的空行。 我正在显示特定维度的最后12个月收入,其层次结构中有4个级别。 我正在筛选此输出基于where语句中的其他维度。MDX无法过滤掉空行

我试过NON EMPTY,NonEmpty(),FILTER等,但我无法得到它的工作。

Please look at this image.

WITH 
    MEMBER [Measures].[Member Full Path] AS 
    [Revenuedim].CurrentMember.UniqueName 
    MEMBER [Measures].[Member Ordinal] AS 
    [Revenuedim].CurrentMember.Ordinal 
SELECT 
    NON EMPTY 
    Hierarchize 
    (
     Union 
     (
     CrossJoin 
     (
      [Measures].[BeaconAmount_USD] 
     ,LastPeriods 
      (12 
      ,[Date.YQM].LastChild.LastChild.LastChild 
     ) 
     ) 
     ,CrossJoin 
     (
      { 
      [Measures].[Member Ordinal] 
      ,[Measures].[Member Full Path] 
      } 
     ,[Date.YQM].[2018] 
     ) 
    ) 
    ,POST 
    ) ON COLUMNS 
,NON EMPTY 
    Order 
    (
     ToggleDrillState 
     (
     ToggleDrillState 
     (
      ToggleDrillState 
      (
      ToggleDrillState 
      (
       {[Revenuedim].[All CPs]} 
      ,{} 
      ) 
      ,{} 
     ) 
     ,{} 
     ) 
     ,{} 
    ) 
    ,[Measures].[BeaconAmount_USD] 
    ,DESC 
    ) ON ROWS 
FROM [Revenue_CP] 
WHERE 
    [Revenuedim_SOB].[TCS BPO Chile S.A.]; 
+1

@AliMajedHA请不要加'感谢'一篇文章,[它被认为是噪音,应该避免](https://meta.stackoverflow.com/a/260778/4244993) – jmattheis

回答

1

你可以尝试添加一个条件到自定义的措施:

WITH 
    MEMBER [Measures].[Member Full Path] AS 
    [Revenuedim].CurrentMember.UniqueName 
    MEMBER [Measures].[Member Ordinal] AS 
    [Revenuedim].CurrentMember.Ordinal 
... 
... 

所以IIF基于一个元组例如([Revenuedim] .CurrentMember,[Date.YQM] [2018])可能会做它:

WITH 
    MEMBER [Measures].[Member Full Path] AS 
    IIF(
    ([Revenuedim].CurrentMember, [Date.YQM].[2018]) = 0 
    ,NULL 
    ,[Revenuedim].CurrentMember.UniqueName 
    ) 
    MEMBER [Measures].[Member Ordinal] AS 
    IIF(
    ([Revenuedim].CurrentMember, [Date.YQM].[2018]) = 0 
    ,NULL 
    ,[Revenuedim].CurrentMember.Ordinal 
    ) 
... 
... 
+0

不,不幸的是,这是行不通的。相反,它仅在序号列的所有CP级别(Revenuedim的所有级别)上显示空白,因为该单元字面上为0(=常数为0 ...) – user1186098

+0

但它与事实有关计算出来的度量总是存在的......因为将它们排除在外,它不会显示空行。我该如何解决这个问题:(?? – user1186098

0

终于找到我需要的东西......

WITH 
    MEMBER [Date.YQM].[Last12M] AS 
    Aggregate( 
    Tail([Date.YQM].[Month].Members,12)) 

    MEMBER [Measures].[Member Full Path] AS 
    IIF(
    isEmpty ([Revenuedim].CurrentMember * [Date.YQM].[2017] * [Measures].[BeaconAmount_USD] * [Revenuedim_SOB].[TCS BPO Chile S.A.]) 
     ,NULL 
    ,[Revenuedim].CurrentMember.UniqueName 
    ) 
    MEMBER [Measures].[Member Ordinal] AS 
    IIF(
    isEmpty([Revenuedim].CurrentMember * [Date.YQM].[2017] * [Measures].[BeaconAmount_USD] * [Revenuedim_SOB].[TCS BPO Chile S.A.]) 
    ,NULL 
    ,[Revenuedim].CurrentMember.Ordinal 
    ) 

     SELECT 
     NON EMPTY 
     Hierarchize(

     Union(
       Crossjoin([Measures].[BeaconAmount_USD] ,  
       LastPeriods(12,[Date.YQM].lastChild.lastChild.lastChild) 
       ) 
      , 
      Crossjoin({[Measures].[Member Ordinal], [Measures].[Member Full Path]}, [Date.YQM].[Last12M]) 
     ) 
     ,POST) ON COLUMNS, 

     NON EMPTY 
      ORDER(
      TOGGLEDRILLSTATE(
       TOGGLEDRILLSTATE(
        TOGGLEDRILLSTATE(
         TOGGLEDRILLSTATE(
        {[Revenuedim].[All CPs]}, 
       {[Revenuedim].[All CPs]} 
      ) 
      , {} 
     ), {} 
     ), {} 
    ) 
,[Measures].[BeaconAmount_USD], 
DESC) 
ON ROWS from [Revenue_CP] 
where [Revenuedim_SOB].[TCS BPO Chile S.A.] 
+0

blimey - 我的尝试的一些鼓励会受到赞赏 - 我的答案当然有帮助? – whytheq

+0

为什么你在'IsEmpty'函数内进行交叉连接?交叉连接产生单个元组集 - 所以你可能只是使用元组? – whytheq