MicroStrategy ONE
Preserve All Final Pass Result Elements(保留所有最终路径结果元素)
以下“Preserve All Final Pass Result Elements”(保留所有最终路径结果元素)VLDB 属性设置决定了如何对最终结果在及查看表和关系表的进行外部联接。
- 若选择默认的保留最终路径结果表和查找/关系表中的公共元素选项,SQL 引擎将生成一个同等联接。因此,您只能看到两个数据表的共同元素。
- 若选择保留所有最终结果路径元素选项,SQL 引擎将生成一个外部联接,并且您的报表将包含最终结果集内的所有元素。当开启此设置时,从事实表到查找表,乃至各种关系表的任意联接都将生成外部联接。这是因为难以区分哪个数据表被用作查找表以及哪个数据表被用作关系表,一个表通常可以接受两种角色。例如,LOOKUP_DAY 既可以表示 Day(日)实体的查找表,也可以表示 Day(日)与 Month(月)的关系表。
此设置不能用于表示数据仓库,因为查找表都已正确维护且事实表中的所有元素在各自的查找表已有相应的条目。此设置只能在事实表中某个实体比相应查找表包含更多(唯一的)实体元素时使用。例如,在上述示例中,事实表包含 5 个不同的商店,而商店表则只包含 4 个商店。根据定义,查找表应包含所有实体元素,因此在标准的数据仓库中不应发生上述情况。但如果事实表比查找表的更新频率更高,则可能发生上述情况。
- 若选择保留与查找表而非关系表有关的最终语句结果的所有元素选项,SQL 引擎将在最终语句除外的所有语句上生成内部联接,在最终语句上则生成外部联接。
- 如果选择不要管每一项报表级别设置,并根据实体级别的设置来保留最终路径的元素。如果在实体级别选择此选项,将视为数据库实例、报表或模板级别的保留通用元素(即选项1)选项,则将使用实体级别的上述 VLDB 属性的设置。
如果您只有很少一部分实体需要不同联接类型,此设置将会有所帮助。例如,如果在报表的实体中,只有一个需要保留最终路径表的元素,您可以将这个实体的 VLDB 属性设为 Preserve all final pass result elements(保留所有最终路径结果元素)。然后再将报表的 VLDB 属性设为忽略设置。当报表被运行时,只有设置不同的实体才会在 SQL 中产生一个外部联接。所有其他实体查找表将用一个同等联接项进行联接,这样将获得更好的 SQL 性能。
保留末次操作结果表和查找/关系表之间的共同元素
报表的模板上含有“商店”和“美元销售额”数据。
“保留最终路径结果表和查找表中的公共元素”选项将使用下述 SQL 返回下列结果。
商店 | 美元销售额 |
东部 |
5000 |
中部 |
8000 |
南部 |
12000 |
select a11.Store_id Store_id,
max(a12.Store) Store,
sum(a11.DollarSls) WJXBFS1
from Fact a11
join Store a12
开启(a11.Store_id = a12.Store_id)
group by a11.Store_id
保留末次操作结果中的所有元素
报表的模板上含有“商店”和“美元销售额”数据。
“保留所有最终结果路径元素”选项将使用下述 SQL 返回下列结果。注意 Store_ID 4 与 5 的数据显示如下。
商店 | 美元销售额 |
东部 |
5000 |
中部 |
8000 |
南部 |
12000 |
|
3000 |
|
1500 |
select a11.Store_id Store_id,
max(a12.Store) Store,
sum(a11.DollarSls) WJXBFS1
from Fact a11
left outer join Store a12
开启(a11.Store_id = a12.Store_id)
group by a11.Store_id
保留最终结果表的所有元素(相对于查找表,但不相对于关系表)
报表模板上含有“国家”、“度量 1”和“度量 2”数据。以下的事实表适用于各个度量:
CALLCENTER_ID | 事实 1 |
1 |
1000 |
2 |
2000 |
1 |
1000 |
2 |
2000 |
3 |
1000 |
4 |
1000 |
EMPLOYEE_ID | 事实 2 |
1 |
5000 |
2 |
6000 |
1 |
5000 |
2 |
6000 |
3 |
5000 |
4 |
5000 |
5 |
1000 |
SQL 引擎将生成 3 个 SQL 语句。在第一个语句中,SQL 引擎计算的是度量 1。SQL 引擎将以内部联接方式联接上述“事实表(度量1)”与下列呼叫中心查找表“LU_CALL_CTR”:
CALLCENTER_ID | COUNTRY_ID |
1 |
1 |
2 |
1 |
3 |
2 |
通过上述联接创建按国家分组的度量 1 临时表。此时将使用表后面附带的 SQL。
COUNTRY_ID | 度量 1 |
1 |
6000 |
2 |
1000 |
create table ZZSP00 nologging as
select a12.COUNTRY_ID COUNTRY_ID,
sum((a11.QTY_SOLD * a11.DISCOUNT))
WJXBFS1
from ORDER_DETAIL a11,
LU_CALL_CTR a12
where a11.CALL_CTR_ID = a12.CALL_CTR_ID
group by a12.COUNTRY_ID
在第二个语句中将计算度量 2。SQL 引擎将以内部联接方式联接上述“事实表(度量2)”与下列呼叫中心查找表“LU_EMPLOYEE”:
EMPLOYEE_ID | COUNTRY_ID |
1 |
1 |
2 |
2 |
3 |
2 |
创建以下按国家/地区分组的度量2临时表时,将使用表后附带的 SQL:
COUNTRY_ID | 度量 2 |
1 |
10000 |
2 |
17000 |
create table ZZSP01 nologging as
select a12.COUNTRY_ID COUNTRY_ID,
sum(a11.FREIGHT) WJXBFS1
from ORDER_FACT a11,
LU_EMPLOYEE a12
where a11.EMP_ID = a12.EMP_ID
按 a12.COUNTRY_ID 分组
在第三个路径中,SQL 引擎使用下列国家/地区查找表“LU_COUNTRY”:
COUNTRY_ID | COUNTRY_DESC |
1 |
美国 |
3 |
欧洲 |
SQL 引擎采用左外部联接方式来联接上述 METRIC1_TEMPTABLE 与 LU_COUNTRY 表。接下来,SQL 引擎采用左外部联接方式来联接上述 METRIC2_TEMPTABLE 与 LU_COUNTRY 表。最后,SQL 引擎再对第三个语句的结果进行外部联接以产生最终结果。
“保留与查找表(而不是关系表)相关的最终路径结果的所有元素”选项将使用下述 SQL 返回下列结果。
COUNTRY_ID | COUNTRY_DESC | 度量 1 | 度量 2 |
1 |
美国 |
6000 |
10000 |
2 |
|
1000 |
17000 |
选择 pa1.COUNTRY_ID COUNTRY_ID,
a11.COUNTRY_NAME COUNTRY_NAME,
pa1.WJXBFS1 WJXBFS1,
pa2.WJXBFS1 WJXBFS2
from ZZSP00 pa1,
ZZSP01 pa2,
LU_COUNTRY a11
where pa1.COUNTRY_ID = pa2.COUNTRY_ID and
pa1.COUNTRY_ID = a11.COUNTRY_ID (+)