[译]SSRS 编写带参数的MDX报表

编写MDX报表长久以来对于报表人员来说都比较痛苦. 当然如果你用查询设计器(Query Designer) 直接拖拉数据集那就很方便,但是你们有没有想过查询设计器是怎么创建MDX的.或者创建的参数是如何工作的? 我听到很多用Analysis Services 作为数据源的(包括我)报表人员说写参数太难了,所以他们用查询设计器做报表. 我想关键的问题是查询设计器做的MDX看起来要比实际上更复杂.如果你知道一些MDX基础,你应该能直接写MDX而不是用查询分析器 ,你就是喜欢用查询分析器也没关系.本文的目的是指导你写基础的MDX语句,并且参数化 .

我们会用到两个 MDX 函数 :

StrToSet

返回字符表达式指定的集合(MSDN的定义),其实就是把你写转为MDX集合.

StrToMember

返回字符表达式指定的成员(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报表

时间: 2024-08-29 04:47:54

[译]SSRS 编写带参数的MDX报表的相关文章

python中编写带参数decorator

考察上一节的 @log 装饰器: def log(f): def fn(x): print 'call ' + f.__name__ + '()...' return f(x) return fn 发现对于被装饰的函数,log打印的语句是不能变的(除了函数名). 如果有的函数非常重要,希望打印出'[INFO] call xxx()...',有的函数不太重要,希望打印出'[DEBUG] call xxx()...',这时,log函数本身就需要传入'INFO'或'DEBUG'这样的参数,类似这样:

编写带参数decorator

无参的@log装饰器: def log(f): def fn(x): print 'call ' + f.__name__ + '()...' return f(x) return fn 发现对于被装饰的函数,log打印的语句是不能变的(除了函数名). 如果有的函数非常重要,希望打印出'[INFO] call xxx()...',有的函数不太重要,希望打印出'[DEBUG] call xxx()...',这时,log函数本身就需要传入'INFO'或'DEBUG'这样的参数,类似这样: @log(

vb如何编写带执行参数的exe程序

关于vb如何编写带执行参数的exe程序 ,可以通过vb自带的 "command()"  命令来完成. 下面是CSDN说明: Command 函数 返回命令行的参数部分,该命令行用于装入 Microsoft Visual Basic 或 Visual Basic 开发的可执行程序. 语法 Command 说明 当从命令行装入 Visual Basic 时,/cmd 之后的命令行的任何部分作为命令行的参数传递给程序.下面的示例中,cmdlineargs 代表 Command 函数返回的参数

spring mvc 编写处理带参数的Controller

在上一随笔记录的基础上,现记录编写处理带有参数的Controller. @Controller //这个注解会告知<context:component:scan> 将HomeController自动检测为一个Bean@RequestMapping("/home")  //这是根Urlpublic class HomeController {        private UserService userService;        @Autowired    public

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(double width,double height) //带有两个参数的构造方法,用于将width和height属性初化; { this.width=width; this.height=height; } Rect() //不带参数的构造方法,将矩形初始化为宽和高都为10. { width=10; height=

【JavaScript】【译】编写高性能JavaScript

英文链接:Writing Fast, Memory-Efficient JavaScript 很多JavaScript引擎,如Google的V8引擎(被Chrome和Node所用),是专门为需要快速执行的大型JavaScript应用所设计的.如果你是一个开发者,并且关心内存使用情况与页面性能,你应该了解用户浏览器中的JavaScript引擎是如何运作的.无论是V8,SpiderMonkey的(Firefox)的Carakan(Opera),Chakra(IE)或其他引擎,这样做可以帮助你更好地优

微信公众平台 怎样生成带参数的二维码

添加带参数二维码 1.选择要添加带参数二维码的认证服务号--功能管理--高级功能--渠道二维码生成--+创建渠道二维码 1.1.渠道名称:可以理解为一个推广员(门店)一个渠道的名称: 1.2.触发关键词:即粉丝扫描这个二维码后直接弹出的回复内容,可以多个渠道共用一个关键词,也可以每个渠道用一个关键词: 1.3.扫码统计对象:可以统计新.老粉丝的关注取消数据: 1.4.粉丝识别标识:打标签及分组: 1.5.保存:添加好渠道名称和触发关键词就会直接生成这个渠道的二维码,直接点击[获取二维码]即可得到

ReportView动态加载带参数的RDCL文件

在vs里新建一个winform程序"ReportViewTest",在form1中添加一个reportView控件,from1的load事件如下: private void Form1_Load(object sender, EventArgs e) { DataSet ds = new DataSet(); try { ds = getDS(); } catch (Exception) { throw; } Microsoft.Reporting.WinForms.ReportDat

【转】如何在命令行脚本中启动带参数的Windows服务

我们有一个自己编写的Windows服务,我们希望该服务在启动时可以根据用户输入的参数实现不同的功能. 要实现这样的需求并不是很难,下面这个例子我用来示范如何编写该服务 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Diagnostics; 6 using System.Linq; 7 using Syste