在2005中使用DrillThrough函数

在2005中使用DrillThrough函数
数据仓库、数据挖掘系统的显著优势之一是可以在分析的过程中对某个数据 DrillThrough to detail 。数据仓库较之普通数据库系统,对数据仓库的查询分析要比数据库快许多,这是因为数据仓库在 ETL 过程中已经对 Integrating 的数据源做了各种各样的预先统计处理,并增加了多倍的额外空间保存这些处理结果,才取得了对查询的快速反映优势。这也就是常说的“以空间换时间”。在 OLAP 分析的时候,也可以使用 DrillThrough 函数对数据源进行分析。
在2005中使用DrillThrough函数_第1张图片

 
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]} on Axis (0),
{[Date].[Calendar].[Month].&[2004]&[3]} on Axis (1),
{[Geography].[Geography].[Country].&[United States]} on Axis (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]


在2005中使用DrillThrough函数_第2张图片

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;
        }

你可能感兴趣的:(在2005中使用DrillThrough函数)