65.9K
CodeProject 正在变化。 阅读更多。
Home

构建 ASP.NET 报表 OLAP 应用程序(Part-3)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.17/5 (4投票s)

2009年4月21日

CPOL

3分钟阅读

viewsIcon

44552

如何构建 ASP.NET Web 报表应用程序

在前两篇文章中,构建 Cube构建报表,我们发现了 BIDS 如何以稳健、受管理和组织的方式帮助开发 BI 应用程序。 我相信,如果您有一些 BI 概念,您可以在 10 分钟内完成此演练。 让我们进入最后一层,我认为它是表示层。 您可能会想到一个问题,为什么我在报表服务之上构建 ASP.NET 应用程序? 为什么我不给最终用户报表服务服务器 URL。 因为安全问题? 不是的。 报表服务服务器可以管理不同类型的安全,这不会给您的开发团队带来麻烦,但是如果您的最终用户需要 UI 层,例如 Silverlight 怎么办? 如何嵌入报表服务? 我们有 ReportViewer Windows\Web 控件,它提供了非常丰富的功能来查看报表服务(本地和服务器)报表。 在我们的演练中,我们使用服务器报表。 让我们打开我们之前的解决方案并添加一个新的 ASP.NET Web 应用程序项目:InternetSalesWebsite,Default.aspx 页面在源视图中打开,切换到设计视图。

rs-p3-1

从工具箱 -> 报表 -> 拖动 MicrosoftReportView 控件并将其放置在页面上,也拖动一个按钮,然后关闭工具箱,因为它会减慢 VS IDE 的速度。(感谢 Taha Amin 在这方面帮助了我)

rs-p3-2

rs-p3-3

因此,从工具箱中拖动两个 CheckBoxList,一个用于产品维度,一个用于促销维度。对于第一个 CheckBoxList ProductList,我们需要将产品维度数据加载到其中。 按下智能箭头,然后选择数据源; 选择数据源,选择一个新的数据源,将打开一个新的对话框,选择数据源类型:数据库并给出 SqlDataSource ID:ProductsDataSource,然后确定,将打开一个新的对话框以选择数据连接,按新建连接; 数据源按更改 -> ; 数据提供程序选择 .NET framework Data Provider For OLE DB,然后确定; 添加连接对话框打开,在 OLE DB 提供程序中选择 Microsoft OLE DB Provider For Analysis Services 9.0; 服务器或文件名输入分析服务服务器名称,在我的例子中是“ramymahrous-lap”; 使用 Windows NT 集成安全性; 初始目录“AdventureWorksInternetSalesCube”; 测试连接,如果成功,请按确定,然后下一步,将此连接另存为“InternetSalesConnectionString”; 下一步; 配置数据源对话框打开; 选择指定自定义 SQL 语句或存储过程; 下一步; 出现错误消息,忽略它并按确定; 编写这个 MDX 脚本以获取产品数据

WITH
MEMBER [Measures].[ParameterCaption]
AS '[Dim Product].[English Product Name].CURRENTMEMBER.MEMBER_CAPTION'
MEMBER [Measures].[ParameterValue]
AS '[Dim Product].[English Product Name].CURRENTMEMBER.UNIQUENAME'
SELECT {[Measures].[ParameterCaption], [Measures].[ParameterValue]}
ON COLUMNS , [Dim Product].[English Product Name].ALLMEMBERS
ON ROWS
FROM [Adventure Works DW]

"FONT-FAMILY: Georgia">"http://ramymahrous.wordpress.com/2009/04/20/building-aspnet-reporting-olap-based-application-part-3/rs-p3-4/" rel="attachment wp-att-89">"334" height="195" title="rs-p3-4" class="aligncenter size-full wp-image-89" alt="rs-p3-4" src="http://ramymahrous.wordpress.com/files/2009/04/rs-p3-4.jpg" complete="true" />

rs-p3-5

rs-p3-6

下一步; 测试查询; 如果它获取数据,请按完成,否则请告诉我您得到了什么。

我们返回到“选择数据源”对话框; 选择数据源:ProductsDataSource; 选择要在 CheckBoxList 中显示的数据字段:[Measures].[ParameterCaption]; 选择用于 CheckBoxList 值的字段:[Measures].[ParameterValue]; 确定 在 Promotion CheckBoxList 中重复此操作,但您不必再次配置连接,只需从连接中选择“IntertnetSalesConnectionString”,MDX 脚本将是这样的

WITH
MEMBER [Measures].[ParameterCaption]
AS '[Dim Promotion].[English Promotion Name].CURRENTMEMBER.MEMBER_CAPTION'
MEMBER [Measures].[ParameterValue]
AS '[Dim Promotion].[English Promotion Name].CURRENTMEMBER.UNIQUENAME'
SELECT {[Measures].[ParameterCaption], [Measures].[ParameterValue]}
ON COLUMNS , [Dim Promotion].[English Promotion Name].ALLMEMBERS
ON ROWS
FROM [Adventure Works DW]
双击按钮以进入其点击事件处理程序,编写一些代码以调用报表并将参数值传递给它。
protected void Button1_Click(object sender, EventArgs e)
        {
            ReportViewer1.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote; //work on report resides in the server not local
            ReportViewer1.ShowParameterPrompts = false; //hide parameters area and we will pass it through our controls

            ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://ramymahrous-lap/Reportserver_SQLSERVER2008/"); //Report Server URL not Report Server Manager URL
            ReportViewer1.ServerReport.ReportPath = "/InternetSaleCount_ByProduct_ByPromotion";//don't put report extension ".rdl"

            //using Reporing Service we know InternetSalesReport needs 2 paramters
            //DimProductEnglishProductName
            //DimPromotionEnglishPromotionName
            List parametersList =
             new List();

            parametersList.Add(GetParameterValue(PromotionList, "DimPromotionEnglishPromotionName"));//fills DimPromotionEnglishPromotionName with selected values user selected
            parametersList.Add(GetParameterValue(ProductsList, "DimProductEnglishProductName"));//fills DimProductEnglishProductName with selected values user selected


            ReportViewer1.ServerReport.SetParameters(parametersList); //set report paramters with values

            ReportViewer1.ServerReport.Refresh(); //display the report
        }
        /// 
        /// Gets every Report parameters value(s)
        /// 
        /// Which contains parameter values
        /// Parameter Name
        /// Report Parameter
        Microsoft.Reporting.WebForms.ReportParameter GetParameterValue(CheckBoxList checkListBox,
            string parameterName)
        {
            List parameterValues = new List();

            foreach (ListItem li in checkListBox.Items)
            {
                if (li.Selected)
                {
                    if (li.Text == "All")
                    {
                        parameterValues.Add(li.Value);
                        break; //no need to go through to know if user selected another value.
                    }
                    else
                        parameterValues.Add(li.Value);
                }
            }

            return new Microsoft.Reporting.WebForms.ReportParameter(parameterName, parameterValues.ToArray(),
                true);
        }

按 Control + F5 构建并查看您的 Web 应用程序,它应该像这样工作。

rs-p3-7

我们已经完成了。 您应该注意一些重要的通知 1- 我没有开发数据层,我只是直接用数据填充了 CheckBoxList 控件 2- 要应用我们的基础架构架构 第一部分,您需要让用户有权访问报表服务器服务器并修改上述代码以添加一些行 ReportViewer1.ServerReport.ReportServerCredentials = new ReportServerCredentials(用户名, 密码, 域); 您将在演示中找到 ReportServerCredentials 类附加。 这个类是某人开发的,我不记得是谁或网站。 3- 如果您有任何问题,请在 ramyamahrous@hotmail.com 上评论或联系我 .docx 格式的全文:reporting-service-via-asp 演练演示:http://cid-3e2288e7a8e55f56.skydrive.live.com/self.aspx/Public%20folder/Reporting%20Service%20via%20ASP.zip

© . All rights reserved.