[译]SSRS 编写带参数的MDX报表
编写MDX报表长久以来对于报表人员来说都比较痛苦. 当然如果你用查询设计器(Query Designer) 直接拖拉数据集那就很方便,但是你们有没有想过查询设计器是怎么创建MDX的.或者创建的参数是如何工作的? 我听到很多用Analysis Services 作为数据源的(包括我)报表人员说写参数太难了,所以他们用查询设计器做报表. 我想关键的问题是查询设计器做的MDX看起来要比实际上更复杂.如果你知道一些MDX基础,你应该能直接写MDX而不是用查询分析器 ,你就是喜欢用查询分析器也没关系.本文的目的是指导你写基础的MDX语句,并且参数化 .
我们会用到两个 MDX 函数 :
返回字符表达式指定的集合(MSDN的定义),其实就是把你写转为MDX集合.
返回字符表达式指定的成员(MSDN的定义).就是把你写的转为MDX成员.
我们先装下 Adventure Works cube,如果你没有的话可以从www.codeplex.com下载.假设你知道一些 Reporting Services一些基础支持 and not define each component of the tool that is not new for this example.
建立一个新的Report Server 项目和报表,并且使用Adventure Works cube作为数据源. 然后建立名为CategorySales 的数据集.在查询设计器里面点击设计模式(Design Mode)按钮,然后开始写查询. 下面是个无参数的查询例子.
Select [Measures].[Internet Sales Amount] on Columns From [Adventure Works]
这个查询返回总销量,不过就报表本身而言它没任何意义.让我们添加销量对应的产品目录.
Select [Measures].[Internet Sales Amount] on Columns, [Product].[Category].Children on Rows From [Adventure Works]
这对我们假想的用户需求来说还不够少,除了看所有产品的销量以外,他们还想弄个参数,使他们可以从下拉框中选择想要看的类型 .为此,我们点击查询参数按钮来创建一个参数.
- 变量名 ProductCategory
- 指定维度和层次 Product 维度 和 Category 层次
- 选择多值复选框,这样可以接受多个值.
- 最后选择一个默认值. 例子中我们选择 Bikes
点击确认以后,你需要修改MDX 来使用你创建的参数, 修改如下:
Select [Measures].[Internet Sales Amount] on Columns, StrToSet(@ProductCategory, Constrained) on Rows From [Adventure Works]
我们用 StrToSet 来转换用户选择的变量值,是的MDX可以理解它们. Constrained 标记表示要确保有一个成员在集合中.
点击OK,然后一路创建下去.. 你会注意到,ProductCategory的下拉框已经自动创建.
现在让我们进一步完善这个例子. 我们再添加两个函数,来创建一个日期范围.再次单击查询参数按钮,添加参数StartDate 和 EndDate ,然后引用 Date 维度和 Date属性. 默认值随便填.
在 MDX 里面添加where子句来限制时间范围. 我们用 StrToMember 来转换.
Select [Measures].[Internet Sales Amount] on Columns, StrToSet(@ProductCategory, Constrained) on Rows From [Adventure Works] Where StrToMember(@StartDate, Constrained) :StrToMember(@EndDate, Constrained)
下面是预览结果
原文连接 http://www.bidn.com/blogs/DevinKnight/ssis/6252/writing-parametrized-mdx-for-reporting-services
[译]SSRS 编写带参数的MDX报表的更多相关文章
- SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表
SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表 SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表 2013-10-09 23:09 by BI Wor ...
- 微软BI 之SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表
基于数据仓库上的 SSRS 报表展示,一般可以直接通过 SQL 查询,存储过程,视图或者表等多种方式将数据加载并呈现在报表中.但是如果是基于 Cube 多维数据集的数据查询,就不能再使用 SQL 的语 ...
- 编写带参数decorator
无参的@log装饰器: def log(f): def fn(x): print 'call ' + f.__name__ + '()...' return f(x) return fn 发现对于被装 ...
- python中编写带参数decorator
考察上一节的 @log 装饰器: def log(f): def fn(x): print 'call ' + f.__name__ + '()...' return f(x) return fn 发 ...
- 微软BI 之SSRS 系列 - 基于时间段参数的 MDX 查询以及时间日历 Date Picker 的时间类型参数化
今天在天善问答里看到一个问题,如果我没有理解错的话,它应该是指比如在一个报表中选取一个时间段,然后求出这个时间段的某个 Measure 的 SUM 和.并且同时求出这两个时间点对应的上一年的时间点之间 ...
- ReportView动态加载带参数的RDCL文件及子报表
本文来自Torres.Wu发表在博客园的博客,转载请标明出处. 同上一篇差不多,这次咱们加载带有子报表的RDCl文件.首先还是创建一个form程序,在form2窗体中添加一个ReporView控件,l ...
- 25.按要求编写一个Java应用程序: (1)编写一个矩形类Rect,包含: 两个属性:矩形的宽width;矩形的高height。 两个构造方法: 1.一个带有两个参数的构造方法,用于将width和height属性初化; 2.一个不带参数的构造方法,将矩形初始化为宽和高都为10。 两个方法: 求矩形面积的方法area() 求矩形周长的方法perimeter() (2)通过继承Rect类编写一个具有
package zhongqiuzuoye; //自己写的方法 public class Rect { public double width; public double height; Rect( ...
- jQuery 使用 jQuery UI 部件工厂编写带状态的插件(翻译)
首先,我们要创建一个progress bar,它只允许我们简单的设置进度值.正如我们接下来将要看到的,我们需要通过调用 jQuery.widget 及其两个参数来实现这一操作,这两个参数分别是:将要创 ...
- 【SSRS】入门篇(四) -- 向报表添加数据
原文:[SSRS]入门篇(四) -- 向报表添加数据 定义好数据集后 [SSRS]入门篇(三) -- 为报表定义数据集 ,就可以开始设计报表了,将要显示在报表的字段.文本框.图像和其他项从工具箱拖放到 ...
随机推荐
- IOS UTI统一类型标识符:判断文件类型通过后缀
今天在学习文档和数据共享中,首先讲的处理统一类型标识符UTI.第一次见,所以记下来以备之用,首先了解UTI和MIME的概念 1.同一类型标识符(Uniform Type Identifier,UTI) ...
- Linux 下修改Tomcat使用的JVM内存大小
我的服务器的配置: # OS specific support. $var _must_ be set to either true or false. JAVA_OPTS="-Xms10 ...
- Scale-up(纵向扩展) vs Scale-out(横向扩展)
转载:http://wuaner.iteye.com/blog/1843799 http://www.javaworld.com/article/2077780/java-web-developmen ...
- 红外摄像头为什么使用850nm波长红外发射管
市面上有很多不同波长的红外发射管,其中以850nm和940nm波长为主.那么红外摄像头为什么使用850nm波长红外发射管? 首先,我们来了解一下红外摄像头的相关知识.简单来说红外摄像头是用来感应红外线 ...
- qt5集成libcurl实现tftp和ftp的方法一:搭建环境(五篇文章)
最近使用QT5做一个软件,要求实现tftp和ftp文件传输,使用QT5开发好UI界面等功能,突然发现QT5不直接提供tftp和ftp支持,无奈之下只好找第三方库来间接实现,根据网友的介绍,libcur ...
- 自己动手实现getElementsByClassName
看了一句话,我们都是搬运工,github的搬运工,下面这代码搬运来自各个地方,最后成型. var classCache = {}; function getElementsByClassName(cl ...
- //Build/ 2014 开发者大会Azure重点整理
寓教于乐,轻松掌握 Windows Apps和 Cloud //Build/ 2014开发者大会第二天重点整理 (上) //Build/ 2014开发者大会第二天的主题演讲主要包含两部分:Mic ...
- NYOJ 527 AC_mm玩dota
AC_mm玩dota 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 大家都知道AC_mm比较喜欢玩游戏,特别是擅长war3这款经典游戏.某天AC_mm来到了VS平台上 ...
- move.js
function startMove(obj,json,fn){ var flag=true;//标志所有运动是否到达目标值 clearInterval(obj.timer); obj.timer=s ...
- UVA - 1103Ancient Messages(dfs)
UVA - 1103Ancient Messages In order to understand early civilizations, archaeologists often study te ...