Ssas 时间不在轴上时平行周期问题
此查询中计算的成员[Amount LM]=上月金额有什么问题?如果我在行上指定时间,这似乎是可行的,但如果我不指定,则失败,即使我在where子句中有一个日期 具有 成员[金额LM]为 [措施][数额], 平行周期 [日期][年-季度-月-日期-层次结构][年和月], 1. [日期][年-季度-月-日期-层次结构].CurrentMember 选择 列上的{[Amount LM],[Measures].[Amount]}, [度量值类型].[名称]和[22]-与[度量值].[金额]无关;在实际情况下用作测量开关,但为简单起见,此处进行了调整 -注释掉要失败的下一行 *[日期].[年-季度-月-日期-层次结构].[年和月] 成排 从[立方体] 其中【日期】【年份号】、【2019年】 ; 工作案例中的结果:Ssas 时间不在轴上时平行周期问题,ssas,mdx,olap,Ssas,Mdx,Olap,此查询中计算的成员[Amount LM]=上月金额有什么问题?如果我在行上指定时间,这似乎是可行的,但如果我不指定,则失败,即使我在where子句中有一个日期 具有 成员[金额LM]为 [措施][数额], 平行周期 [日期][年-季度-月-日期-层次结构][年和月], 1. [日期][年-季度-月-日期-层次结构].CurrentMember 选择 列上的{[Amount LM],[Measures].[Amount]}, [度量值类型].[名称]和[22]-与[度量值].[金额]无关;在实际情
Amount LM | Amount
Costs | Jan 2019 | (null) | 109600
Costs | Feb 2019 | 109600 | 218300.5
Costs | Mar 2019 | 218300.5 | 392250
Costs | Apr 2019 | 392250 | 206800
Costs | May 2019 | 206800 | 174700
Costs | Jun 2019 | 174700 | 298400
Costs | Jul 2019 | 298400 | 264550
Costs | Aug 2019 | 264550 | 424100
Costs | Sep 2019 | 424100 | 129650
Costs | Oct 2019 | 129650 | 330050
Costs | Nov 2019 | 330050 | (null)
Costs | Dec 2019 | (null) | (null)
没有
* [Date].[Year - Quarter - Month - Date - Hierarchy].[Year and Month]
部分,金额为空
|Amount LM| Amount
Costs | (null) | 2548400.5
你的计算没有问题。要理解空值,您需要知道 平行周期是如何工作的 UserHierarchy上的CurrentMember如何工作 当你有 [日期].[年-季度-月-日期-层次结构].[年和月] 在您的行轴中 [日期][年-季度-月-日期-层次结构].CurrentMember currentmember表达式返回用户层次结构[Year-Quarter-Month-Date-HIERARCHY]的当前成员。然后,平行周期函数尝试查找与级别[年和月]相关的表亲成员 当您从行中删除用户层次结构时,currentmember返回2019,这是级别YEAR Number的成员,因此并行期间无法找到与级别[年和月]相关的同级,因为传递的currentmember高于指定的级别。若要选中,请将where中的年份替换为month member,并且行上没有日期,则该选项将起作用。要解决此问题,您需要提供一个备用逻辑,以防传递了更高级别的成员或其他边缘情况使用下面的脚本,它将在任何边缘情况下返回100
WITH
MEMBER [Amount LM] as
case when [Date].[Year - Quarter - Month - Date - Hierarchy].CurrentMember.level.name <>"Year and Month" then 100
else
(
[Measures].[Amount],
ParallelPeriod (
[Date].[Year - Quarter - Month - Date - Hierarchy].[Year and Month],
1,
[Date].[Year - Quarter - Month - Date - Hierarchy].CurrentMember
)
)
end
结果
现在让我们评论一下
[日期][日历][月份]
结果
请注意ParallelPeriod返回的Null,现在让我们替换where from Month中的年份。这使ParalElPeriod能够返回有用的内容
WITH
MEMBER [Amount LM] as
(
[Measures].[Internet Sales Amount],
ParallelPeriod ([Date].[Calendar].[Month],1,[Date].[Calendar].currentmember)
)
MEMBER [Amount LM_ParallelPeriodName] as
(
ParallelPeriod ([Date].[Calendar].[Month],1,[Date].[Calendar].currentmember).name
)
MEMBER [Amount LM_CalendarCurrentmember] as
(
[Date].[Calendar].currentmember.name
)
SELECT
{[Amount LM], [Measures].[Internet Sales Amount],[Amount LM_ParallelPeriodName],[Amount LM_CalendarCurrentmember]} ON COLUMNS,
[Product].[Category].&[1] * [Date].[Calendar].[Month]
ON rows
from [Adventure Works]
WHERE [Date].[Month Name].[September 2013]
结果
下面的内容有用吗?我想我现在明白了。谢谢
WITH
MEMBER [Amount LM] as
(
[Measures].[Internet Sales Amount],
ParallelPeriod ([Date].[Calendar].[Month],1,[Date].[Calendar].currentmember)
)
MEMBER [Amount LM_ParallelPeriodName] as
(
ParallelPeriod ([Date].[Calendar].[Month],1,[Date].[Calendar].currentmember).name
)
MEMBER [Amount LM_CalendarCurrentmember] as
(
[Date].[Calendar].currentmember.name
)
SELECT
{[Amount LM], [Measures].[Internet Sales Amount],[Amount LM_ParallelPeriodName],[Amount LM_CalendarCurrentmember]} ON COLUMNS,
[Product].[Category].&[1] --* [Date].[Calendar].[Month]
ON rows
from [Adventure Works]
WHERE [Date].[Calendar Year].&[2013]
WITH
MEMBER [Amount LM] as
(
[Measures].[Internet Sales Amount],
ParallelPeriod ([Date].[Calendar].[Month],1,[Date].[Calendar].currentmember)
)
MEMBER [Amount LM_ParallelPeriodName] as
(
ParallelPeriod ([Date].[Calendar].[Month],1,[Date].[Calendar].currentmember).name
)
MEMBER [Amount LM_CalendarCurrentmember] as
(
[Date].[Calendar].currentmember.name
)
SELECT
{[Amount LM], [Measures].[Internet Sales Amount],[Amount LM_ParallelPeriodName],[Amount LM_CalendarCurrentmember]} ON COLUMNS,
[Product].[Category].&[1] * [Date].[Calendar].[Month]
ON rows
from [Adventure Works]
WHERE [Date].[Month Name].[September 2013]