如何在计算mdx中对sum函数进行过滤?

时间:2015-09-29 08:37:59

标签: sql sql-server ssas mdx olap

我想在ssas中的olap cube中进行计算。这将是" avg sku by outlet"。

有我的表达:

CREATE 
  MEMBER CURRENTCUBE.[Measures].[Avg Prod Art Id Distinct Count By OldcID] AS 
    Avg
    (
      Descendants
      (
        [dimOutlets].[OLDC ID].CurrentMember
       ,[dimOutlets].[OLDC ID].[OLDC ID]
      )
     ,[Measures].[Prod Art Id Distinct Count]
    );

它运行正常,但当我尝试添加一些逻辑并出现问题时。我想按状态或类型过滤一些文档。

这就是我所做的:

CREATE 
  MEMBER CURRENTCUBE.[Measures].[test Calculated Member] AS 
    Avg
    (
      NonEmpty
      (
        NonEmpty
        (
          {
            [dimInvoice].[Doc Type].&[0]
           ,[dimInvoice].[Doc Type].&[1]
           ,[dimInvoice].[Doc Type].&[2]
           ,[dimInvoice].[Doc Type].&[3]
           ,[dimInvoice].[Doc Type].&[7]
           ,[dimInvoice].[Doc Type].[All].UnknownMember
          }
         ,{
            [dimInvoice].[Status].&[1]
           ,[dimInvoice].[Status].&[2]
           ,[dimInvoice].[Status].&[3]
           ,[dimInvoice].[Status].&[4]
           ,[dimInvoice].[Status].[All].UnknownMember
          }
        )
       ,Descendants
        (
          [dimOutlets].[OLDC ID].CurrentMember
         ,[dimOutlets].[OLDC ID].[OLDC ID]
        )
      )
     ,[Measures].[Prod Art Id Distinct Count]
    ) ;

当我尝试在visual studio中的浏览器上测试时,它会长时间思考并且我没有收到回复。

有最佳和快速的方法吗?

PS。抱歉我的英文。

2 个答案:

答案 0 :(得分:1)

这是工作(感谢whytheq),但慢慢地,现在我找到解决方案来更快地完成这项工作。想知道是否有可能对立方体进行测量?

   CREATE DYNAMIC SET CURRENTCUBE.[DocTypesSet]
     AS nonempty
            (
              {
                [dimInvoice].[Doc Type].&[0]
               ,[dimInvoice].[Doc Type].&[1]
               ,[dimInvoice].[Doc Type].&[2]
               ,[dimInvoice].[Doc Type].&[3]
               ,[dimInvoice].[Doc Type].&[7]
               ,[dimInvoice].[Doc Type].[All].UnknownMember
              }
             *{
                [dimInvoice].[Status].&[1]
               ,[dimInvoice].[Status].&[2]
               ,[dimInvoice].[Status].&[3]
               ,[dimInvoice].[Status].&[4]
               ,[dimInvoice].[Status].[All].UnknownMember
              }
             *Descendants
                (
                  [dimOutlets].[OLDC ID].CurrentMember
                 ,[dimOutlets].[OLDC ID].[OLDC ID]
                )
            ) 

  CREATE MEMBER CURRENTCUBE.[Measures].[test msr]
  AS Sum(DocTypesSet,[Measures].[Prod Art Id Distinct Count] )

答案 1 :(得分:0)

可能将该组移动到命名集中:

CREATE 
  SET CURRENTCUBE.[DocTypes] AS 
    NonEmpty
      (
        NonEmpty
        (
          {
            [dimInvoice].[Doc Type].&[0]
           ,[dimInvoice].[Doc Type].&[1]
           ,[dimInvoice].[Doc Type].&[2]
           ,[dimInvoice].[Doc Type].&[3]
           ,[dimInvoice].[Doc Type].&[7]
           ,[dimInvoice].[Doc Type].[All].UnknownMember
          }
         ,{
            [dimInvoice].[Status].&[1]
           ,[dimInvoice].[Status].&[2]
           ,[dimInvoice].[Status].&[3]
           ,[dimInvoice].[Status].&[4]
           ,[dimInvoice].[Status].[All].UnknownMember
          }
        )
       ,Descendants
        (
          [dimOutlets].[OLDC ID].CurrentMember
         ,[dimOutlets].[OLDC ID].[OLDC ID]
        )
      );


CREATE 
  MEMBER CURRENTCUBE.[Measures].[test Calculated Member] AS 
    Avg
    (
      [DocTypes]
     ,[Measures].[Prod Art Id Distinct Count]
    ) ;