在2005中使用DrillThrough函数
来源:互联网 发布:arduino图形化编程软件 编辑:程序博客网 时间:2024/05/18 05:30
在2005中使用DrillThrough函数
数据仓库、数据挖掘系统的显著优势之一是可以在分析的过程中对某个数据DrillThrough to detail。数据仓库较之普通数据库系统,对数据仓库的查询分析要比数据库快许多,这是因为数据仓库在ETL过程中已经对Integrating的数据源做了各种各样的预先统计处理,并增加了多倍的额外空间保存这些处理结果,才取得了对查询的快速反映优势。这也就是常说的“以空间换时间”。在OLAP分析的时候,也可以使用DrillThrough函数对数据源进行分析。
DrillThrough函数是MDX常用函数之一,跟通常MDX执行ExecuteCellSet并返回CellSet对象不同的是,使用了DrillThrough关键字的MDX只能ExecuteReader返回DataReader。
1. 是否允许DrillThrough的权限设置集成在role的“管理角色”中。这点跟AS2000有比较大的区别。在AS2000中,仅对各个cube设置是否允许DrillThrough,所有role具有相同的是否允许DrillThrough的权限;在AS2005中设置更加明细,可以分别对各个role进行是否允许DrillThrough的设置。
2. 跟AS2000相同的是,DrillThough的对象依然是单个的cell。该cell可以是叶子水平的,也可以是基础度量的聚合cell。所以规定Select部分的每个on axis从句对应的member都是单一的。如:
DRILLTHROUGH
select
{[Measures].[Internet Sales Amount]} onAxis(0),
{[Date].[Calendar].[Month].&[2004]&[3]} onAxis(1),
{[Geography].[Geography].[Country].&[United States]} onAxis(2),
{[Product].[Product Categories].[Subcategory].[Mountain Bikes]} on
Axis(3)
FROM [Adventure Works]
或者select从句为空,在where从句指定。上句跟如下语句是等效的:
DrillThrough select FROM [Adventure Works]
WHERE
(
[Measures].[Internet Sales Amount],
[Date].[Calendar].[Month].&[2004]&[3],
[Geography].[Geography].[Country].&[United States]
,[Product].[Product Categories].[Subcategory].[Mountain Bikes]
))
3. 组成上述cell的各个维度都不允许有计算成员。没有做任何限制的维度默认都是defaultMember,如果该defaultMember含有计算成员,必须特别指定其他非计算成员。比如,度量维度的默认成员是计算成员,则必须在select或者where部分特别指定measures的成员([Measures].Members.Item(0))。
4. DrillThrough跟维度的类型没有关系。如果DrillThrough的是父子关系的层次结构的父成员,则返回的结果将是所有组成该cell的行,包括子成员。
5. AS2005新增Return从句以限定返回的列。举个例子:
DrillThrough
select (
[Measures].[Internet Sales Amount],
[Date].[Calendar].[Month].&[2004]&[3],
[Geography].[Geography].[Country].&[United States] ,
[Product].[Product Categories].[Subcategory].[Mountain Bikes]
) on 0
from
[Adventure Works]
Return
[$Date].[Date],
KEY([$Product].[Style]),
[Internet Sales].[Internet Sales Amount],
[Internet Sales].[Internet Tax Amount]
6. 在2000中,DrillThrough查询的是具体的数据库表,所以需要SqlConnection,而2005可以直接查询仓库系统,所以直接AdomdConnection
6. 在2000中,DrillThrough查询的是具体的数据库表,所以需要SqlConnection,而2005可以直接查询仓库系统,所以直接AdomdConnection
public DataTable DrillThrough(string mdx,AdomdConnection adomdConn)
{
DataTable schema = new DataTable();
try
{
adomdConn.Open();
using (AdomdCommand command = new AdomdCommand(mdx, adomdConn))
{
using (AdomdDataReader reader = command.ExecuteReader())
{
//output the column information
DataTable schema = reader.GetSchemaTable();
foreach (DataRow row in schema.Rows)
{
dt.Columns.Add(row[0].ToString());
}
while (reader.Read())
{
DataRow dr = dt.NewRow();
for (int i = 0; i < reader.FieldCount; i++)
{
dr[i] = reader[i];
}
dt.Rows.Add(dr);
}
}
}
}
finally
{
adomdConn.Close();
}
return dt;
}
{
DataTable schema = new DataTable();
try
{
adomdConn.Open();
using (AdomdCommand command = new AdomdCommand(mdx, adomdConn))
{
using (AdomdDataReader reader = command.ExecuteReader())
{
//output the column information
DataTable schema = reader.GetSchemaTable();
foreach (DataRow row in schema.Rows)
{
dt.Columns.Add(row[0].ToString());
}
while (reader.Read())
{
DataRow dr = dt.NewRow();
for (int i = 0; i < reader.FieldCount; i++)
{
dr[i] = reader[i];
}
dt.Rows.Add(dr);
}
}
}
}
finally
{
adomdConn.Close();
}
return dt;
}
- 在2005中使用DrillThrough函数
- 在2005中使用DrillThrough函数
- 在函数中使用数组
- 在Case函数中使用合计函数
- 在Javascript中Eval函数的使用?
- 如何在对话框中使用IsKindOf函数
- 在Javascript中Eval函数的使用
- 在EXCEL中使用查询复制函数
- cakephp: 在条件中使用sql函数
- 在DataViw中使用SQL聚合函数
- 在SQL SERVER中使用日期函数
- 在Javascript中Eval函数的使用
- 在Javascript中Eval函数的使用
- 在Java中使用javascript函数
- 在函数中arguments的使用
- 在linux中使用getch()函数
- 在Lua脚本中使用OpenGL函数
- 在 Freescale CodeWarrior 中使用 printf( ) 函数
- MDX函数使用介绍(三):聚合函数
- 关于Google的BlogSpot Blog不能访问
- 新手上路(三)
- 2007.03.22
- 如何播放声音文件
- 在2005中使用DrillThrough函数
- 关于在Java程序当中创建对象等基本操作的性能测试
- 价格数字正则表达式验证
- 在C#中利用Excel做高级报表
- sqlserver 中的日期转换
- 使用“代码文档对象模型”(CodeDOM) 生成源代码和可执行文件。
- j2me入门-symbian os support for MIDP
- linux2.6内核epoll用法举例说明
- C#3.0都出来了!