SSAS求加权平均

boa_bi 2008-11-03 10:36:38
加精
在使用MDX查询语句的时候遇到一个不会解决的问题
想求地区维度为‘1’的时候customer+consumer的加权平均数
假如在地区‘1’处有如下几条数据:
price customer consumer
1 10 20
2 30 40
3 50 60
想要的公式是:
[(10+20)×1 + (30+40)×2 + (50+60)×3]/(1+2+3)
不知道使用MDX语句或者表达式如何去求。
...全文
801 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
JBean 2008-11-05
  • 打赏
  • 举报
回复
你客气了,谁都是从初学开始. 我好久没做这些了,看到你的问题, 让我对经验又熟悉了一下,也是很有好处.
boa_bi 2008-11-05
  • 打赏
  • 举报
回复
我初学者,公司扔个小项目给我,却不提供什么技术支持,得到您的指点,受益匪浅,谢谢了
jing1985311 2008-11-04
  • 打赏
  • 举报
回复
ss
boa_bi 2008-11-04
  • 打赏
  • 举报
回复
谢谢大家了,真的谢谢了。碰到高手了,太幸运了!
月光下的土豆 2008-11-04
  • 打赏
  • 举报
回复
d
JBean 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 MSTOP 的回复:]
大家注意了,Mr_JBean是高手。大家多多捧场!!!
呵呵,贴子加精。谢谢 Mr_JBean 。
[/Quote]

太惭愧了,我就是炒剩饭,几年都没用这些了,这几年一直在公司做"思想家".
L相杉 2008-11-04
  • 打赏
  • 举报
回复
xuexi,xuexi!!!!!!!!!!!!!!!
JBean 2008-11-04
  • 打赏
  • 举报
回复
要想两者一样,则第一个MDX需要重新写过,你试一下这样是否可以,将原MDX中的[Store].[All Stores].[USA]做以下改动:

1)对USA先求叶子,也就是最末的一个级别上的Descendants,
2)再对对上一步求Aggregate;

大致如下(需自己调试):

Aggregate(Descendants([Store].[All Stores].[USA],[Store].[Store Name]))
JBean 2008-11-04
  • 打赏
  • 举报
回复
两者的结果一般情况下应该是不一样的,除非USA下面只有一个成员或USA是叶子成员。解释如下。

假设dw中关于USA,只有以下几行事实数据,需要求解result=(b+c)*a,则:
国家 省份 a b c
1 1 1 10 100
1 2 2 20 200
1 3 3 30 300


1) MDX计算
mdx运算时,首先是聚合为:

国家 省份 a b c
1 all 6 60 600

result=(60+600)*6=3960

2)SQL计算

Sql运算时,首先计算公式,然后再sum聚合,即
result=(10+100)*1+(20+200)*2+(30+300)*3= 1540

总之,也就是说:sum(calc(expresion))<>calc(sum(Items))

boa_bi 2008-11-04
  • 打赏
  • 举报
回复
还想请教一下。如果简单的这样写
with member [Measures].[a] as '([Measures].[Store Sales]+[Measures].[Store Cost])*[Measures].[Sales Count]'
select
{[Measures].[a]} on columns,
{[Store].[All Stores].[USA]} on rows
from sales
我的理解:显示出来的数字应该是所有USA地区数据做([Measures].[Store Sales]+[Measures].[Store Cost])*[Measures].[Sales Count]运算之后再做和

运行之后发现这个与在management studio中执行如下的SQL语句的结果不一样
select sum((
[Store Sales]+[Store Cost])*[Sales Count])
from sales where region=1;
不知道哪里出了问题,还是我的理解有问题
华芸智森 2008-11-03
  • 打赏
  • 举报
回复
大家注意了,Mr_JBean是高手。大家多多捧场!!!
呵呵,贴子加精。谢谢 Mr_JBean 。
华芸智森 2008-11-03
  • 打赏
  • 举报
回复
顶2楼。
补充一下,定义计算成员最好加上 :solve_order=N (按计算机顺序 N=1,2,3,4,.....)
JBean 2008-11-03
  • 打赏
  • 举报
回复
补充说明:
如果和USA同轴的不止时间轴,则可将余下的轴执行{{轴1成员集合}*{……}*{轴n成员集合}}操作,替代解答中的{[Time].[1997].[Q1],[Time].[1997].[Q2],[Time].[1997].[Q3]},因为CrossJion的结果仍然是SET.
JBean 2008-11-03
  • 打赏
  • 举报
回复
上面错了一个运算符号。

假定:
1、price = [Measures].[Sales Count]
customer= [Measures].[Store Sales]
consumer =[Measures].[Store Cost]
2、地区1=USA
三条数据发生在Q1,Q2,Q3


则,MDX为:
with member [Measures].[a] as '([Measures].[Store Sales]+[Measures].[Store Cost])*[Measures].[Sales Count]'
member [Measures].[b] as 'sum({[Time].[1997].[Q1],[Time].[1997].[Q2],[Time].[1997].[Q3]},[Measures].[Sales Count])'
member [Measures].[result] as '[Measures].[a]/[Measures].[b]'
select
{[Measures].[result]} on columns,
{[Store].[All Stores].[USA]} on rows
from sales
JBean 2008-11-03
  • 打赏
  • 举报
回复
with member [Measures].[a] as '([Measures].[Store Sales]*[Measures].[Store Cost])*[Measures].[Sales Count]'
member [Measures].[b] as 'sum({[Time].[1997].[Q1],[Time].[1997].[Q2],[Time].[1997].[Q3]},[Measures].[Sales Count])'
member [Measures].[result] as '[Measures].[a]/[Measures].[b]'
select
{[Measures].[result]} on columns,
{[Store].[All Stores].[USA]} on rows
from sales

7,388

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 数据仓库
社区管理员
  • 数据仓库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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