MDX函数CURRENTMEMBER失败,因为'日期'属性包含一个集合

时间:2015-01-15 17:58:15

标签: ssas mdx

我正在尝试运行此查询:

select [Dim Date].[Date] on ROWS,
{[Measures].[Available Time Net],[Measures].[Logged On Time Net]} on columns 
from [OTS Agent Time Net Data]
where {[Dim Date].[Date].&[08/01/2014]:[Dim Date].[Date].&[12/31/2014]}

我想获得where子句中存在的度量,但我还想在行上显示日期。我一直收到错误。

3 个答案:

答案 0 :(得分:2)

为什么不直接将该集添加到ROWS

SELECT 
  NON EMPTY 
    {
      [Dim Date].[Date].&[08/01/2014] : [Dim Date].[Date].&[12/31/2014]
    } ON ROWS
 ,{
    [Measures].[Available Time Net]
   ,[Measures].[Logged On Time Net]
  } ON COLUMNS
FROM [OTS Agent Time Net Data];

答案 1 :(得分:1)

您不能在一个轴上和切片器中使用相同的层次结构([Dim Date]。[Date])(MDX tutorial);我想使用子查询对你的例子来说没问题:

select 
  [Dim Date].[Date] on ROWS,
  {[Measures].[Available Time Net],[Measures].[Logged On Time Net]} on columns 

from ( 
  select {[Dim Date].[Date].&[08/01/2014]:[Dim Date].[Date].&[12/31/2014]} on 0 
  from [OTS Agent Time Net Data] 
)

希望有所帮助。

(编辑:使用命名集或使用轴中的切片器内容 - 请参阅其他响应 - 有点不同,因为请求在几天内过滤但选择[Dim Date]。[Date]不一定显示天数;例如,可以是[Dim Date]的[All]层次。[Date])

答案 2 :(得分:0)

我同意Marc的回答,这可能是最好的方法。但是还有一种方法可以做到这一点,它不需要通过使用命名集来进行子选择。

with set DateRange AS
{[Dim Date].[Date].&[08/01/2014]:[Dim Date].[Date].&[12/31/2014]}

select NON EMPTY  DateRange on ROWS,
{[Measures].[Available Time Net],[Measures].[Logged On Time Net]} on COLUMNS 
from [OTS Agent Time Net Data]

修改

根据您的要求,如果您想要按时间进行额外过滤,这是继续进行的一种方式。用以下内容替换集合DateRange的定义:

with set DateRange AS
EXISTS({[Dim Date].[Date].&[08/01/2014]:[Dim Date].[Date].&[12/31/2014]}
       ,[Dim Time].[Time].&[1930]
       , "Time Net"
      )

你需要填写的东西很少......

假设时间维度的层次结构为[Dim Time].[Time]。请替换实际名称以及会员的格式(假设为&[1930]

此外,Time Net是度量[Measures].[Available Time Net][Measures].[Logged On Time Net]所属的度量值组名称。再次,用原始名称替换。