为了更好地理解不同的数据立方体模型的优缺点,让我们近距离地观察一下SAP BW 在运行时是如何执行查询的。下面的伪代码从一个非常笼统的角度解释了这一过程:首先这段伪代码只是用来解释BW执行查询的过程,所以跟实际代码有巨大的差别,其次它只适用于没有应用BIA的情况下。
*** STEP 1 − Prepare query execution
Convert selections into surrogate key representation.
Generate optimized temporary hierarchy table.
*** STEP 2 − Prepare query execution
Generate query view
Open query cursor
*** STEP 3 − Execute query
Loop at cursor.
Execute user exit for virtual characteristics / key figures.
Apply dynamic filters.
Endloop.
*** STEP 4 − Complete query result
Read key values, texts, display attributes, hierarchies.
Format query results.
Convert selections into surrogate key representation.
Generate optimized temporary hierarchy table.
*** STEP 2 − Prepare query execution
Generate query view
Open query cursor
*** STEP 3 − Execute query
Loop at cursor.
Execute user exit for virtual characteristics / key figures.
Apply dynamic filters.
Endloop.
*** STEP 4 − Complete query result
Read key values, texts, display attributes, hierarchies.
Format query results.
在查询执行的第一步,所有在查询中定义的查询条件首先会被转换成代键的形式。对与那些定义在CHARACTERISTIC VALUE上面的查询条件,系统会根据这些条件 返回所有满足这些条件的CHARACTERISTIC的代键。对于基于层级的查询条件,系统会产生一个临时表,表中包含了所有相关层级节点的代键。
第二步,系统会根据查询的定义和第一步的返回结果生成一个SQL语句用来创建一个临时的数据库视图,根据这个视图系统会打开查询的CURSOR用于从数据库中返回查询的结果集。下图解释的是怎么样为一个简单的查询(不包含导航属性和层级)生成所需的SQL语句。
一个标准的简单查询生成的SQL语句其实就是两个事实表和相应的维度表之间的JOIN。如上图所示,JOIN语句的组成部分只包含两个事实表和相应的维度表,SID表和无关的维度表都不在其中。生成的SQL查询返回的结果包括所有的在查询中定义的CHARACTERISTIC和KEY FIGURE:CHARACTERISTIC返回的是它的代键,而一般来说KEY FIGURE返回的是相应的聚集后的合计值。
第三步,系统将所有定义的VIRTUAL CHARACTERISTICS/KEY FIGURES和动态FILTER(比如条件和异常)应用到上一步返回的结果集中的每条记录。
在查询执行的第四步,也就是最后一步,系统会根据结果集中的CHARACTERISTIC的代键 从各个主数据表中读出需要的文本、显示属性、层级等,然后根据查询定义格式化查询的输出。
NOTE:
在查询执行的关键步骤,第二步中,主数据的各个表(包括SID表)是不参加计算,也不参加DRILL DOWN, DRILL UP的。只有在查询的结果集返回后,系统才回去读主数据表中的数据来进一步格式化查询的输出。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/119153/viewspace-665964/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/119153/viewspace-665964/