编写高级MDX查询

时间:2014-12-17 09:46:59

标签: sql-server-2008 mdx

我使用的是一个多维立方体,其中包含许多维度和度量,用于在SSRS中获取用于创建报告的数据。

这是任务文本:

  • 用户名 - 包括来自& [A Group]的用户和来自维度[Group]的& [B Group],与[Users]维度相关联。;
  • 计算[案例行动] =“A”或[案例行动] =“B”和[原因] =“R”的地方 (包括来自& [A Group]和& [B Group]的所有成员);
  • 排除[案件诉讼] =“A”和[原因] =“R”或[案件诉讼] =“S”的案件;
  • 报告期内的案件数量和报告月份后退13个月的滚动期。
  • 报告日期可以是任何有效日期,也不能是将来的日期。
  • 如果报告日期不是月结束日期,则将生成上个月的报告以及从上个月到后期报告中可用的13个月数据的滚动期。
  • 如果报告日期是月结束日期,则报告将从指定的13个月后生成。

有一个名为[案例计数]的度量,它连接到所需的维度。不知何故,我需要从中获取过滤后的事实,最终结果必须看起来像行上的用户名,月份和案例都依赖于列,显示每个用户聚合的每个月的案例数。

以下是我到目前为止编写的代码:

WITH 
  SET [Report Period] AS 
    Generate
    (
        ParallelPeriod
        (
          [Dim Date].[Calendar Hierarchy].[Calendar Month]
         ,13
         ,StrToMember
          ("[Dim Date].[Calendar Hierarchy].[Calendar Date].[2013-08-30]"
           ,CONSTRAINED
          ).Parent
        )
      : 
        StrToMember
        ("[Dim Date].[Calendar Hierarchy].[Calendar Date].[2014-08-30]"
         ,CONSTRAINED
        ).Parent
     ,{[Dim Date].[Calendar Hierarchy].CurrentMember}
    ) 
  SET [User Name] AS 
    Exists
    (
      [Dim Alert Action Assigned To User].[Group Hierarchy].[User Name].MEMBERS
     ,
        [Report Period]
      * 
        {
          [Dim Group].[Group Name].&[QA Group]
         ,[Dim Group].[Group Name].&[Supervisor Group]
        }
    ) 
  MEMBER [Measures].[Cases] AS 
    CoalesceEmpty
    (
      Aggregate
      (
        {
          [Dim Case Action].[Action Case Alias].&[A]
         ,[Dim Case Action].[Action Case Alias].&[S]
        }
       ,[Measures].[Case Count]
      )
     ,0
    ) 
SELECT 
  {[Report Period] * [Measures].[Cases]} ON 0
 ,{[User Name]} ON 1
FROM [CaseAlerts];

结果必须如下所示:

在行上 - >用户名,

在列上 - >月份和案例计算当前月份。

1 个答案:

答案 0 :(得分:0)

以下两个条件似乎相互矛盾。

Exclude cases where [Case Action] = "A" and [Reason] = "R" or [Case Action] = "S"; 

Count where [Case Action] = "A" or [Case Action] = "B" and [Reason] = "R" (include all member from &[A Group] and &[B Group]); 

我将忽略第一个条件。

应在前端检查以下条件。

Report date can be any valid date and can not be a future date. 

至于其他条件,请检查下面的MDX是否有效。

WITH 
SET CurrentMonth AS
EXISTS(
[Dim Date].[Calendar Hierarchy].[Calendar Month], 
StrToMember
  ("[Dim Date].[Calendar Hierarchy].[Calendar Date].[2013-08-30]"
   ,CONSTRAINED
  )
  )



  SET [Report Period] AS 
   IIF([Dim Date].[Calendar Hierarchy].CurrentMember IS NOT CurrentMonth.LastChild
   , 
         {CurrentMonth.lag(14).lastChild
              : 
          CurrentMonth.lag(1).lastChild}--last month's last date            
     ,        
        {
          ParallelPeriod(
          [Dim Date].[Calendar Hierarchy].[Calendar Month]
         ,13
         ,
        StrToMember
          ("[Dim Date].[Calendar Hierarchy].[Calendar Date].[2013-08-30]"
           ,CONSTRAINED
          )
          )
          :
        StrToMember
          ("[Dim Date].[Calendar Hierarchy].[Calendar Date].[2013-08-30]"
           ,CONSTRAINED
          )
      }  
        )



  SET [User Name] AS 
    Exists
    (
      [Dim Alert Action Assigned To User].[Group Hierarchy].[User Name].MEMBERS
     ,
        [Report Period]
      * 
        {
          [Dim Group].[Group Name].&[QA Group]
         ,[Dim Group].[Group Name].&[Supervisor Group]
        }
    ) 


  MEMBER [Measures].[Cases] AS 
    CoalesceEmpty
    (
      Aggregate
      (
        ({
          [Dim Case Action].[Action Case Alias].&[A]
         ,[Dim Case Action].[Action Case Alias].&[S]
        },  [Dim Case Action].[Reason].&[R])
       ,[Measures].[Case Count]
      )
     ,0
    ) 


SELECT 
  {[Report Period] * [Measures].[Cases]} ON 0
 ,{[User Name]} ON 1
FROM [CaseAlerts];