MDX无法过滤掉空行

时间:2017-08-31 15:20:47

标签: mdx

我无法摆脱以下MDX输出查询中的空行。 我显示了某个维度的最近12个月的收入,其层次结构中有4个级别。 我正在根据where语句中的其他维度过滤此输出。

我已尝试过NON EMPTYNonEmpty()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.];

2 个答案:

答案 0 :(得分:1)

您可以尝试在自定义指标中添加条件:

Sub HourAllocationsRegs()

    Dim StartRow As Integer
    Dim EndRow As Integer
    Dim lngLastRow As Long
    Dim strMyValue As String

    strMyValue = "Employee" 'Value to search for, change as required.
    Sheets("Regs").Select
    lngLastRow = Cells(Rows.Count, "A").End(xlUp).Row 'Search Column A, change as required.

    For i = 2 To lRow Step K - i 'Starts on Row 7 and will jump to the next group according to row of next value
        StartRow = i
        For K = i + 1 To 100 Step 1
            If InStr(1, (Range("A" & i + 1).Value), strMyValue) > 0 Then
                EndRow = K
                Exit For
            End If
        Next
        Rows(Str(StartRow) & ":" & Str(EndRow)).Select
        Selection.Copy
        Sheets(Range("C" & Str(StartRow + 2)).Text).Select
        Range("A1048576").End(xlUp).Offset(1, 0).Select
        ActiveSheet.Paste
    Next

End Sub

所以WITH MEMBER [Measures].[Member Full Path] AS [Revenuedim].CurrentMember.UniqueName MEMBER [Measures].[Member Ordinal] AS [Revenuedim].CurrentMember.Ordinal ... ... 基于元组,例如([Revenuedim] .CurrentMember,[Date.YQM]。[2018])可能会这样做:

IIF

答案 1 :(得分: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.]