计算每个开放时间间隔MDX

时间:2017-03-14 12:57:19

标签: reporting-services ssas ssrs-2012

我还在学习MDX,我想进行一个相当复杂的(?)查询。我找到了DateOpen hour time的每个组合,其中有任何销售使用:

 SELECT NON EMPTY 
    { 
        [Measures].[Quantity] 
    } ON COLUMNS, 
 NON EMPTY 
    {   
        (
            [Dim Date].[Calender].[Date].ALLMEMBERS 
            ,[Dim Time].[Open Hour Bucket].[Open Hour Bucket].ALLMEMBERS 
        ) 
    } ON ROWS 
 FROM 
    ( SELECT 
        ( 
            { 
                (
                    [Dim Store2].[Store Name].&[ActualStoreName]
                    ,[Dim Date].[Calender].[2014]
                ) 
            } 
        ) ON COLUMNS 
    FROM [iceCube]
    ) 

我的结果集就像这样:

                                Quantity
 2014-11-07     11:00 - 11:59       1
 2014-11-07     12:00 - 12:59       10
 2014-11-08     11:00 - 11:59       3
 2014-11-08     12:00 - 12:59       2
 2014-11-10     13:00 - 13:59       1

这个阶段我想要的是什么。但是,从上面的结果集中得到平均值,如下所示:

                    Average
 11:00 - 11:59      2
 12:00 - 12:59      6
 13:00 - 13:59      1

是一个连接,我不明白我将如何进行。

我想找到2014年的平均销售额,因为我想在SSRS中使用特定周的销售额作为SSRS中的柱形图创建图表,同时将2014年的平均销售额作为单独的一行。这也使事情变得复杂,因为我需要第一个查询(虽然是一周的,而不是现在的2014年),以及2014年在相同数据集中的平均值,我不知道该怎么做。

我认为查找每个2014年的平均销售量的查询必须以SSAS作为计算度量进行,然后在SSRS我可以尝试查找本周的销售额和平均值2014年在同一数据集中以某种方式。

有人对此有任何想法吗?

此致

  

修改

运行GregGalloway的答案我得到了这个输出:

                        Quantity    YearlyHourAvg
2014-01-01  09:00-09:59 (null)      #Error
2014-01-01  10:00-10:59 (null)      #Error
.           .           .           .           
.           .           .           .
.           .           .           .
2014-12-31 21:00-21:59  (null)      #Error

(其中斑点表示它继续像行一样继续),即查询给出从1月1日到1月的每个Open Hour Bucket值。

当我尝试运行查询时,它实际上仅使用With MEMBER AS...和原始查询。 然而[Measures].[YearlyHourAvg]子句中添加Select会导致这些问题。

我目前正在SSRSSSMS中测试此查询。

  

EDIT2

也许我在原帖中并不清楚,但我需要平均值基于per *time interval*,而不是基于per time *and* date。即我需要平均时间跨度09:00-09:5910:00-10:59..

1 个答案:

答案 0 :(得分:1)

尝试以下方法。它应该添加一个新列,这是整个2014年中该小时的平均值。平均值应该是每天平均值,在该小时内有任何销售额。如果你想要一个简单的平均值到2014年的天数,请回信,我们可以讨论。如果您对我所做的更改有疑问,请询问。

WITH
MEMBER [Measures].[YearlyHourAvg] as
 Avg(
  Descendants(
   [Dim Date].[Calender].[2014],
   [Dim Date].[Calender].[Date]
  ),
  [Measures].[Quantity]
 )
 SELECT
    { 
        [Measures].[Quantity],
        [Measures].[YearlyHourAvg] 
    } ON COLUMNS, 
 NonEmpty(
    {   
        (
            [Dim Date].[Calender].[Date].ALLMEMBERS 
            ,[Dim Time].[Open Hour Bucket].[Open Hour Bucket].ALLMEMBERS 
        ) 
    } ,
   [Measures].[Quantity]
  )
 ON ROWS 
 FROM 
    ( SELECT 
        ( 
            { 
                (
                    [Dim Store2].[Store Name].&[ActualStoreName]
                    ,[Dim Date].[Calender].[2014]
                ) 
            } 
        ) ON COLUMNS 
    FROM [iceCube]
    )