微软BI开拓者

首页 » 多维分析专区 » 多维建模 » 计算成员设置的困惑
tumu - 9/11/2007 10:47:00 AM
数据结构

总帐时间

区域

产品

销售模式

科目

量度

2007-6-1

华东

A

分销

收入

1000

2007-6-2

华东

A

分销

成本

500

2007-6-3

华东

A

分销

收入调整1

-20

2007-7-1

华东

A

分销

收入

1100

2007-7-2

华东

A

分销

成本

510

2007-7-3

华东

A

分销

收入调整1

-60


分析表一

业务类型(会计科目)

金额

毛利率影响数

差异

x

y

x

y

收入类
收入





收入调整1





收入调整2





收入调整小计





成本类
成本





成本调整1





成本调整2





成本调整小计





总计
总计






1x月、y月为任意组合非同比、环比
2、该分析表还带有其它维度筛选条件:比如:[产品] like ?? And [商业模式]<>?? And [区域]=??
3、收入调整类:
毛利率影响数 =(收入-收入调整i-成本总额) / (收入-收入调整) - (收入-成本总额)/ 收入
4、成本类:
毛利率影响数 = 成本调整 / 收入
5、差异
差异 = 毛利影响数x-毛利影响数y
tumu - 9/11/2007 10:48:00 AM
目前的思路

1、
设置了一个度量:[量度]
2、
科目维度表物理设计如下

id


科目一级


科目一级编码


科目二级


科目二级编码


1


收入类


501


收入


501001


2


收入类


501


收入调整1


501002


3


收入类


501


收入调整2


501003


4


成本类


502


成本


502001


5


成本类


502


成本调整1


502002


6


成本类


502


成本调整2


502003


..


..


..


..


..


在科目维度上设置了一个层次结构,四个维度属性(科目一级、科目二级、科目一级编码、科目二级编码)

科目层次


科目一级编码


科目二级编码



3、
对分析表一中的毛利影响数定义计算成员表达式

CREATE MEMBER CURRENTCUBE.[MEASURES].[毛利影响数]


AS


Iif(


[科目].[科目一级]=[501],


--收入类毛利影响数


(([Measures].[量度],[科目].[科目二级编码].&[5010100])


-[Measures].[量度]-([Measures].[量度],[科目].[科目二级编码].&[5020100])


)/(


([Measures].[量度],[科目].[科目二级编码].&[5010100])


-


[Measures].[量度]) -((


([Measures].[量度],[科目].[科目二级编码].&[5010100])


-


([Measures].[量度],[科目].[科目二级编码].&[5020100])


)/([Measures].[量度],[科目].[科目二级编码].&[5010100])),


--成本类毛利影响数


(成本类毛利影响数表达式。。略)


),


FORMAT_STRING = ";Percent",

疑惑

1、
是不是可以通过定义计算成员和脚本完成所有公式的定义?
2、
维度模型的设计对计算成员的设计有那些影响?如果我将不同的科目定义成不同的度量,对表达式的定义有什么影响?
3、
[
数量]信息是与科目的其它量度合并成一个度量,还是分开?合并、分拆对后续的分析有什么影响?
4、
对表一中已定义的计算成员[毛利影响数]的查询时,在查询轴使用维度属性([科目].[科目二级编码].&[5020500])和维度层次([科目].[科目层次].[科目二级编码].&[5010501]),其查询结果是不同的,原因是什么?查询如下:

select


crossjoin(


crossjoin(


{[总帐日期].[Calendar Year].&[2007]},


{[总帐日期].[Hierarchy].[Calendar Year].&[2007].&[1].&[1],[总帐日期].[Hierarchy].[Calendar Year].&[2007].&[1].&[2]}


),{[Measures].[量度],[Measures].[毛利影响数]}


)


on columns,


{


[科目].[科目二级编码].&[5020100]:[科目].[科目二级编码].&[5020500],


[科目].[科目二级编码].&[5010301]:[科目].[科目二级编码].&[5010501]


}


on rows


from demo

当在查询轴中使用了层次结构,所有科目的[毛利影响数]都显示100%

select


crossjoin(


crossjoin(


{[总帐日期].[Calendar Year].&[2007]},


{[总帐日期].[Hierarchy].[Calendar Year].&[2007].&[1].&[1],[总帐日期].[Hierarchy].[Calendar Year].&[2007].&[1].&[2]}


),{[Measures].[量度],[Measures].[毛利影响数]}


)


on columns,


{


[科目].[科目层次].[科目二级编码].&[5020100]:[科目].[科目层次].[科目二级编码].&[5020500],


[科目].[科目层次].[科目二级编码].&[5010301]:[科目].[科目层次].[科目二级编码].&[5010501]


}


on rows


from demo
jinligang - 9/11/2007 4:51:00 PM
tumu - 11/2/2007 9:53:00 PM
之前的回复不知为什么被删除了??
谢谢金老师的答复。您帖子都拜读过,收获很多。前面的问题中的[Measures].[调整]即是[Measures].[量度]。

在查询中如果使用了科目层次结构就得不到结果的原因在于科目层次结构中属性间未设置关系。新的问题是为什么用nature的层次结果正确而用navigation的层次却得不到正确的结果呢?是否设置属性关系在处理上有什么不同呢?

问题中的任意两月的差异数是定义不出来的,现在的做法是在计算成员中多定义些同比和环比,任意的比较放入到report中去做。
1
查看完整版本: 计算成员设置的困惑