【问题标题】:Previous Value of Measure inside a Tuple in an MDX queryMDX 查询中元组内的上一个度量值
【发布时间】:2012-08-21 14:35:01
【问题描述】:

我在报告中有以下 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 月份 Total 值超过 100k 的行。我将如何选择总价值超过 100k 的行3 月或 2 月 意思是从上述查询中获取结果加上结果本月值中的上一个月超过 100k ?

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

更新:天气3月份的[Total]值超过100k或者2月份的[Total]值是,我需要在查询结果中看到3月份的总值(可能是在第二种情况下少于 100k)

【问题讨论】:

    标签: sql-server-2008 reporting-services ssas mdx


    【解决方案1】:

    你可以这样使用:

    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

    【讨论】:

    • 感谢 Benoit 的回答。对不起,我没有明确说明我的要求。如果“以前”[总计]>100k,我仍然需要查看“当前”[总计](可能小于 100k)。此查询给出的总价值超过 100k 在当前月或上月。
    • @FrankGoortani 我更新了我的查询,以便它显示三月份的总数(这是当前的总数)
    【解决方案2】:

    如果我了解您的要求,您希望 where 子句中的月份或 where 子句中的前一个月的总行数超过 100K。 where 子句将影响您为 Total 度量看到的值,因此如果您也想查看上个月的值,则不能将其留在 where 子句中。要查看该行是针对 3 月还是针对 2 月,您必须将其包含在如下行中:

    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]
    

    更新: 要在当前月份或上个月大于 100,000 时获取当前值 - 无论当前月份的总数如何,您都可以这样做:

    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 子句。

    【讨论】:

    • 感谢斯塔西亚的回答。很抱歉我没有明确说明我的要求。如果“以前”[总计]>100k,我仍然需要查看“当前”[总计](可能小于 100k)。此查询给出的总价值超过 100k 在当月或上月
    • 我根据我目前对您的要求的理解修改了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2012-08-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    相关资源
    最近更新 更多