基于尺寸值的MDX计算度量

基于尺寸值的MDX计算度量,mdx,measure,Mdx,Measure,我不熟悉mdx和SSAS,我们正在尝试将存储过程转换为mdx查询。我有一个立方体,如下所示: 事实表: [Target] (FK), [Date] (FK), [Action] (FK), [Amount] (Measure), 暗淡日期: [DateKey] (pk), [Date], [DayOfYear], [DayofWeek], [.

我不熟悉mdx和SSAS,我们正在尝试将存储过程转换为mdx查询。我有一个立方体,如下所示:

事实表:

         [Target] (FK),
         [Date] (FK),
         [Action] (FK),
         [Amount] (Measure),
暗淡日期:

        [DateKey] (pk),
        [Date],
        [DayOfYear],
        [DayofWeek],
        [....]
Dim操作:有四种操作(添加、删除、连接等)

暗淡目标:

        [ID] (PK)
        [Name] 
我想创建一个计算度量,就像我们在t-sql中所做的那样

 SELECT ....,


   CASE 
         WHEN a.[Action]='added' 

         THEN DATEDIFF(DAY, a.[Date],GETUTCDATE()) 
         ELSE DATEDIFF(DAY, a.[Date],GETUTCDATE())*-1
         END


 AS 'Lifespan'

 FROM FilterData a 
 GROUP BY a.[Target]
问题:我怎样才能创建一个计算出的寿命指标

我尝试了以下操作,但失败,[Dim Action Types].[Name]。CURRENTMEMBER始终为“ALL”

我可以通过查询获得一些数据:


得到这样的输出


但这不会有多大帮助,我希望这个timespan值作为每个数据库行的“数量”这样的度量,然后我可以进行求和。。。这很难解释。事实上,它应该是一个名为“timespan”(度量)的列,但它是按今天的日期计算的,不能在datatable中创建,后来我使用GETDATE()在dsv中创建了一个命名的计算列。但是GETDATE()是处理日期,所以我必须在这里创建一个计算的度量值

我在t-sql中使用的查询:

 SELECT DATENAME(DAY,a.[Date])+'/'+ DATENAME(MONTH,a.[Date]) AS 'X',
 SUM(CASE WHEN a.[Action]='added' THEN DATEDIFF(DAY, a.[Date],GETDATE()) 
 ELSE                           DATEDIFF(DAY, a.[Date],GETDATE())*-1 END)
 AS 'TimeSpan',
 FROM FactData a
 GROUP BY a.[Date]

[Dim Action Types]也需要在行上,因为当前在[Dim Action Types]*[Dim Action Targets]上没有交叉-请告诉我它是否有效

With Member [Measures].[LifeSpan] as
CASE  
WHEN  [Dim  Action Types].[Name].CURRENTMEMBER IS [Dim  Action Types].[Name].&[added] THEN  1*'datediff("d",[Dim Date].[Date],Now()) '
WHEN [Dim  Action Types].[Name].CURRENTMEMBER IS  [Dim  Action Types].[Name].&[removed] THEN -1*'datediff("d",[Dim Date].[Date],Now()) '
ELSE  0
End 
select [Measures].[LifeSpan] on columns,
[Dim Action Targets].[Name].Children on rows
from [OLAP Prep]
WITH MEMBER [Measures].[TimeSpan] as 
case
 WHEN [Action Types].[Name].CURRENTMEMBER IS [Action Types].[Name].&[added]       THEN datediff('D',[Date].[Date].CURRENTMEMBER.NAME,Now())
WHEN [Action Types].[Name].CURRENTMEMBER IS  [Action Types].[Name].&  [removed] THEN -datediff('D',[Date].[Date].CURRENTMEMBER.NAME,Now())
ELSE  0
END

SELECT [Measures].[TimeSpan] ON 0,
NONEMPTY([Date].[Date].Children*[Action Types].[NAME].Children)on 1
FROM [OLAP Prep]
                           TimeSpan
2014-07-23 00:00:00.000 added
  34
2014-07-23 00:00:00.000 connected
     0
2014-07-23 00:00:00.000 disconnected
     0
2014-07-23 00:00:00.000 removed
     -34
2014-07-25 00:00:00.000 added
  32
2014-07-25 00:00:00.000 connected
0
2014-07-25 00:00:00.000 disconnected
 0
 2014-08-04 00:00:00.000 added
   22
 SELECT DATENAME(DAY,a.[Date])+'/'+ DATENAME(MONTH,a.[Date]) AS 'X',
 SUM(CASE WHEN a.[Action]='added' THEN DATEDIFF(DAY, a.[Date],GETDATE()) 
 ELSE                           DATEDIFF(DAY, a.[Date],GETDATE())*-1 END)
 AS 'TimeSpan',
 FROM FactData a
 GROUP BY a.[Date]