none
Analysis Service 2008中通过MDX查询数据 RRS feed

  • 问题

  • 初次接触MDX因为要立刻使用先求教下这里的大侠们:

    1.我有两年的数据,如果通过MDX取本月以前的6个月的数据,比如现在是9月,我要取4,5,6,7,8,9的数据,如何查询

    2.默认打开一张报表是让过滤器显示默认值为数据库中最大月份,这个是通过MAX()吗,怎么写

    写的有点空洞,希望搞过的大哥们帮帮,谢谢!

     

    2010年9月27日 4:02

答案

  • 一般设计数据仓库时要给月份设计一个排序列 例如: Month = 201001,201002 ...201012,这时要取前6个月就很容易了 比如{[Month].currentmember.lag(1):[Month].currentmember.lag(6)},找到前6个月再计算这6个月的数据就很容易了。

    可以给报表里添加一个参数,默认值为当前月,或者其他你希望的月份。然后用这个默认值对DataSet做关联筛选。报表打开就是你希望的月份值了。

    不清楚你的具体环境,以上仅做参考。

    2010年9月27日 11:57
  • 1) 有一个很常用的函数来完成这个要求,Tail(), 中文翻译过来就是尾巴的意思。如:

    SELECT [Measures].[Reseller Sales Amount] ON 0,
    
    Tail ([Date].[Month of Year].members,6) ON 1
     
    FROM [Adventure Works]
    

    2) MDX 中有MAX () 函数,但是是用来对SET 进行操作的。你可以使用LastChild() 这个函数选取月这个Level 的最大值,如:

    SELECT 
    [Date].[Month of Year].LastChild ON 0
    FROM [Adventure Works]
    当然在报表中的Filter 的MDX 不是这么写的,但是你可以仍然使用这个函数。
    2010年9月27日 12:39
    版主

全部回复

  • 一般设计数据仓库时要给月份设计一个排序列 例如: Month = 201001,201002 ...201012,这时要取前6个月就很容易了 比如{[Month].currentmember.lag(1):[Month].currentmember.lag(6)},找到前6个月再计算这6个月的数据就很容易了。

    可以给报表里添加一个参数,默认值为当前月,或者其他你希望的月份。然后用这个默认值对DataSet做关联筛选。报表打开就是你希望的月份值了。

    不清楚你的具体环境,以上仅做参考。

    2010年9月27日 11:57
  • 1) 有一个很常用的函数来完成这个要求,Tail(), 中文翻译过来就是尾巴的意思。如:

    SELECT [Measures].[Reseller Sales Amount] ON 0,
    
    Tail ([Date].[Month of Year].members,6) ON 1
     
    FROM [Adventure Works]
    

    2) MDX 中有MAX () 函数,但是是用来对SET 进行操作的。你可以使用LastChild() 这个函数选取月这个Level 的最大值,如:

    SELECT 
    [Date].[Month of Year].LastChild ON 0
    FROM [Adventure Works]
    当然在报表中的Filter 的MDX 不是这么写的,但是你可以仍然使用这个函数。
    2010年9月27日 12:39
    版主