2012-03-19 68 views
1

我需要为多维数据集创建一个计算成员,以显示每位客户的发票总额小于或等于60天。计算SSAS 2008中的成员表达式

据我所知,我可以找到当前日期减去发票的日期,如果结果以天计算,小于或等于60,则为每个客户制作所有发票的总和。

我不知道如何在计算成员的表达式中实现这一点。我已经这样做了,但我在SELECT得到错误,我不知道为什么:

CREATE MEMBER CURRENTCUBE.[Measures].[Importe60] 
AS Sum([Measures].[Importe de la factura]) 

SELECT [Measures].[Importe60] ON COLUMNS, 
[Clientes].[Nombre].Members ON ROWS 
FROM CuboVentas 
WHERE DateDiff(dd,[Facturas].[Fecha Factura],getDate())<=60, 

VISIBLE = 1, ASSOCIATED_MEASURE_GROUP = 'Facturas clientes'; 

有谁知道我做错了吗?

回答

1

问题在于你的WHERE子句。在MDX中,WHERE子句应该用作过滤立方体空间的手段。然后,SELECT子句中的所有内容都基于剩余的“子立方体”。

另外,不需要计算成员...在这种情况下,SUM()函数是多余的(假设为[Measures]。[Importe de la factura]指定的聚合函数为SUM)。

这里写的查询接近你有上述格式的一种方式......

SELECT 
    { 
     [Measures].[<<measure>>] 
    } ON 0, 
    { 
     [Business Unit].[Division].[Division].Members 
    } ON 1 
FROM 
    [<<cube>>] 
WHERE 
    {StrToMember("[Order Date].[Date Key].[" + Format(now(), "yyyyMMdd") + "]").Lag(59) 
    : 
    StrToMember("[Order Date].[Date Key].[" + Format(now(), "yyyyMMdd") + "]")} 

通知的WHERE子句如何指定一组沿[订购日期]维度。这基本上说,给我所有维度的整个立方体空间...除了订单日期维度,我只想指定该集合“

此外,如果您编写如下查询,它可能是有点更容易理解这是怎么回事...

WITH 
SET [Past 60 days] AS 
    StrToMember("[Order Date].[Date Key].[" + Format(now(), "yyyyMMdd") + "]").Lag(59) 
    : 
    StrToMember("[Order Date].[Date Key].[" + Format(now(), "yyyyMMdd") + "]") 
MEMBER [Measures].[Total Sales Past 60 days] AS 
    SUM(
     [Past 60 days] 
     ,[Measures].[<<measure>>] 
    ) 
SELECT 
    { 
     [Measures].[Total Sales Past 60 days] 
    } ON 0, 
    { 
     [Business Unit].[Division].[Division].Members 
    } ON 1 
FROM 
    [<<cube>>] 

注:“StrToMember()”的公式工作在我的立方体,因为datekey是YYYYMMDD格式你可以在不同的格式,所以你可能。必须调整它。