MDX查询中元组内度量值的上一个值



我在报告中有以下MDX查询:

select 
({ [Measures].[Total]})   on columns,
non empty
[Dim1].[h1].allmembers
* [Dim1].[h2].allmembers
* [Dim1].[h3].allmembers
* [1 Date - Loss Date].[Date].[Year].allmembers
having [Measures].Total>100000 on rows
from [Monthly Summary]
where ([1 Date - Month End].[Month End Date].[Month].&[20120331])

这是在3月份选择总值超过10万的行。如何在3月或2月选择总值超过100k的行,这意味着从上面的查询中获得结果加上上一个超过100k时的本月值的结果?

现在,我正在SSRS中的两个数据集中进行这项工作,并在另一个数据集上进行连接和查找,从报表参数中读取月份(Where子句);这是闭合螺母不正确。

更新:如果三月的[Total]值大于100k,或者二月的[Totall]值大于,我需要在查询结果中看到三月的总值(在第二种情况下可能小于100k)

您可以使用这样的东西:

SELECT ({ [Measures].[Total]}) ON COLUMNS,
[Dim1].[h1].allmembers
* [Dim1].[h2].allmembers
* [Dim1].[h3].allmembers
* [1 Date - Loss Date].[Date].[Year].allmembers
HAVING [Measures].[Total] > 100000
OR ([Measures].[Total], [1 Date - Month End].[Month End Date].[Month].&[20120228]) >100000 
ON ROWS
FROM [Monthly Summary]
WHERE ([1 Date - Month End].[Month End Date].[Month].&[20120331])

行上不需要非emtpy,因为null < 100000

如果我理解您的要求,您需要where子句中的月份行或where子句中总行数超过100K的月份之前的月份行。where子句将影响您为Total度量值看到的值,因此如果您也想看到上个月的值,则不能将其保留在where子句中。要查看该行是三月还是二月,您必须将其包括在以下行中:

select 
({ [Measures].[Total]})   on columns,
non empty
[Dim1].[h1].allmembers
* [Dim1].[h2].allmembers
* [Dim1].[h3].allmembers
* [1 Date - Loss Date].[Date].[Year].allmembers
* {[1 Date - Month End].[Month End Date].[Month].&[20120228],[1 Date - Month End].[Month End Date].[Month].&[20120331]}
having [Measures].Total>100000 on rows
from [Monthly Summary]

您是否从参数中获取月份,因此正在寻找一种获取上月的通用方法?如果是这样,你可以这样做:

select 
    ({ [Measures].[Total]})   on columns,
    non empty
    [Dim1].[h1].allmembers
    * [Dim1].[h2].allmembers
    * [Dim1].[h3].allmembers
    * [1 Date - Loss Date].[Date].[Year].allmembers
    * {[1 Date - Month End].[Month End Date].[Month].&[20120331].PrevMember,[1 Date - Month End].[Month End Date].[Month].&[20120331]}
    having [Measures].Total>100000 on rows
    from [Monthly Summary]

更新:当当月或上月大于100000时,无论当月的总数如何,都可以获得当前值:

select 
    ({ [Measures].[Total]})   on columns,
    non empty
    [Dim1].[h1].allmembers
    * [Dim1].[h2].allmembers
    * [Dim1].[h3].allmembers
    * [1 Date - Loss Date].[Date].[Year].allmembers
    having [Measures].Total>100000 or ([1 Date - Month End].[Month End Date].[Month].&[20120331].PrevMember,  [Measures].Total>100000) on rows
    from [Monthly Summary] 
    where [1 Date - Month End].[Month End Date].[Month].&[20120331]

在HAVING子句中,WHERE子句与度量值相结合,以筛选出不符合指定月份(2012年3月)条件的任何行。但对于OR之后的表达式,它不会执行此操作,因为带有PrevMember的元组会覆盖WHERE子句。

最新更新