2

我有以下问题:

Select
    {
        [Measures].[PerformanceTotalYtd]

    } on columns,

    Non Empty{  
       Except(([Desk].[DeskName].[Trade].Members,[Time].[Year-Month-Day].[Day].&[2012]&[1]&[10]),([Desk].[DeskName].[Trade].Members,[Time].[Year-Month-Day].[Day].&[2012]&[1]&[09]))
    } on rows

from [Cube]

where ([Entity].[Entity].&[9], [Audience].[View].&[GOD])

它存在一个带有 Name Desk 的维度。此维度有一个名为 DeskName 的层次结构。最低级别是贸易。

服务台:-总计-部门-业务区域-部门-4级投资组合-服务台-贸易

通过下面显示的查询,我想显示在 2012 年 1 月 10 日日期具有度量“PerformanceTotalYtd”!= NULL 的所有交易,但在 2012 年日期具有度量“PerformanceTotalYtd”的交易!= NULL/ 01/09 !

例子:

2012 年 1 月 10 日与 Measure PerformanceTotalYtd 的交易:

美国广播公司 12,99

3,22 欧元

GHI 55,60

在 2012 年 1 月 9 日使用 Measure PerformanceTotalYtd 进行交易:

ABC 80,00

8,78 欧元

我想要以下结果,因为交易“GHI”在 2012/01/09 上不存在并且是新的:

GHI 55,60

下面显示的我的查询有这个结果:

美国广播公司 12,99

3,22 欧元

GHI 55,60

它不会删除 2012/01/09 的现有交易。

我在 SQL 中有一个解决方案,但想在 MDX 中实现:

    SELECT DD.Code, Sum(PerformanceTotalYtd) as TOTAL
      FROM [Reporting_DB].[Star].[Fact_PerformanceTotal] FIS
            inner join Star.Dimension_Desk DD on FIS.DeskID = DD.DeskID
      WHERE FIS.TimeID = 20120110 and FIS.EntityID = 9 AND DD.Code not in ( SELECT DD.Code
FROM [Reporting_DB_HRE].[Star].[Fact_PerformanceTotal] FIS inner join Star.Dimension_Desk DD on FIS.DeskID = DD.DeskID WHERE FIS.TimeID = 20120109 and FIS.EntityID = 9 group by DD.Code)group by DD.Code

有人可以帮我吗?我找不到解决方案。

对不起,我的英语不好!

亚历克斯

4

2 回答 2

2

我在 Adventure Works 多维数据集中找到了一个类似的示例:该集合{[Customer].[City].&[Bell Gardens]&[CA], [Customer].[City].&[Bellevue]&[WA], [Customer].[City].&[Bellflower]&[CA]}有 3 个[Measures].[Internet Sales Amount]in值[Date].[Calendar Year].&[2002],而只有 2 个 in 值[Date].[Calendar Year].&[2004]。所以我们需要在 2002 年显示成员的度量值,其中 2004 年的度量值 == null。下一个 MDX 查询实现了预期的结果:

with set S as '{[Customer].[City].&[Bell Gardens]&[CA], [Customer].[City].&[Bellevue]&[WA], [Customer].[City].&[Bellflower]&[CA]}'
select
[Measures].[Internet Sales Amount] on 0,
non empty { Filter(S, IsEmpty(([Date].[Calendar Year].&[2004], [Measures].[Internet Sales Amount]))) } on 1
from [Adventure Works]
where ([Date].[Calendar Year].&[2002])

我试图相应地修改您的示例,但无法对其进行测试。这里是:

select
{ [Measures].[PerformanceTotalYtd] } on 0,
non empty { Filter([Desk].[DeskName].[Trade].Members, IsEmpty(([Time].[Year-Month-Day].[Day].&[2012]&[1]&[09], [Measures].[PerformanceTotalYtd]))) } on 1
from [Cube]
where ([Entity].[Entity].&[9], [Audience].[View].&[GOD], [Time].[Year-Month-Day].[Day].&[2012]&[1]&[10])

简而言之:使用过滤器而不是例外。

于 2012-01-13T11:34:15.377 回答
1

我有我的问题的解决方案。以下查询显示与 Dmitry Polyanitsa 的查询相同的结果!有一个美好的一天,伙计们!

with
    set [Trades Today] as NonEmpty([Desk].[DeskName].[Trade].Members,  ([Measures].[PerformanceTotalYtd], [Time].[Year-Month-Day].[Day].&[2012]&[1]&[10]))
    set [Trades Yesterday] as NonEmpty([Desk].[DeskName].[Trade].Members,  ([Measures].[PerformanceTotalYtd], [Time].[Year-Month-Day].[Day].&[2012]&[1]&[9]))
    set [Trades Difference] as Except([Trades Today], [Trades Yesterday])

Select
    {
        [Measures].[PerformanceTotalYtd]

    } on columns,

    Non Empty{  
       [Trades Difference]
    } on rows

from [Cube]

where ([Entity].[Entity].&[9], [Audience].[View].&[GOD])
于 2012-01-16T08:29:14.333 回答