用于SUM的SSAS MDX(DISTINCT客户&#(MAX(日期' s重量)))

时间:2015-12-21 15:32:43

标签: ssas mdx

致MDX大师, 一个星期以来,我一直在打击这个,我无法解决它。可以解决吗?

这是挑战:

在SSAS BID中创建计算成员表达式以计算Weighted_Members,其描述如下: "对于选择的任何日期,我们需要计算与最近一次访问唯一成员相关的权重总和。"

在伪代码中:SUM(DISTINCT成员的(MAX(日期权重)))

注意:    *权重是指会员访问特定地点,适用于1个月。

以下是事实表的示例:    *两名成员(会员编号:100和103)    *访问3个不同的位置(位置ID:200,220和230)    *在2014年和2015年的不同日期。

Visits_F_ID | Visit_Date | Membership_ID | Location_ID |权重|

     1  |  Jan 1, 2014    |        100      |  230         |  3.5      |
     2  |  Mar 1, 2014    |        100      |  220         |  2.0      |
     3  |  May 1, 2015    |        100      |  220         |  2.5      |
     4  |  Apr 1, 2014    |        103      |  200         |  1.0      |
     5  |  Jul 1, 2014    |        103      |  220         |  1.5      |
     6  |  Sep 1, 2014    |        103      |  230         |  0.5      |
     7  |  Nov 1, 2014    |        103      |  220         |  3.0      |
     8  |  Jan 1, 2015    |        103      |  220         |  1.0      |
     9  |  Aug 1, 2015    |        103      |  200         |  7.0      |
    10  |  Sep 1, 2015    |        103      |  230         |  4.5      |
    11  |  Dec 1, 2015    |        103      |  200         |  1.5      |

尺寸:

访问日期维度具有以下属性:    * 年    * 25美分硬币    *月    *日期    *日历年 - >季度 - >月 - >日期(calendar_quarter_hierarchy)    *日历年 - >月 - >日期(calendar_month_hierarchy)

成员资格维度具有以下属性:    * membership_id(当前可见性设置为false(或隐藏),因为有> 5M记录)    * 性别    *年龄群组

“位置维度”具有以下属性:    * Location_ID    * 地点名称    *城市    *省    *省 - >城市 - > Location_Name(Geographical_hierarchy)

示例:

示例#1。)2014年年会的Weighted_Members计算如下:    第1步:过滤2014年年度活动的事实数据。

        Visits_F_ID |  Visit_Date     |  Membership_ID  |  Location_ID |  Weights  |
        =============================================================================
                 1  |  Jan 1, 2014    |        100      |  230         |  2.5      |
                 2  |  Mar 1, 2014    |        100      |  220         |  2.0      |
                 4  |  Apr 1, 2014    |        103      |  200         |  1.0      |
                 5  |  Jul 1, 2014    |        103      |  220         |  1.5      |
                 6  |  Sep 1, 2014    |        103      |  230         |  0.5      |
                 7  |  Nov 1, 2014    |        103      |  220         |  3.0      |

第2步:从上面的每个独特成员中获取最近日期的数据:

        Visits_F_ID |  Visit_Date     |  Membership_ID  |  Location_ID |  Weights  |
        =============================================================================
                 2  |  Mar 1, 2014    |        100      |  220         |  2.0      |
                 7  |  Nov 1, 2014    |        103      |  220         |  3.0      |

步骤3:对权重求和,得出Weighted_Members = 2.0 + 3.0为5.0

====== 示例#2。)如果多维数据集用户按照上面示例#1中的相同三个步骤切换2015年的时间段,则Weighted_Members:

        Visits_F_ID |  Visit_Date     |  Membership_ID  |  Location_ID |  Weights  |
        =============================================================================
                 3  |  May 1, 2015    |        100      |  220         |  2.5      |
                11  |  Dec 1, 2015    |        103      |  200         |  1.5      |

Weighted_Members = 2.5 + 1.5是4.0

====== 示例#3。)如果多维数据集用户切换2014年3月到2014年10月的时间段并且对访问location_id = 220感兴趣,那么Weighted_Members:

        Visits_F_ID |  Visit_Date     |  Membership_ID  |  Location_ID |  Weights  |
        =============================================================================
                 2  |  Mar 1, 2014    |        100      |  220         |  2.0      |
                 5  |  Jul 1, 2014    |        103      |  220         |  1.5      |

Weighted_Members = 2.0 + 1.5是3.5

====== 示例#4。)如果多维数据集用户切换2015年7月到2015年8月的时间段,Weighted_Members:

        Visits_F_ID |  Visit_Date     |  Membership_ID  |  Location_ID |  Weights  |
        =============================================================================
                 9  |  Aug 1, 2015    |        103      |  200         |  7.0      |

Weighted_Members = 7.0

1 个答案:

答案 0 :(得分:0)

根据我的理解 - 你可以尝试一下:

WITH MEMBER Measures.YourCalcMember AS
SUM 
    (
    generate
        (
            Customer.CustomerID.MEMBERS AS S,
            s.CURRENT *
            TAIL(
                NonEmpty
                    (
                     [Date].[Date].[Date].MEMBERS, --The last date for the "current" customer
                     (s.CURRENT, [Measures].[Weight])
                    )
                )
        )
     , 
    Measures.[Weight]
    )

SELECT Measures.YourCalcMember ON 0,
Location.LocationID.MEMBERS ON 1
FROM 
(
 SELECT [Date].[Year].&[2014] ON 0 FROM [Your Cube] --The year filter
)

使用“生成”功能,循环访问客户并获得该客户的交叉customerId和“最后”日期。然后,在此集合上,获得权重之和。

所有人都说,在正确尝试这个问题之前,还需要进一步的细节。