我需要为多维数据集创建一个计算成员,以显示每位客户的应付发票总额少于或等于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';
有谁知道我做错了什么?
答案 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格式。你的格式可能不同,所以你可能需要调整它。