如何在探索它们时如何按日期和小时维度进行过滤?

时间:2013-10-09 09:24:00

标签: mdx olap dimension

首先,我的立方体的时间维度是由我从两个独立的维度创建的。

时间维度:小时,半小时,十分钟和分钟字段。

日期维度:日,月和年字段

我的问题是,当我想要探索并过滤整整几天而不是整天时,结果就好像我只是在探索整天。

让我告诉你我使用的mdx:

select non empty  ([Client].[Client].[Client],[Product].[Product].[Product]) on rows,
  {[Measures].[Example]}  on columns 
from [Cube] 
where ( {([Date].[Id].&[20131002] ) *([Time].[Time Field].&[0] : [Time].[Time Field].&[2059]) } +{([Date].[Id].&[20130930] : [Date].[Id].&[20131001]) *([Time].[Time Field].&[0] : [Time].[Time Field].&[2359]) }  )

该mdx有效,因为没有日期或时间维度。

这个不起作用:

select non empty  ([Date].[Date Field].[Date Field]) on rows,
  {[Measures].[Example]}  on columns 
from [Cube] 
where ( {([Date].[Id].&[20131002] ) *([Time].[Time Field].&[0] : [Time].[Time Field].&[2059]) } + {([Date].[Id].&[20130930] : [Date].[Id].&[20131001]) *([Time].[Time Field].&[0] : [Time].[Time Field].&[2359]) }  )

我注意到如果我将mdx分成这样:

select non empty  ([Date].[Date Field].[Date Field]) on rows,
  {[Measures].[Example]}  on columns 
from [Cube] 
where ( {([Date].[Id].&[20131002] ) *([Time].[Time Field].&[0] : [Time].[Time Field].&[2059]) }  }  

select non empty  ([Date].[Date Field].[Date Field]) on rows,
  {[Measures].[Example]}  on columns 
from [Cube] 
where ( {{([Date].[Id].&[20130930] : [Date].[Id].&[20131001]) *([Time].[Time Field].&[0] : [Time].[Time Field].&[2359]) }  

它有效!但我想用一个mdx来做。

如果有人能帮助我,我将非常感激!

问候。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用子选择:

select non empty  (EXISTING [Date].[Date Field].[Date Field]) on rows,
  {[Measures].[Example]}  on columns 
from (select 
     ( {([Date].[Id].&[20131002] ) *([Time].[Time Field].&[0] : [Time].[Time Field].&[2059]) } 
     + {([Date].[Id].&[20130930] : [Date].[Id].&[20131001]) *([Time].[Time Field].&[0] : [Time].[Time Field].&[2359]) }  )
      on columns
      from [Cube]
     )

顺便说一下,你的MDX是非法的(但是Analysis Services是宽容的):根据MDX规范,必须在select子句中的行之前指定列。