首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MDX查询:如何将本年度的年初至今数据与上一年度的年初至今数据进行比较?

MDX查询:如何将本年度的年初至今数据与上一年度的年初至今数据进行比较?
EN

Stack Overflow用户
提问于 2011-08-17 23:18:50
回答 2查看 5.8K关注 0票数 0

通过下面的MDX查询,我尝试返回销售数字的比较。

我想将YTD和LYTD进行比较,定义如下:

今年1月1日(2011年1月1日)至今天(2011年8月17日)

LYTD:去年1月1日(2010年1月1日)至去年今天(2010年8月17日)

这两个周期应该包含相同的天数(对于闰年,给或取一天)。

到目前为止,我已经尝试使用YTD()函数来获取今年的数据,但是在包装YTD()函数以使其返回去年的相同日期方面并没有取得太大成功。我使用了LAG(1)和ParallelPeriod (参见下面的两个示例):

代码语言:javascript
复制
WITH
MEMBER [Measures].[Sales YTD] AS
    'SUM(YTD(),[Measures].[Sales])'
MEMBER [Measures].[Sales LYTD] AS
    'SUM((YTD(),[Measures].[Sales]).LAG(1))'
SELECT
    {[Sales YTD], [Sales LYTD]} ON COLUMNS
    ...

代码语言:javascript
复制
WITH
MEMBER [Measures].[Sales YTD] AS
    'SUM(YTD(),[Measures].[Sales])'
MEMBER [Measures].[Sales LYTD] AS
    'SUM(ParallelPeriod(YTD(),1),[Measures].[Sales])'
SELECT
    {[Sales YTD], [Sales LYTD]} ON COLUMNS
    ...

使用ParallelPeriod或LAG时,结果数据始终返回去年销售额的一列空值:

代码语言:javascript
复制
Customer    Sales YTD  Sales LYTD
ABC Screws      $1024       (Null)
ABC Bolts       $2392       (Null)
ABC Nuts        $3735       (Null)

有人可以建议对查询进行更改以返回正确的数据,或者提供使用LAG或ParallelPeriod的替代策略吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-18 03:35:37

使用类似这样的东西:

代码语言:javascript
复制
WITH
        MEMBER [Measures].[Sales YTD] AS
            'SUM(YTD(closingperiod([Date].[Calendar].[Date])),[Measures].[Sales])'
        MEMBER [Measures].[Sales LYTD] AS
            'SUM(YTD(PARALLELPERIOD([Date].[Calendar].[Calendar Year],1,closingperiod([Date].[Calendar].[Date]))),[Measures].[Sales])'
        SELECT
            {[Measures].[Sales YTD],[Measures].[Sales LYTD]} ON COLUMNS
        ...

,其中

您的日期中的

  • Date.Calendar.Date级“日”dimension;
  • closingperiod(Date.Calendar.Date) -此级别的最后一个成员“日”(17/Aug/2011);
  • Date.Calendar.Calendar您的日期中的年级“年”dimension;
  • PARALLELPERIOD(Date.Calendar.Calendar Year,1,closingperiod(Date.Calendar.Date)) -17/Aug/2010。
票数 0
EN

Stack Overflow用户

发布于 2011-08-18 14:03:45

在发布这个问题和进一步的实验后不久,下面的结构似乎返回了我想要的结果:

代码语言:javascript
复制
WITH
MEMBER [Measures].[Sales YTD] AS
    'SUM(YTD(),[Measures].[Sales])'
MEMBER [Measures].[Sales LYTD] AS
    'SUM(YTD(ParallelPeriod([Time].[Year],1,[Time].CURRENTMEMBER)),[Measures].[Sales])'
SELECT
    {[Sales YTD], [Sales LYTD]} ON COLUMNS
    ...

我会在昨天晚上发布我的答案,但是低于100分的用户必须等待8个小时才能回答他们自己的问题。

@Max感谢你的意见,看起来你也有同样的想法。因此,即使我使用自己的实现,您也会得到可接受的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7095242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档