mdx查询中的时间范围过滤器

时间:2013-09-18 11:54:56

标签: ssas mdx

我们有一个包含以下值的表:

ItemName数量F位日期

Item1 100 1/1/2011

Item2 150 1/5/2011

Item3 200 1/14/2011

Item4 250 1/20/2011

Item5 1000 2/1/2011

在MDX查询中,我们需要根据日期范围过滤数据。假设我们需要获取日期范围01/01/2011到01/31/2011的项目及其数量,我们使用以下MDX查询:

SELECT 
   NON Empty 
      {[Final Report View For Scorecards].[F Bit Date].Children} ON ROWS, 
   NON Empty 
      {[Measures].[Qty]} ON COLUMNS 
FROM 
  ( 
  SELECT 
     ( 
    {[Final Report View For Scorecards].[F Bit Date].&[2011-01-01T00:00:00] : 
     [Final Report View For Scorecards].[F Bit Date].&[2011-01-31T00:00:00]} 
     ) ON COLUMNS 
  FROM [FinalReportView] 
  )

此处当FromDate和ToDate参数作为01/01/2011和01/20/2011传递时,将正确检索项目1到4及其各自的数量。但是当FromDate和ToDate在01/01/2011和01/31/2011(或)01/01/2011和01/19/2011中传递时,它甚至返回Item5的值,这是错误的。即,只有当表中可用的确切日期作为参数传递时,它才会返回正确的结果。但是,当传递表中不可用的日期时,将返回整个数据集。

使用'FILTER'时也一样。

有关此问题的任何指示?

1 个答案:

答案 0 :(得分:0)

如果使用不存在的成员名称,则(如果已将维度的MdxMissingMemberMode配置为等效于Ignore的默认设置),则Analysis Services会将无效成员名称转换为{{ 1}}。范围运算符NULL:解释为无界,i。即如果您在范围的右侧使用null,则表示“到级别的最后一个成员”,而在null的左侧则表示“从级别的第一个成员”

你能做些什么来解决这个问题:

  • 要么注意只生成现有成员的名称
  • 或者只是用一系列足够大的日期来填充维度表,以免造成问题。您现在不需要添加任何事实,维度表中应该只有一个条目。
  • 或者在MDX中使用一些字符串逻辑来查找下一个现有的(对于范围的左侧)或先前存在的(对于范围的右侧)。您可以在MDX中使用VBA字符串函数。
相关问题