初用数扰仓库,这个问题困扰了几个星期了
试过新增计算成员,新增脚本命令,都不管用,那位大侠用过MDX,支两招哈
用户有个需求,简化如下:
按处方区间查询物理表A:
年 月 医生 本月处方量 所属区间
2009 1 张三 50 0-100区间
2009 1 李四 500 100以上区间
2009 1 王五 50 0-100区间2009 2 张三 200 100以上区间
2009 2 李四 20 0-100区间
2009 2 王五 10 0-100区间2009 3 张三 80 0-100区间
2009 3 李四 200 100以上区间
2009 3 王五 200 100以上区间希望得到当前月每个区间对应的本年累计及本月数假如当前查询条件为2009年3
用户希望看到结果为(即,以3月的区间为基数,得到本年累计数据)
区间 本年累计数据 本月数 月
0-100区间 330 80 3
100以上区间 980 180 3即,如果用SQL的写法为:
;with aa
as
(
select max(所属区间) 所属区间,医生
from a where 月份=2
group by 医生)
select aa.所属区间,a.医生,
,sum(本月处方量) 本年累计数据
,sum(case 月份=2 then 本月处方量 else 0 end) 本月处方量
from a left join aa on a.医生=aa.医生
group by aa.所属区间,a.医生
可是,如果把区间做为维度
出现的结果是
区间 本年累计数据 本月数 月
0-100区间 210 80 3
100以上区间 1100 180 3即,如果用SQL的写法为:
select a.所属区间,a.医生,
,sum(本月处方量) 本年累计数据
,sum(case 月份=2 then 本月处方量 else 0 end) 本月处方量
from a
group by a.所属区间,a.医生
请问,如何让MDX可以写出第一种结果呢
试过新增计算成员,新增脚本命令,都不管用,那位大侠用过MDX,支两招哈
用户有个需求,简化如下:
按处方区间查询物理表A:
年 月 医生 本月处方量 所属区间
2009 1 张三 50 0-100区间
2009 1 李四 500 100以上区间
2009 1 王五 50 0-100区间2009 2 张三 200 100以上区间
2009 2 李四 20 0-100区间
2009 2 王五 10 0-100区间2009 3 张三 80 0-100区间
2009 3 李四 200 100以上区间
2009 3 王五 200 100以上区间希望得到当前月每个区间对应的本年累计及本月数假如当前查询条件为2009年3
用户希望看到结果为(即,以3月的区间为基数,得到本年累计数据)
区间 本年累计数据 本月数 月
0-100区间 330 80 3
100以上区间 980 180 3即,如果用SQL的写法为:
;with aa
as
(
select max(所属区间) 所属区间,医生
from a where 月份=2
group by 医生)
select aa.所属区间,a.医生,
,sum(本月处方量) 本年累计数据
,sum(case 月份=2 then 本月处方量 else 0 end) 本月处方量
from a left join aa on a.医生=aa.医生
group by aa.所属区间,a.医生
可是,如果把区间做为维度
出现的结果是
区间 本年累计数据 本月数 月
0-100区间 210 80 3
100以上区间 1100 180 3即,如果用SQL的写法为:
select a.所属区间,a.医生,
,sum(本月处方量) 本年累计数据
,sum(case 月份=2 then 本月处方量 else 0 end) 本月处方量
from a
group by a.所属区间,a.医生
请问,如何让MDX可以写出第一种结果呢
[医生].[医生].CurrentMember.Properties("所属区间"),就可以得到所属区间,但这样,是要求维度里必须有医生,而我要的是按区间汇总的
如果把医生明细直接返回给SQL server ,在SQL里再加工,速度就很慢了有没有可能在维度里不显示维度,却显示相关属性(说胡话中,偶都觉得不可能)
璇玑图,好像很厉害,莫非你写诗也厉害????HOHO
测试的mdx语句with
member [t Test].[医生].[0-100区间] as sum({[t Test].[医生].[张三]})
member [t Test].[医生].[100以上区间] as sum({[t Test].[医生].[李四],[t Test].[医生].[王五]})
select
non empty
(crossjoin(
{[t Test].[医生].[0-100区间],[t Test].[医生].[100以上区间]},
{[t Test].[年].children}
))on rows,
{[Measures].[t Test 计数],
[Measures].[本月处方量] } on columns
from [Dbtestas]
返回结果如下:
其中
member [t Test].[医生].[0-100区间] as sum({[t Test].[医生].[张三]})
member [t Test].[医生].[100以上区间] as sum({[t Test].[医生].[李四],[t Test].[医生].[王五]})这两句需要你从客户端提前获取3月份的映射关系来生成,医生越多语句越长...
member [Measures].[累计] as [Measures].[本月处方量]
member [Measures].[本月] as ([Measures].[本月处方量],[t Test].[月].[3])
member [Measures].[月数] as 3
member [t Test].[医生].[0-100区间] as sum({[t Test].[医生].[张三]})
member [t Test].[医生].[100以上区间] as sum({[t Test].[医生].[李四],[t Test].[医生].[王五]})select
non empty
(
{[t Test].[医生].[0-100区间],[t Test].[医生].[100以上区间]}
)on rows,
{[Measures].[累计], [Measures].[本月],[Measures].[月数]} on columns
from [Dbtestas]
where [t Test].[年].[2009]/*
累计 本月 月数
0-100区间 330 80 3
100以上区间 980 400 3
*/
能否这样先按照你要的医院+科室+医生+业务员这些维度汇总,在sqlserver中用连接服务器和opendatasource+mdx语句来访问ssas,得到的中间结果在sql中inner join之后再聚合一次.