计算空值的最大续集 - mdx查询

时间:2014-01-30 13:31:29

标签: ssas mdx

我想基于此问题创建成员

我有一个产品A正在销售 我想找到连续几天没有销售的最大范围

示例:

第1,2,3天产品不销售,之后,它连续15天销售,第19天它没有卖2天,之后每天都卖出,直到月底

所以我没有出售的最长天数是3

1 个答案:

答案 0 :(得分:0)

以下查询在Microsoft示例多维数据集Adventure Works中提供您想要的内容:

WITH Member Measures.[days without sales] AS
            IIf( [Measures].[Internet Sales Amount] > 0
                , 0
                ,(Measures.[days without sales], [Date].[Calendar].CurrentMember.PrevMember) + 1
               )
     Member Measures.[Max days without sales] AS
            Max( [Date].[Calendar].[Date].Members
                ,Measures.[days without sales]
               )          
SELECT { [Measures].[Max days without sales] }
       ON COLUMNS
  FROM [Adventure Works]
 WHERE [Product].[Product].&[486]

度量days without sales是递归定义的,并返回直到并包括[Date].[Calendar]层次结构的当前成员的天数没有销售。您可能需要调整“不销售”的标准,记住在MDX中,数字比较将NULL视为0 - 这与SQL不同。 如果每天在此层次结构中有成员,则此度量只能正常工作,即。即这个层次结构中没有间隙。实际上,定义比仅工作几天更为通用:如果您使用[Date].[Calendar].CurrentMember的月份,它将为您提供没有销售的月数等。它适用于层次结构的每个级别。

度量Max days without sales在其定义中不包含产品,它为上下文中的任何内容提供了最大天数(在本例中为WHERE子句中的产品)。

请注意 - 实际上在计算[Date].[Calendar]时,Measures.[Max days without sales]层次结构中的所有日子都存在循环,并且在此之内,递归会再次沿前几天迭代,并且每个单元格都会这样做在结果集中 - 对于大型报告,这可能会很慢。