在SSAS 2008中计算的成员表达式

时间:2012-03-19 08:29:55

标签: ssas mdx cube

我需要为多维数据集创建一个计算成员,以显示每位客户的应付发票总额少于或等于60天。

据我所知,我可以找到当前日期减去发票日期,如果结果是天数,则小于或等于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 个答案:

答案 0 :(得分: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子句如何在[Order Date]维度中指定一个集合。这基本上说我给了我所有维度的整个立方体空间......除了我想要指定的集合的订单日期维度。“

另外,如果您编写如下所示的查询,可能会更容易理解正在发生的事情......

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格式。你的格式可能不同,所以你可能需要调整它。

相关问题