0

我是 MDX 的新手,需要一些帮助。在 SSRS 中,我有一个从 SSAS 多维数据集中提取的数据集。数据集始终包含六个月的数据。我需要做的是将 max(timeID) 的值与第二个 max(timeID) 的值进行比较,如果 max(timeID) 的值 > 第二个 max(timeID) 的值箭头在指示器中上升,等等...

因此,对于下面的数据集,我将从 20130301 的值为 10 的值中减去 20130201 的值为 8。结果将是一个正数,指标将是一个向上的绿色箭头。如果为 0,则为笔直,如果为负,则箭头为红色并指向下方。我了解如何处理指标 - 这不是问题。这是我需要帮助的 MDX。

20130201 8 20130301 10 20121201 4

我可以用 SQL 编写它,它看起来像这样。

    Select Item, case when sum(Time1ContentCount) > sum(Time2ContentCount) then 3 when sum(Time1ContentCount) = sum(Time2ContentCount) then 2 when sum(Time1ContentCount) sum(Time2ContentCount) then 1 end as Indicator, sum(Time1ContentCount) as Time1Count, sum(Time2ContentCount) as Time2Count from (Select timeID, dc.Item,  Case when timeID = (Select max(timeID) from FactUsage) then count(fu.Contentid) else 0 END as Time1ContentCount,  Case when timeID = (Select max(timeID) from FactUsage where timeID <>(Select max(timeID) from FactUsage)) then count(fu.Contentid) else 0 END as Time2ContentCount  from  factUsage fu  INNER JOIN dimContent dC on dc.ContentID = fu.ContentID  WHERE TimeID in (Select distinct top 6 timeid from factUsage order by timeID desc) Group by  timeID, Item) a group by Item

非常感谢你的帮助!

编辑:我将指标的语句更改为如下所示。

WITH Member MEASURES.Indicator AS ( 
        IIF(( [Measures].[Activity], [Time].[Time ID].LastChild ) > 
   ( [Measures].[Activity], [Time].[Time ID].LastChild.PrevMember),3,
            (IIF(([Measures].[Activity], [Time].[Time ID].LastChild ) = 
                ([Measures].[Activity], [Time].[Time ID].LastChild.PrevMember), 2,1))))


SELECT {Measures.Indicator} on 0
FROM [DW]

当我在 SSMS 中将它作为对多维数据集的查询运行时,它可以工作,但我试图将它放在指示器中,但它不起作用。仅添加 IIF 语句也不起作用。当我尝试将它添加到查询或多维数据集本身时,我可以从那里拉出它并出现内存不足错误。

4

1 回答 1

0

我不知道您可以在 MDX 表达式或报表生成器中编辑多少,但要获得系列中两个值之间的差异,您可以(在您的报表中)创建一个度量,即 CurrentMember 之间的差异和 PrevMember。由于时间序列 (timeid) 是按键排序的,因此它将始终处于正确的顺序(或者您的架构和架构需要返工)

所以基本上,你可以这样做:

WITH 
MEMBER MEASURES.GrowthTime AS ( 
        ( [Measures].[Value], [TimeID].CurrentMember ) - 
        ( [Measures].[Value], [TimeID].PrevMember )
)
MEMBER MEASURES.GrowthRatio AS (
        ( [Measures].[Value], [TimeID].CurrentMember ) /
        ( [Measures].[Value], [TimeID].PrevMember )
)
SELECT { Measures.Value, Measures.GrowthTime, Measures.GrowthRatio } on 0,
[TimeID].CHILDREN on 1
FROM Cube

这是伪的,因为我不知道你的立方体结构。对于 TimeID,您会想要它,[DimensionName].[AttributeName].CurrentMember并且PrevMember

于 2013-05-28T19:02:16.307 回答