Report Studio进阶技巧三、回写数据库(Writing back to the database)

浏览: 2495

这或许是商业用户最频繁的需求——从报表上的某个特定的接口回写一些数据到数据库。虽然Cognos Report Studio没有为此功能提供标准接口,但是仍然可以通过组合不同的工具来实现这以功能。此例将向你展示如何实现。

用户想按照产品查看销售报告,同时希望在同一个界面中,可以为产品写一些评论。评论需要被储存在数据库中,以便以后的查询和更改。

此例,你需要数据库的合适权限和Framework Manager工具。

 

准备工作

 

使用Product key, Product name Sales quantity作为列创建一个简单的列表,并设置合适的排序,聚合和提示。

 

如何实施

 

1. 我们从在数据库中创建一张用来储存用户评论的表开始。打开数据库客户端,使用和示例的类似方法创建一张表。

此例,我们使用MS SQL Server 2008数据库SQL Server Management Studio创建表。代码如下:

CREATE TABLE [gosalesdw].[ProductComments](

      [ProductID] [int] NOT NULL,

      [Comment] [varchar] (255) NULL,

 CONSTRAINT [PK_ProductComments] PRIMARY KEY CLUSTERED

(

      [ProductID] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_

DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON

[PRIMARY]

) ON [PRIMARY]

2. 在后台创建如上表之后,我们写一个用来接受Product KeyComments的存储过程。此存储过程的功能为把接收到的信息写入数据库中,并返回所有的Product Keys以及对应的Comments

 

CREATE PROCEDURE [dbo].[InsertComment] @ProductID int, @Comments

VARCHAR(255)

AS

BEGIN

IF ((select count(*) from

gosalesdw.ProductComments

where ProductID = @ProductID) = 0)

INSERT INTO gosalesdw.ProductComments VALUES (@ProductID,@

Comments)

ELSE

UPDATE gosalesdw.ProductComments

SET Comment = @Comments WHERE ProductID = @ProductID

END

Select ProductID,Comment from gosalesdw.ProductComments

GO

3. 请确定在Cognos中使用的database账户拥有了以上存储过程的EXECUTE权限。在SQL Server中,我们可以执行GRANT PERMISSION 命令为账户授权。

4. 现在打开Framework Model,导入此存储过程。定义其名称为InsertComment。我们需要把存储过程的输入参数设置为Prompts。如下图所示:

Clipboard Image.png

如图所示,@ProductID@Comments为存储过程参数,并使用 ’in’ 模式。这表示这些参数会接受输入。参数的值,我们分别定义为?ProductKey??Comments?

5. 验证并发布模型。

6. 现在,我们要创建一张报表,用户可以使用这张表表插入关于productcomments。我们从创建一张列表开始。

7. 使用InsertComment查询主题的Product IDComment最为列创建一张简单的列表。

Clipboard Image.png


8. 为此报表创建一张prompt page,插入一个Text Value类型的prompt,并定义其使用的参数为已经存在的Comment

9. 保存报表为“2.5 Writing Back to Database – Drill”。我们将在本例的准备工作中建立的报表以drill-through的方式调用此报表。

10. 重新打开准备工作中建立的报表。添加一个Text Item作为报表的新的列,并定义text为“Insert Comment”。Clipboard Image.png

11.选中新建的text列,点击工具栏中的drill-through图表,设置drill target为“2.5 Writing Back to Database – Drill”,并勾选Open in New Window勾选框。

12. 点击edit按钮,编辑参数。映射ProductKey参数到Product key数据项。

Clipboard Image.png

13. 运行并测试报表。

工作原理

Cognos Report Studio本身不能在数据库中执行数据操纵任务。它不能执行DML声明,因此就不能回写数据库。

然而,Cognos允许报表执行存储过程并把结果返回到报表页面。为了实现回写,我们首先把存储过程导入到Framework模型中最为一个查询主题,并发布。当使用此查询主题的报表运行时,Cognos就在数据库中执行此存储过程。我们可以使用这个机会来执行一些DML操作,比如,插入或者更新表里的数据。

当我们把一个存储过程导入到Framework模型中时,Cognos允许我们为每一个输入参数定义表达式。在此例第3步中,我们定义参数值为一些prompts。这样做,prompts的参数,ProductKeyComments在报表中就可见了。

一旦我们把存储过程导入Framework模型,映射输入参数到prompts并发布数据包,我们就开始报表端的工作了。

我们创建一张报表(drill report),使用存储过程,并允许用户输入评论。在此报表中,我们创建了一个text prompt,并链接其道Comments参数。ProductKey参数将从主报表传入。这样,我们就实现了回写数据库的功能。在完成插入/更新操作后,存储过程会返回comments表的所有记录。我们在一张简单的表里向用户展现这些记录。

更多

此例仅仅向大家展现了Report Studio调用存储过程的一个简单应用。更多复杂的功能,利用此方式也可以实现。比如,我们可以利用此数据库回写的功能创建一个简单的考勤系统。更多的功能,大家可以多多探索。

推荐 0
本文由 zhengyi1943 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册