求解mdx的case语句问题

红火火火 2012-05-16 11:13:01
我的问题是这样的,立方体里有某业务的金额,需要查出每个客户所有金额中产品A的金额占比,还要占比区间,mdx如下:

with
member [Measures].[产品A金额] as sum({[Prod].[Prod_Name].&[产品A]}
,[Measures].[Amount])

member [Measures].[产品A占比] as [Measures].[产品A金额]/[Measures].[Amount]
//, FORMAT_STRING ='0.00%'

member [Measures].[产品A占比区间] as
case when [Measures].[产品A占比]<0.3 then '30%以下'
when [Measures].[产品A占比]>=0.3 and [Measures].[产品A占比]<0.5 then '30%至50%'
else '50%以上' end


select {
[Measures].[Amount]
,[Measures].[产品A金额]
,[Measures].[产品A占比]
,[Measures].[产品A占比区间]
} on 0
,non empty [Big_Brand_Cust].[Cust_Name].[Cust_Name] on 1
from [BIG_BRAND_SFE_001]
where {[Date].[月份].&[2012-02-01T00:00:00]}



如果不加[产品A占比区间]这段case语句,得出的结果是正常的,只显示出有业务发生的客户62条数据,但是如果加上这段case语句,就显示出了所有的客户,数据量达到了好几万且金额等全是null,哪里出问题了呢?
...全文
157 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
红火火火 2012-05-16
  • 打赏
  • 举报
回复
事实表里没有为null的数据,加上case语句之后出现了null是因为把维度表中没发生业务的也显示出来了,怎样才能去掉这些呢?
APHY 2012-05-16
  • 打赏
  • 举报
回复
when [Measures].[产品A占比]=0 then '0' 不写也可以,因为0<0.3
APHY 2012-05-16
  • 打赏
  • 举报
回复

--数据库的表数据是不是有些数据是NULL?判断一下应该就可以了


with
member [Measures].[产品A金额] as sum({[Prod].[Prod_Name].&[产品A]}
,[Measures].[Amount])

member [Measures].[产品A占比] as [Measures].[产品A金额]/[Measures].[Amount]
//, FORMAT_STRING ='0.00%'

member [Measures].[产品A占比区间] as
case ISNULL([Measures].[产品A占比],0)
when [Measures].[产品A占比]<0.3 then '30%以下'
when [Measures].[产品A占比]=0 then '0'
when [Measures].[产品A占比]>=0.3 and [Measures].[产品A占比]<0.5 then '30%至50%'
else '50%以上' end


select {
[Measures].[Amount]
,[Measures].[产品A金额]
,[Measures].[产品A占比]
,[Measures].[产品A占比区间]
} on 0
,non empty [Big_Brand_Cust].[Cust_Name].[Cust_Name] on 1
from [BIG_BRAND_SFE_001]
where {[Date].[月份].&[2012-02-01T00:00:00]}
红火火火 2012-05-16
  • 打赏
  • 举报
回复
解决啦,代码改动了一点点,增加了对占比的为空判断,vastm的思路是对的,虽然语法不对,嘿嘿。
改过之后的代码如下:

with
member [Measures].[产品A金额] as sum({[Prod].[Prod_Name].&[产品A]}
,[Measures].[Amount])

member [Measures].[产品A占比] as [Measures].[产品A金额]/[Measures].[Amount]
//, FORMAT_STRING ='0.00%'

member [Measures].[产品A占比区间] as
case when [Measures].[产品A占比]=null then null
when [Measures].[产品A占比]<0.3 then '30%以下'
when [Measures].[产品A占比]>=0.3 and [Measures].[产品A占比]<0.5 then '30%至50%'
else '50%以上' end


select {
[Measures].[Amount]
,[Measures].[产品A金额]
,[Measures].[产品A占比]
,[Measures].[产品A占比区间]
} on 0
,non empty [Big_Brand_Cust].[Cust_Name].[Cust_Name] on 1
from [BIG_BRAND_SFE_001]
where {[Date].[月份].&[2012-02-01T00:00:00]}

695

社区成员

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

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