页面树结构
转至元数据结尾
转至元数据起始

在一些情况下,我们在数据模型中创建了一个SQL查询,SQL查询能够正常查询预览出数据,但保存时会提示SQL查询只支持抽取模式,这是为什么呢?


这是因为数据模型直连情况下,要求SQL查询中的SQL必须是可以嵌套查询的。简单来说即下面SQL语句是可以执行成功不报错的。

select * from (原始SQL) T1 WHERE 1 = 0

保存SQL查询时,我们可以从SQL监控或系统日志中找到执行报错的SQL,分析其报错原因,以上述sql为例,可能模型中sql查询运行正常,但SQL监控会显示运行状态为失败:

以上面的SQL为例,是因为SQLServer中不允许子查询中包含ORDER BY子句。

在高版本Smartbi中也会直接提示报错的SQL了。

那为什么直连一定要求SQL是可嵌套呢?

原因在于我们基于SQL查询做聚合运算时,会嵌套SQL,如果SQL不支持嵌套,就无法进行正常的聚合查询。

比如原始SQL我们从订单表中查询数据

select * from northwind.dbo.orders 

现在需要从省份维度查询订单数量,就需要构造如下SQL

select
	ShipProvince,
	COUNT(1)
from
	(
	select
		*
	from
		northwind.dbo.orders ) t1
group by
	ShipProvince

如果SQL无法支持嵌套查询,我们就会先将SQL查询的数据抽到缓存库中,得到抽取表A,聚合时从A中查询。

select
	ShipProvince,
	COUNT(1)
from
	A
group by
	ShipProvince









  • 无标签