SSAS计算脚本中的ClosingPeriod函数返回空白
以下是表达方式: 结束期间([期间].[会计日期].[日期],[期间].[会计日期].CurrentMember) 有人能提出为什么它会返回空白吗 更新的完整脚本:SSAS计算脚本中的ClosingPeriod函数返回空白,ssas,mdx,cube,Ssas,Mdx,Cube,以下是表达方式: 结束期间([期间].[会计日期].[日期],[期间].[会计日期].CurrentMember) 有人能提出为什么它会返回空白吗 更新的完整脚本: CASE ClosingPeriod( [Date].[Fiscal].[DATE], [Date].[Fiscal].CURRENTMEMBER ) WHEN null THEN MAX (NONEMPTY (
CASE
ClosingPeriod(
[Date].[Fiscal].[DATE],
[Date].[Fiscal].CURRENTMEMBER
)
WHEN null THEN
MAX
(NONEMPTY
(
[Period].[Fiscal Dates].[Date].Members
*
[Measures].[Indiv Count]
),
[Period].[Date].currentmember.MEMBER_KEY
)
ELSE
ClosingPeriod(
[Date].[Fiscal].[DATE],
[Date].[Fiscal].CURRENTMEMBER
)
我正在使用此脚本为变量赋值。在此表达式中,始终执行null大小写。需要查看所有脚本才能进行分析,因为该表达式的上下文在
MDX
中非常重要
在Adventure Works多维数据集上尝试以下操作:
WITH
MEMBER [Measures].[Close] AS
CLOSINGPERIOD(
[Date].[Fiscal].[DATE]
, [Date].[Fiscal].CURRENTMEMBER
).Properties('key0', TYPED)
SELECT
{
[Measures].[Close]
} on 0,
{[Date].[Fiscal].[Fiscal Year].MEMBERS}
ON 1
FROM [Adventure Works]
以下返回似乎正常:CLOSINGPERIOD
正在返回财务
层次结构的日期
级别的最后一个成员:
包括一个
案例
结构,我仍然得到回报:
WITH
MEMBER [Measures].[Close] AS
CASE
ClosingPeriod(
[Date].[Fiscal].[DATE],
[Date].[Fiscal].CURRENTMEMBER
).MEMBER_KEY
WHEN null THEN
MAX
(NONEMPTY
(
[Date].[Fiscal].[DATE].Members
*
[Measures].[Reseller Sales Amount]
),
[Date].[Fiscal].CURRENTMEMBER.MEMBER_KEY
)
ELSE
ClosingPeriod(
[Date].[Fiscal].[DATE],
[Date].[Fiscal].CURRENTMEMBER
).MEMBER_KEY
END
SELECT
{
[Measures].[Reseller Sales Amount],
[Measures].[Close]
} on 0,
{[Date].[Fiscal].[Fiscal Year].MEMBERS}
ON 1
FROM [Adventure Works]
要尝试在以下行中强制会计层次结构为null,我将对行使用日历:
WITH
MEMBER [Measures].[Close] AS
CASE
WHEN
IsEmpty
(
ClosingPeriod
(
[Date].[Fiscal].[DATE]
,[Date].[Fiscal].CurrentMember
).Member_Key
)
THEN
Max
(
NonEmpty
(
[Date].[Fiscal].[DATE].MEMBERS * [Measures].[Reseller Sales Amount]
)
,[Date].[Fiscal].CurrentMember.Member_Key
)
ELSE
ClosingPeriod
(
[Date].[Fiscal].[DATE]
,[Date].[Fiscal].CurrentMember
).Member_Key
END
SELECT
{
[Measures].[Reseller Sales Amount]
,[Measures].[Close]
} ON 0
,{[Date].[Calendar].[Calendar Year].MEMBERS} ON 1 //][Date].[Fiscal].[Fiscal Year].MEMBERS
FROM [Adventure Works];
这将返回以下内容:
这不是一个完整的解决方案,而是一种找到它的方法 在复杂的计算中,添加一些辅助度量有助于理解发生了什么。我通常从大型计算的子表达式中进行这些度量,将
.Name
添加到成员中,或对集合应用SetToStr
(假设它们的显示大小合理)。因此,度量定义如下
[Date].[Fiscal].CURRENTMEMBER.Name
及
如果将这些度量值添加到查询中,会发生什么,这将使其更加透明
此外,它通常有助于在将计算放入计算脚本之前,在
SELECT
语句的WITH
子句中在线尝试计算,因为更改此脚本和查看更改的即时结果更快。请添加脚本的其余部分-上下文在MDX中非常重要?实际上,我正在使用Visual Studio创建SSAS项目。我正在计算脚本编辑器中编写此脚本,并希望将CLosingPeriod返回的值保存在变量中。@Kash ok。“显示空白”是在什么上下文中?例如,如果查询中没有在行或列上使用层次结构[Period].[Fiscal Dates]
,那么您的计算将是空白的,因为实际上没有currentmember。我已用完整脚本更新了问题。请看一看。@whytheq您故意混合[Date]是什么原因。[日历]
和[日期][会计]
第三次尝试中的层次结构?@FrankPl-这是经过深思熟虑的,以便财政不在行或列上-这是为了让财政测试案例的THEN部分得到null。否则我们会遇到null吗?+1将在我的Adventure Works版本的计算中尝试此操作…我可以在我的反对AdWks的第二个脚本。OP似乎说他的clac总是null
。有什么想法吗,弗兰克?@whytheq实际上,这是一个边缘案例,我不确定案例的结束时间(…)当
真正比较时。在数字上下文中,NULL
和0
应该相等。如果要检查成员引用是否为空,则不应使用=NULL
,而应使用IsEmpty()
。因此,CASE
表达式的变体在每个中检查一个完整的条件时,
在这里会更合适,因为你可以更清楚地说明你真正比较的是什么。好的,弗兰克,让我修改我帖子中的第二个脚本,以反映你的建议-我将对发现进行评论。弗兰克-我已经为你添加了第三个脚本我的帖子。我认为这个计算中有一个矛盾-如果[Date].[Fiscal]为空/空,那么为什么要在最大计算中包括[Date].[Fiscal]?!
ClosingPeriod(
[Date].[Fiscal].[DATE],
[Date].[Fiscal].CURRENTMEMBER
).Name