我有以下问题。如果我查询值的关键字是一个函数,我不能指定相同尺寸限制的多个值,但如果它不是一个函数,它就可以工作。
所以这是可行的:
SELECT {[Measures].[Netto]} on columns FROM TDC where
({NonEmpty([Time].[Month].[Month].&[2008-03-01T00:00:00]),
NonEmpty([Time].[Month].[Month].&[2008-04-01T00:00:00])})但这不是:
SELECT {[Measures].[CalculatedFunction]} on columns FROM TDC where
({NonEmpty([Time].[Month].[Month].&[2008-03-01T00:00:00]),
NonEmpty([Time].[Month].[Month].&[2008-04-01T00:00:00])})这也是可行的:
SELECT {[Measures].[CalculatedFunction]} on columns FROM TDC where
({NonEmpty([Time].[Month].[Month].&[2008-03-01T00:00:00])})我猜解决方案类似于在头文件中添加where子句,但我真的很喜欢这个解决方案,因为它非常简单。
计算出的函数是:
CREATE MEMBER CURRENTCUBE.[MEASURES].Ultimo
AS (iif ((not [Time].[Year - Month - Date].currentmember is [Time].[Year - Month - Date].defaultmember),
IIF(NOT ([Measures].[LagerStk] = 0),
Sum([Time].[Year - Month - Date].[Date].members(0):
ClosingPeriod([Time].[Year - Month - Date].[Date]),
[Measures].[LagerStk]), NULL)
,
IIF(NOT ([Measures].[LagerStk] = 0),
Sum([Time].[Year - Week - Date].[Date].members(0):
ClosingPeriod([Time].[Year - Week - Date].[Date]),
[Measures].[LagerStk]), NULL))),
VISIBLE = 1;该代码的灵感来自于此,并针对时间维度中的两个层次结构进行了修改:http://www.sqlserveranalysisservices.com/OLAPPapers/InventoryManagement%20in%20AS2005v2.htm
这是在SQL server 2005企业版上。
发布于 2008-12-16 16:41:04
好的,这行得通:
WITH MEMBER [Time].[Month].a AGGREGATE
({[Time].[Month].[Month].&[2008-03-01T00:00:00],
[Time].[Month].[Month].&[2008-04-01T00:00:00]})
SELECT {[Measures].[CalculatedFunction]} on columns FROM TDC where a发布于 2009-02-04 03:54:35
问题出在您的计算度量中。您使用的.CurrentMember和ClosingPeriod没有特定的成员引用,这意味着要调用.CurrentMember。如果在WHERE子句中进行了设置,则没有“当前”成员-有多个当前成员。将MDX重写为类似下面的内容应该允许它与WHERE子句中的多个成员一起工作。
CREATE
MEMBER CURRENTCUBE.[MEASURES].Ultimo AS NULL;
SCOPE ([MEASURES].Ultimo);
SCOPE ([Time].[Year - Month - Date].[All]);
this = IIF
(
(NOT
[Measures].[LagerStk] = 0)
,Sum
(
NULL:Tail(Existing [Time].[Year - Week - Date].[Date],1).item(0).item(0)
,[Measures].[LagerStk]
)
,NULL
);
END SCOPE;
SCOPE ([Time].[Year - Week - Date].[All]);
this = IIF
(
(NOT
[Measures].[LagerStk] = 0)
,Sum
(
NULL:Tail(Existing [Time].[Year - Month - Date].[Date],1).Item(0).Item(0)
,[Measures].[LagerStk]
)
,NULL
)
);
END SCOPE;
END SCOPE;我在两个维度的所有成员上使用作用域,这应该比out IIF更快,并且还将避免引用.CurrentMember。然后我将ClosingPeriod()调用替换为Tail(Existing Time.Year - Week - Date.Date,1) .Item(0).Item(0) ,它的作用是获取存在于当前上下文中的日期成员集,然后()调用将这些成员中的最后一个作为单个成员集获取,.Item(0).Item(0)调用从该集合的第一个元组中获取第一个成员。
显然,由于无法访问您的多维数据集,我无法对此进行任何测试。您在评论中报告的问题可能与对所有成员的不正确引用有关(我的命名格式可能与多维数据集中的命名格式不同),也可能与IIF()语句有关。我不确定是否在正确的上下文中评估了0的检查
您可以尝试不使用IIF()进行测试。
创建成员CURRENTCUBE.MEASURES.Ultimo为NULL;
SCOPE (MEASURES.Ultimo);SCOPE (Time.Year - Month - Date.All);this = Sum ( NULL:Tail(Existing Time.Year - Week - Date.Date,1).item(0).item(0),Measures.LagerStk );END SCOPE;
SCOPE ([Time].[Year - Week - Date].[All]);
this = Sum
(
NULL:Tail(Existing [Time].[Year - Month - Date].[Date],1).Item(0).Item(0)
,[Measures].[LagerStk]
);
END SCOPE;结束范围;
https://stackoverflow.com/questions/369198
复制相似问题