mdx measure 语法
来源:互联网 发布:redis java oracle 编辑:程序博客网 时间:2024/06/08 21:29
select
[Measures].[Email数]
on 0 ,
head(
nonempty(
filter([PartEmail].[EmailID].[EmailID],[Measures].[Email发送次数]=2)
),10) on 1
from [DBSS_Sino]
where
([DimDate].[自定义时间].&[半年内]
,
[ParEmailState].[EmailState].&[1])
附录:
MDX语法学习(一)filter与iif的使用
标签: MDXsqlserverfilteriif维度
当我们建好立方体之后,就可以使用MDX语法大展拳脚,下面我们以一个简单的例子逐步展开
先介绍一下我们的立方体,通过这个例子来学习filter与iif的使用。
先介绍一下我们的立方体,通过这个例子来学习filter与iif的使用。
我们首先谈需求
需求一:得到2009年5月,产品BM00000001的各城市年累计处方量
需求分析:
度量值:年累计处方量[Year_Pres_Quantity]
维度:[cust].[City_Name].[City_Name]
条件:[月份].&[2009-05-01T00:00:00],[material].[Material].&[BM00000001]
因此,构造我们的MDX如下:
select[Measures].[Year_Pres_Quantity]on 0
,nonempty [cust].[City_Name].[City_Name]on 1
from[医院销售分析]
WHERE([月份].&[2009-05-01T00:00:00]
,[material].[Material].&[BM00000001])
需求二:得到2009年5月,产品BM00000001的各城市目标医生的年累计处方量
注意:这里多了一个要求,必须是目标医生的
在我们的传统SQL中,这是很容易实现的,我们在where中增加一个where是否目标医生=true
即可
但是,在MDX中,where后面只能接维度,是否目标医生并不是我们的维度
那么,怎么办呢?
轮到filter上场了
构造我们的MDX如下:
select([Measures].[Year_Pres_Quantity])on 0
,nonempty filter([cust].[City_Name].[City_Name]
,[Measures].[是否目标医生]=true)on 1
from[医院销售分析]
WHERE([月份].&[2009-05-01T00:00:00]
, [material].[Material].&[BM00000001])
需求三:得到2009年5月,产品BM00000001的各城市目标医生和非目标医生各自的年累计处方量
在我们的传统SQL中,这种需求可以通过case when来实现,那么在MDX里有没有类似的东西呢?
当然有,轮到iif上场了
构造我们的MDX如下:
WITH
MEMBER [目标医生年累计处方量]AS 'IIf([Measures].[是否目标医生]=false, [Measures].[Year_Pres_Quantity],null)'
MEMBER [非目标医生年累计处方量]AS'IIf([Measures].[是否目标医生]=true, [Measures].[Year_Pres_Quantity],null)'
select{[目标医生年累计处方量], [非目标医生年累计处方量]}on 0
,nonempty [cust].[City_Name].[City_Name]on 1
from[医院销售分析]
WHERE([月份].&[2009-05-01T00:00:00]
,[material].[Material].&[BM00000001])
其实,我还试图过直接写在MDX的select中,不过不行,会报错,原因,我还搞不清楚,有哪位大虾明白的话,不凡指点一二,难道是切片技术不能直接写在Select中?
select(IIf([Measures].[是否目标医生]=false,[Measures].[Year_Pres_Quantity],0)
,IIf([Measures].[是否目标医生]=true,[Measures].[Year_Pres_Quantity],0))on 0
,nonempty [cust].[City_Name].[City_Name]
on 1
from[医院销售分析]
WHERE([月份].&[2009-05-01T00:00:00],[material].[Material].&[BM00000001])
出错:Axis0 函数需要2参数使用一个元组集表达式。实际使用的却是字符串或数值表达式。
需求四:得到2009年5月,产品BM00000001的各城市目标医生和非目标医生各自的年累计处方量,并且要得到总计栏
粗一看,这个需求和需求三没啥区分,不就是要得到总计吗,数据仓库里得到总计很容易哪,用merber就可以了,我们来写写
WITH
MEMBER [目标医生年累计处方量]AS 'IIf([Measures].[是否目标医生]=false, [Measures].[Year_Pres_Quantity],null)'
MEMBER [非目标医生年累计处方量]AS'IIf([Measures].[是否目标医生]=true, [Measures].[Year_Pres_Quantity],null)'
select{[目标医生年累计处方量], [非目标医生年累计处方量]}on 0
,nonempty [cust].[City_Name].merber on 1
from[医院销售分析]
WHERE([月份].&[2009-05-01T00:00:00]
,[material].[Material].&[BM00000001])
看看,把[cust].[City_Name]. [City_Name]改为[cust].[City_Name].merber
总计就出现啦!是不是大功告成了呢?
别急,仔细看看,咦,为什么目标医生和非目标医生下的小计值都是一样的?
哎,这就是数据仓库的特色哪
任何一个东西都不是十全十美的
数据仓库,他的速度之所以这么快,是因为他用立方体把很多数据都事先存好了,这样,你要总计,他就能直接给你找出来,不需要二次计算,可是,如果你要iif之后的小计,他就无能为力了,因为他没有存这样的数据哪!
MDX语法学习(一)filter与iif的使用就到这里了,IIF看来只能用在不需要小计、总计的地方,那如果又必须要小计,怎么办呢,大家琢磨琢磨,偶们MDX语法学习(二)再揭密!
- mdx measure 语法
- MDX语法
- 基本 MDX 查询 ( MDX 语法 教程 )
- 基本 MDX 查询 ( MDX 语法 教程 )
- 基本 MDX 查询 ( MDX 语法 教程 )
- 基本 MDX 查询 ( MDX 语法 教程 )
- MDX语法自动提示工具
- SSAS中MDX语法之一
- MDX的语法介绍PPT
- Measure
- MDX语法学习(一)filter与iif的使用
- Mondrian>>MDX语法学习--filter与iif的使用
- BI开发之——Mdx基础语法
- BI开发之——Mdx基础语法(2)
- MDX 函数参考 (MDX)
- MDX 函数参考 (MDX)
- MDXHelper 一款不只是OLAP MDX语法自动提示的IDE
- 关于 mdx...
- 趋势科技协助 FBI 破获史上最大的网络犯罪始末
- [翻译]关于Adobe最新的Flash/HTML5策略的问答
- servlet过滤器和监听器
- struts2 2.2.3正常运行时需要加载的包
- 第13章——类继承
- mdx measure 语法
- libevent介绍
- cgal的完整安装版本
- 新的形式下形成的新的模式
- Android深入浅出系列之实例应用—手机页面之间的跳转
- 段选择器 段描述符 段描述符表 线性地址形成
- C# 连接SQL数据库 常用连接字符串
- 你不知道的inline|from web
- C++项目转到C#时碰到的几个问题