计算时间维度节点中的天数 - 使用总计

时间:2013-07-23 20:16:01

标签: ssas aggregate mdx cube

我需要知道计算加权平均值的时间维度期间的天数。我在计算的度量中使用以下表达式来获取当前维度成员中的天数:

Count(
    Descendants(
        [Date].[Calendar].CurrentMember,
        [Date].[Calendar].[Date Key]
    )   
)

这适用于所有向下钻取的情况,但是当我有一个过滤器时它对Grand Total不起作用。我怀疑CurrentMember在这种情况下不起作用。它始终返回我的数据中的总天数。 为了说明,具有上述公式的度量在BIDS中汇总如下

Browsing the cube in BIDS

因为我的事实数据始于1984年,时间维度有11100天。如何更改公式以便在聚合中考虑过滤器?用户可以深入到日级别。这是Excel Pivot表:

Browsing the cube in Excel

2 个答案:

答案 0 :(得分:0)

如果您需要从[日期]。[日历]。[日期键]级别过滤成员,您可以将后代与实际过滤器相交>

WITH 
  MEMBER [Measures].[a] AS 
    Count
    (
      Intersect
      (
        Descendants
        (
          [Date].[Calendar].CurrentMember
         ,[Date].[Calendar].[Date]
        )
       ,Filter
        (
          [Date].[Calendar].[Date].MEMBERS
         ,
          ([Measures].[Sales Amount],[Date].[Calendar].CurrentMember) > 10000
        )
      )
    ) 
SELECT 
  {[Date].[Calendar].[Calendar Year].MEMBERS} ON ROWS
 ,{[Measures].[a]} ON COLUMNS
FROM [Adventure Works]

答案 1 :(得分:0)

我认为这是“计算成员多重选择问题”的经典案例。我找到了一个很好的总结here。我有一个适用于Excel的解决方案。它不计算BIDS中的正确总数,但在这种情况下这不是问题。

我使用以下动态集(这是多维数据集编辑器中“计算”选项卡上的“脚本”视图):

CALCULATE;     

CREATE MEMBER CURRENTCUBE.[Measures].[Days In Period Count]
AS Count(Existing [Filtered Date]), VISIBLE = 1  ; 

CREATE DYNAMIC SET CURRENTCUBE.[Filtered Date]
AS [Date].[Calendar].[Date Key] ; 

我的解释是SSAS通常会提前计算总数 [日期]。[日历] .CurrentMember在用户深入和过滤操作的上下文之外的Grand Total级别没有意义。通过使用动态集,我强制SSAS动态计算聚合。理论性能受到了影响,但是我的立方体尺寸并没有发现太大的差异。

然后BIDS显示以下总数 - 从上面没有变化:

Browsing in BIDS

但Excel具有正确的总计,仅反映过滤日期坐标(在这种情况下,仅2012年第1季度和2013年全年):

enter image description here