【问题标题】:Display Measure depending on Date, combine two measure from different dates根据日期显示度量,结合不同日期的两个度量
【发布时间】:2020-04-28 06:13:55
【问题描述】:

背景: 我正在为报告准备数据集。 为了简化,可以说它是两个度量,一个类别和一个时间维度。 主要报告参数是今天的日期。 我想查看昨天的第一个措施(值 000)和第二个措施 从前天开始(值 001)。因为值 001 的前几天数据尚不可用。

假设今天是 2020 年 4 月 27 日(从报告工具 SSRS 传递)。

原样

SELECT {[Measures].[Value 000], [Measures].[Value 001]} ON COLUMNS
    , ( {[DIM Category].[Category].&[1], [DIM Category].[Category].&[2]}, 
    [DIM Date].[Y-M-D ISO].[Date].[2020-04-27].LAG(2): [DIM Date].[Y-M-D ISO].[Date].[2020-04-27].LAG(1)
    )
 ON ROWS
FROM [My_Cube]

输出:

                        [Value 000]     [Value 001]     
Category 1  2020-04-25      88              16
Category 1  2020-04-26      89              (null)
Category 2  2020-04-25      90              14
Category 2  2020-04-26      92              (null)

我为每个日期尝试了两个 MDX 查询,并在报告工具中组合了集合,但我想知道在一个 MDX 查询中是否有一种舒适的方法可以做到这一点。 以下将是所需的输出。

未来

输出:

                [Value 000]     [Value 001]                 
Category 1          89              16          (Value from day before, for Value 0001) 
Category 2          92              14

日期不需要显示在输出中(但可以)

【问题讨论】:

    标签: reporting-services ssas mdx


    【解决方案1】:

    您可以使用计算的度量来解决问题。以下示例是基于 Adventureworks 的。我想为 2013 年 1 月 23 日重建你的 senario

    初始查询用于显示昨天 abd 前一天的值 和 会员措施。昨天 作为 sum([Date].[Date].currentmember.lag(1),[Measures].[Internet Sales Amount])

    member measures.DayBefore 
    as 
    sum([Date].[Date].currentmember.lag(2),[Measures].[Internet Sales Amount])
    select 
    {
    [Measures].[Internet Sales Amount],measures.Yesterday ,measures.DayBefore
    }
    on columns,
    
    {
    ([Product].[Category].[Category],[Date].[Date].&[20130120]:[Date].[Date].&[20130123])
    }
    on rows 
    from 
    [Adventure Works]
    where [Date].[Date].&[20130123]
    

    结果

    现在让我们从行中删除日期并将其放在哪里

    with 
    member measures.Yesterday 
    as 
    sum([Date].[Date].currentmember.lag(1),[Measures].[Internet Sales Amount])
    
    member measures.DayBefore 
    as 
    sum([Date].[Date].currentmember.lag(2),[Measures].[Internet Sales Amount])
    select 
    {
    [Measures].[Internet Sales Amount],measures.Yesterday ,measures.DayBefore
    }
    on columns,
    
    {
    ([Product].[Category].[Category])
    }
    on rows 
    from 
    [Adventure Works]
    where [Date].[Date].&[20130123]
    

    结果

    【讨论】:

    • 谢谢,你帮了我很多。我应用了相同的逻辑。对于我的查询,它看起来像这样:WITH MEMBER [Measures].DayBefore AS SUM([DIM Date].[Date].CURRENTMEMBER.LAG(1), [Measures].[Value 001]) --DayBefore Yesterday SELECT { [Measures].[Value 000], [Measures].DayBefore } ON COLUMNS , {[DIM Category].[Category].&[1], [DIM Category].[Category].&[2]} ON ROWS FROM [BI_Base] WHERE [DIM Date].[Y-M-D ISO].[Date].[2020-04-27] --Yesterday
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    相关资源
    最近更新 更多