SSAS 2008中的计算成员表达式

SSAS 2008中的计算成员表达式,ssas,mdx,cube,Ssas,Mdx,Cube,我需要为多维数据集创建一个计算成员,以显示每个客户少于或等于60天的应付发票总额 我知道我可以找到当前日期减去发票日期,如果结果(以天为单位)小于或等于60,则计算每个客户的所有发票的总和 我不知道如何在计算成员的表达式中实现这一点。我已经这样做了,但在选择中出现错误,我不知道为什么: CREATE MEMBER CURRENTCUBE.[Measures].[Importe60] AS Sum([Measures].[Importe de la factura]) SELECT [Measu

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

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

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

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';
CREATE MEMBER CURRENTCUBE.[Measures].[Importe60]
总计([措施][工厂进口])
在列上选择[Measures].[Importe60],
[客户][Nombre]。行上的成员
来自库博文塔斯

WHERE-DateDiff(dd,[Facturas].[Fecha-Factura],getDate())问题在于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") + "]")}
选择
{
[措施].[]
}0,,
{
[业务单元][事业部][事业部].成员
}在1号
从…起
[]
哪里
{strtomber(“[Order Date].[Date Key].[”+格式(now(),“yyyyymmdd”)+“]”)。Lag(59)
:
StrToMember(“[Order Date].[Date Key].[”+格式(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>>]
与
将[过去60天]设置为
StrToMember(“[Order Date].[Date Key].[”+格式(now(),“yyyyMMdd”)+“]”)。Lag(59)
:
StrToMember(“[Order Date].[Date Key].[”+格式(now(),“yyyyMMdd”)+“]”)
成员[测量][过去60天的总销售额]为
总数(
[过去60天]
,[措施].[]
)
挑选
{
[措施][过去60天的总销售额]
}0,,
{
[业务单元][事业部][事业部].成员
}在1号
从…起
[]

注:“strotmember()“公式在我的多维数据集中有效,因为datekey是YYYYMMDD格式。您的格式可能不同,因此您可能需要对其进行调整。

问题在于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") + "]")}
选择
{
[措施].[]
}0,,
{
[业务单元][事业部][事业部].成员
}在1号
从…起
[]
哪里
{strtomber(“[Order Date].[Date Key].[”+格式(now(),“yyyyymmdd”)+“]”)。Lag(59)
:
StrToMember(“[Order Date].[Date Key].[”+格式(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>>]
与
将[过去60天]设置为
StrToMember(“[Order Date].[Date Key].[”+格式(now(),“yyyyMMdd”)+“]”)。Lag(59)
:
StrToMember(“[Order Date].[Date Key].[”+格式(now(),“yyyyMMdd”)+“]”)
成员[测量][过去60天的总销售额]为
总数(
[过去60天]
,[措施].[]
)
挑选
{
[措施][过去60天的总销售额]
}0,,
{
[业务单元][事业部][事业部].成员
}在1号
从…起
[]
注意:“StrToMember()”公式在我的多维数据集中有效,因为datekey是YYYYMMDD格式。您的可能是另一种格式,因此您可能需要调整它