MDX - 销售超过30天

时间:2011-07-28 09:13:20

标签: ssas mdx measure

我想让产品在30天内零销售。例如。以下是我的预期结果: 商店,产品,天 Store1,product1,33 Store1,product2,100 Store2,product5,96 Store34,product14,78 Store100,product9,47

所以我在下面写了一下查询:

WITH 
MEMBER [Measures].[Zero Sales Days] 
AS 
COUNT(
     FILTER(
            NONEMPTY( [Calendar].[Date].[Day],[Measures].[POS Qty])                   
             , ( [Measures].[POS Qty]=0)
            ) 
 )

SELECT 
([Store].[Store].[Store],[product].[product].[product]) on 1,
([MEASURES].[Zero Sales Days]) ON 0
FROM [testcube]

问题是:如何过滤案例:零销售天数<30

谢谢, 尼亚


我做了一些更改然后反对我的数据库。 如果我添加了原因,我什么都没得到。如果不是,结果是'#Error'。

我无需选择任何与时间相关的维度。我想要为报告做的是:选择商店和产品维度,并定义计算的度量以获得计数。 Boyan,如果您需要详细的查询,我将非常感激。

2 个答案:

答案 0 :(得分:2)

您正在寻找函数LastPeriods

 WITH 
  MEMBER [Measures].[Zero Sales Days] 
  AS COUNT(
        FILTER([Calendar].[Date].[Day], 
          SUM( LastPeriods(30, [Calendar].[Date].currentmember),[Measures].[POS Qty]) 
          = 0 )
        ) 
 SELECT 
  ([Store].[Store].[Store],[product].[product].[product]) on 1,
  ([MEASURES].[Zero Sales Days]) ON 0
 FROM [testcube]

答案 1 :(得分:1)

以下查询适用于Adventure Works,并显示自WHERE子句中的日期起超过30天没有销售的产品:

WITH
MEMBER [Measures].[Number of Periods With No Sales] AS
    Iif(([Date].[Date].CurrentMember, [Measures].[Internet Sales Amount])=0,
        ([Date].[Date].PrevMember, [Measures].[Number of Periods With No Sales])+1,
        NULL
    )
MEMBER [Measures].[Number of > 30 Periods With No Sales] AS
    Sum(
        Iif([Measures].[Number of Periods With No Sales] > 30,
            [Measures].[Number of Periods With No Sales],
            NULL
        )
    )
SELECT
{
    [Measures].[Number of > 30 Periods With No Sales]
} ON 0,
NON EMPTY {
    [Product].[Product Categories].[Product]
} ON 1
FROM [Adventure Works]
WHERE [Date].[Calendar].[Date].&[860]

您需要重新设置它(更改维度/度量名称)以使其对您的数据库起作用。如果您需要一个可以为您提供所有产品的查询,请告诉我,无论日期如何,其中至少有一个期限超过30天且没有销售(例如,没有销售的最长期限,或任意的此类期间)。这将需要一些更改。此外,由于查询使用递归,它可能会很慢 - 如果它太慢,我们可以看到如何提高其性能 - 这可能需要更改您的数据模型以支持这一点分析。