艾伟:用MSChart展示多维数据集

        之前谈到过用MSChart可以比较直观方便的实现对多维数据集的展示,做得比较粗略。这次详细介绍下我的经验,并提供主要的试验代码段。

       有必要强调一下,对多维数据集的展示,层次性是非常必要的。多维数据集本身就是带有层次结构的,如何直观而又不产生歧义的正确展示出其原本的数据集合结构,成为众多据仓库展示工具软件开发商关心的问题。在选型方面,目前市场上已经有比较多的选择,相当多的第三方图形控件就已经直接支持多维数据集的展示,即直接把CellSet结果赋给该控件的DataSource即可。但是这些目前毕竟是市场化的东西,作为个人开发学习没有必要去购买---试用版的由于其种种限制,给人感觉很不舒服。

       拿FoodMart 2000做例子,比如要分析第一季度(Q1)、第二季度(Q2)的食品(Food)、饮料(Drink)在加利福尼亚州(CA)、俄勒冈州(OR)、华盛顿(WA)的Store cost 和 Store sales 的情况,使用如下的MDX语句分析:

SELECT

{ { { [Customers].[State Province].&[CA], [Customers].[State Province].&[OR], [Customers].[State Province].&[WA] } * { [Measures].[Store Cost], [Measures].[Store Sales] } } } ON COLUMNS ,

{ { { [Product].[Product Family].&[Drink], [Product].[Product Family].&[Food] } * { [Time].&[1997].&[Q1], [Time].&[1997].&[Q2] } } } ON ROWS 

FROM [Sales]

先看在FlexGrid的展示结果:

 

能够非常清晰的产看各个区域的对应的值。

如果只是想要看一下趋势,这个时候用图形分析就显得更加直观:

 

而且图形展示可以任意行列切换:

 

图形展示的缺点是不能察看所有具体的值(全都在图形上展示出来也可以,但是会显得很拥挤),这个没有关系,我们可以在选择某个系列的时候显示实该系列的所有值:

 

由于某些客观因素,仅提供我的测试代码,也就没有用到CellSet:

1.         首先设置行列标签数和行列数

 

MSChart1.DataGrid.SetSize(rowLabelCount, columnLabelCount, rowCount, columnCount); 

 

2.       接下来就可以给MSChart赋值,赋值由两种方式:

1)         各个单元分别赋值:

1int[,] a = new int[8,6];//备用
2            for (short i = 1; i <= 8; i++)
3            {
4                for (short j = 1; j <= 6; j++)
5                {
6                    MSChart1.DataGrid.SetData(i,j,Convert.ToDouble(i*2+j),0);
7                    a[i-1,j-1]= i+j*3-1;
8                }
9            }

 

 2)        直接赋一个二维的数组值:

MSChart1.ChartData = a;

这里有一点要注意,如果使用这种方式,必须先填充数据,再填充标签,否则所填标签会失效。

3.       填充标签,如何体现多维数据集的层次结构,这是关键的一步。具体填充标签的时候,可以先对各个级别的标签进行分析,合并连续重复的文字标签,进行金字塔式的填充。在我的试验中没有标签分析的函数,而是在知道层次结构的情况下进行的填充,代码都比较简单。

填充标签#region  填充标签
            rowLabelCount = 4; 
            columnLabelCount = 3; 
            rowCount = 8; 
            columnCount = 6; 
            MSChart1.DataGrid.SetSize(rowLabelCount, columnLabelCount, rowCount, columnCount); 
            for (int i = 1; i <= 8; i++)
            {
                if(i <= 4)
                {
                    MSChart1.DataGrid.set_RowLabel(Convert.ToInt16(i),1,"Q"+ i.ToString());
                }
                else
                {
                    MSChart1.DataGrid.set_RowLabel(Convert.ToInt16(i),1,"Q"+ (i-4).ToString());
                }
                //                
                for (int j = 1; j <= 6; j++)
                {
                    MSChart1.DataGrid.set_ColumnLabel(Convert.ToInt16(j),1,"P"+j.ToString() );
                    
                }
            }
            labelIndex = 2; 
            Column = 1; 
            MSChart1.DataGrid.set_ColumnLabel(Column, labelIndex, "Pct 1"); 
            Column = 3; 
            MSChart1.DataGrid.set_ColumnLabel(Column, labelIndex,"Pct 2"); 
            MSChart1.DataGrid.set_ColumnLabel(1, 3,"All Products "); 
            Row = 1; 
            MSChart1.DataGrid.set_RowLabel(Row, labelIndex, "1997"); //涵盖第Row个元素开始的数据,第labelIndex级标签
            Row = 5; 
            MSChart1.DataGrid.set_RowLabel(Row, labelIndex, "1998"); 
            MSChart1.DataGrid.set_RowLabel(1, 3, "All Years"); 
            #endregion 填充标签结束    

 

 

 

4.       试验的图片保存效果是这样的:

 

   

3D效果:

 

 

时间: 2024-07-30 05:37:09

艾伟:用MSChart展示多维数据集的相关文章

用MSChart展示多维数据集

之前谈到过用MSChart可以比较直观方便的实现对多维数据集的展示,做得比较粗略.这次详细介绍下我的经验,并提供主要的试验代码段. 有必要强调一下,对多维数据集的展示,层次性是非常必要的.多维数据集本身就是带有层次结构的,如何直观而又不产生歧义的正确展示出其原本的数据集合结构,成为众多据仓库展示工具软件开发商关心的问题.在选型方面,目前市场上已经有比较多的选择,相当多的第三方图形控件就已经直接支持多维数据集的展示,即直接把CellSet结果赋给该控件的DataSource即可.但是这些目前毕竟是

SQLserver中cube:多维数据集实例详解

1.cube:生成多维数据集,包含各维度可能组合的交叉表格,使用with 关键字连接 with cube 根据需要使用union all 拼接 判断 某一列的null值来自源数据还是 cube 使用GROUPING关键字 GROUPING([档案号]) = 1 : null值来自cube(代表所有的档案号) GROUPING([档案号]) = 0 : null值来自源数据 举例: SELECT * INTO ##GET FROM (SELECT * FROM ( SELECT CASE WHEN

《BI项目笔记》用Excel2013连接和浏览OLAP多维数据集

原文:<BI项目笔记>用Excel2013连接和浏览OLAP多维数据集 用Excel2013连接和浏览OLAP多维数据集

一个jsp页面分模块展示多个数据集怎样效率高

问题描述 一个jsp页面分模块展示多个数据集怎样效率高目前的实现是依次查询保存在集合中 单个模块迭代出来 这样消耗内存非常高 且速度慢网页容易卡死 求指教?谢谢拉 解决方案 可以静态化, 把没个单元模块的数据提前生成好json文件发在那里. 这样有更新,就更新json文件就行了, 页面异步取信息个人签名:健康宝宝解决方案二:1一次返回的数据太多,可以使用ajax分几次异步返回2数据多,数据库查询慢的话可以改用redis,memcache等解决方案三:iframe ajax解决方案四:缓存 aja

利用Visual Studio 2010开发系统,如何调用在SSAS中的多维数据集

问题描述 本人最近才接触SQL,需要基于WEB开发一个简单系统,实现查询甚至预测功能.已经建好数据库,利用SSAS做完数据分析,计划利用VisualStudio2010作为开发工具,但是不知道VS如何连接多维数据集?VS的控件又如何控制查找数据库及多维数据集中的数据?需要哪种编程语言?希望各位大神不吝赐教,非常感谢!!!

SSAS系列——【03】多维数据(多维数据集对象)

原文:SSAS系列--[03]多维数据(多维数据集对象) 1.什么是Cube?      简单 Cube 对象由基本信息.维度和度量值组组成. 基本信息包括多维数据集的名称.多维数据集的默认度量值.数据源和存储模式等.维度是多维数据集中使用的实际维度组.所有维度都必须先在数据库的维度集合中定义,然后才能在多维数据集中引用.度量值组是多维数据集中的度量值集.度量值组是具有常见数据源视图和维度集的度量值的集合.度量值组是度量值的处理单元:可先对度量值组进行单独处理,然后再浏览.这个概念MSND解释的

《BI项目笔记》创建多维数据集Cube(1)

原文:<BI项目笔记>创建多维数据集Cube(1) 有两个事实表,因此就有两个度量值组,并且向导将为非维度键的事实表中的每一个数值列创建一个度量值.由于我们这里不需要那么多,所以只选择部分度量值.另外要注意,度量值的名称源于事实表中的列,所有名称由可能相同.但是在多维数据集中,由于度量值的名称必须是唯一的,所以向导会在重复的度量值名称后添加所属的度量值组名称. 下一步的时候多维数据集的向导识别了度量值组即之前的事实表与之相关的维度表,因此这里全部会显示出来. 为多维数据集取一个名称并保存. 历

《BI项目笔记》创建多维数据集Cube(2)

原文:<BI项目笔记>创建多维数据集Cube(2) 本节建立: 历年的初烟水分均值变化分析Cube:区域维度:地州,专县时间维度:年等级维度:大等级,小等级指标:水分均值 数据源视图: 数据处理: ALTER TABLE T_QualMoisture_Middle ALTER COLUMN V_Produce_ID VARCHAR(50) ALTER TABLE T_QualMoisture_Middle ALTER COLUMN V_Batch_ID VARCHAR(50) DELETE F

DevExpress入门:从初步使用该控件到多维数据集控件PivotGridControl

例子基于Winform开发,我使用的是VS2005,因为工作就用这个,版本低了点,但是很多控件的使用都不会 因为版本高低而存在太大差异. 其实原本是想从下载安装开始去分享这套控件的使用,但是觉得那样 显得太俗了,我是一个乐于突破定势的男孩子(毕竟有些女的都30岁还自称为女孩,我才开始奔三为什么不能 是男孩子呢),我决定从比较棘手的PivotGridControl控件开始分享我近些日子使用DevExpress的心得经验. 说实话正题开始前我还想再啰嗦句废话,我原本还想在PivotGridContr