SSAS 计算成员 如何 针对维度成员给定不同公式

garmypykitty 2013-05-30 11:54:09
各位达人们,这里请教你们一个关于计算公式根据成员会有变更的问题.
财务科目维(父子): [F_Subj].[Subj] (640301是6403下级)
地区维度:[Area].[Area]
产品维度:[Product].[Product]
时间维度:[date].[date]

事实表与四个维表关联,一个度量值 value

财务指标公式: (A-B*m)/n m,n为系数 (为给定值,无数据来源)
[Result]=
( ([F_Subj].[Subj].&[6403],[Measures].[VALUE]) - ([F_Subj].[Subj].&[640301],[Measures].[VALUE])*1.12 )/0.12

在某几个地区成员中,公式的系数有变化
[Result]=
( ([F_Subj].[Subj].&[6403],[Measures].[VALUE]) - ([F_Subj].[Subj].&[640301],[Measures].[VALUE])*1.11 )/0.11


MDX语句为: 只查看产品维上的结果.
select
[Result]
on 0 ,
[Product].[Product]
on 1
from [cube]
where [date].[date]

在计算成员中使用 case iif 等逻辑判断是无效的,因为[area]维度没有出现在MDX语句中,拿不到当前成员.
我用scope ([area],[result]) 定义作用域,貌似对计算成员不起作用.
VALUE值是不能用定义作用域去做更改的,因为其他计算成员会用到 .&[6403]的原始值.

求解.
...全文
272 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
garmypykitty 2013-08-14
  • 打赏
  • 举报
回复
一直没人回答么,自己来说说解决方法吧。 使用case判断当前 [area]维度来解决 CASE WHEN [Area].[Area].currentmember.level.ordinal = 0 THEN //不观察[Area]维时,或者说[Area]维度为all时 ( sum( (//排除不套用常规公式的项(使用公式1) EXCEPT( [Area].[Area].[Area].members , [Area].[Area].[Area].&[1234567] ) , [DimFiSubj].[Subj].&[6403] ) , [Measures].[Value] ) - sum( ( EXCEPT( [Area].[Area].[Area].members , [Area].[Area].[Area].&[1234567] ) , [DimFiSubj].[Subj].&[640301] ) ,[Measures].[Value] )*1.12 )/0.12 + ( //非常规公式的项(公式2) ( [Area].[Area].[Area].&[1234567],[DimFiSubj].[Subj].&[6403] , [Measures].[Value] ) - ( [Area].[Area].[Area].&[1234567],[DimFiSubj].[Subj].&[640301], [Measures].[Value] ) *1.11 )/0.11 //观察[Area]维且 成员为 指定值时 WHEN [Area].[Area].currentmember IS [Area].[Area].[Area].&[1234567] THEN ( ( [DimFiSubj].[Subj].&[6403] , [Measures].[Value] ) - ( [DimFiSubj].[Subj].&[640301], [Measures].[Value] ) *1.11 )/0.11 ELSE ( ( [DimFiSubj].[Subj].&[6403] , [Measures].[Value] ) - ( [DimFiSubj].[Subj].&[640301], [Measures].[Value] ) *1.12 )/0.12 END
garmypykitty 2013-05-31
  • 打赏
  • 举报
回复
引用
帮顶 “在计算成员中使用 case iif 等逻辑判断是无效的,因为[area]维度没有出现在MDX语句中,拿不到当前成员.” 顺便问一句,既然拿不到当前成员,怎么知道该用哪个系数?
因为不观察area维度,而且area也不为条件(或者说是area.all为条件). 在area轴上的计算类似于加权的算法.在事实表中实际上不存在这个指标的结果值. 现在要看的是 area.all这一块的总数.
Leon_He2014 2013-05-30
  • 打赏
  • 举报
回复
帮顶 “在计算成员中使用 case iif 等逻辑判断是无效的,因为[area]维度没有出现在MDX语句中,拿不到当前成员.” 顺便问一句,既然拿不到当前成员,怎么知道该用哪个系数?

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧