本文汇总了创建数据集的常见问题。
数据集报错问题
加工数据集字段问题
数据集权限问题
数据集显示问题
数据集关联问题
数据集性能问题
自定义SQL报错
若您的自定义SQL运行或保存时出现报错,请优先排查是否是以下原因。
1.自定义SQL语法不正确
Quick BI会把自定义SQL进行部分处理后下发至数据库执行,包括:占位符解析、limit语句限制数据行数以及增加SQL注释。因此,若您的自定义SQL语法不正确,底层数据库会抛出错误。
若您的自定义SQL报错,建议您先把同样的SQL语句在数据库执行一次,以此排查是否存在SQL语法问题。您可以在“历史记录”中看到历史运行的SQL语句。
2.SELECT语句之前写了其他语句
为了避免数据量过大造成的性能问题,在自定义SQL运行和保存时,Quick BI会在自定义SQL的最外层拼接limit 200后再下发查询。这就要求自定义SQL必须以SELECT语句开始,面板中不支持直接写入HINT语句。若您的SELECT语句前写了其他语句,会导致自定义SQL报错。
若您需要设置HINT语句,可以从上方的【设置HINT语句】入口设置。
支持设置HINT语句的数据源列表见:数据源功能项列表。
3.使用到的占位符未赋默认值
Quick BI自定义SQL中支持通过写入占位符进行传参,在查看报表时,可以通过查询控件把占位符的值传到底层SQL中,实现灵活的数据分析。占位符使用场景和使用方法见文档:占位符
如果占位符应用在SELECT语句中,必须设置默认值,否则会因为SQL不完整导致运行报错。
比如以下例子中,值占位符$val{profit_range}未赋默认值时,字段“订单等级”无法计算,因此自定义SQL报错;给占位符赋值为100后再运行SQL,数据可以正常展示出来。
另外:为避免在报表中可能会因为未赋值导致报错,建议给SELECT语句后的占位符赋“全局生效”的默认值,而不是“仅数据集”生效的默认值。
SELECT report_date, order_level, shipping_type,price,order_number,area,
case when profit_amt< $val{profit_range} then'亏损'
when profit_amt> $val{profit_range} then'盈利'
else '持平'
end '订单等级'
from company_sales_record
where $expr{report_date :report_date}
and $expr{order_level :order_level}
and $expr{order_number :order_number}
4.其他
建议规范使用自定义SQL中的注释和别名,否则可能会因底层数据库返回特殊字段名、占位符解析失败等原因导致自定义SQL报错。
另外:自定义SQL的末尾无需加“;”。
计算字段常见报错原因
计算字段中引用的字段为物理字段,若需要进行字段类型转换,需要通过对应的转换函数实现。手动调整字段类型无法修改底层物理字段的类型,可能会因为字段类型错误导致报错。
维度计算字段不允许使用SUM、AVG等聚合函数,若需要进行聚合计算请保存为度量。
文本类型的字段仅支持COUNT、COUNTD聚合,不支持使用SUM、MAX等聚合函数,请先将字段转为数值后再进行聚合计算。
如何将Unix时间戳类型字段转化为标准日期时间类型字段?
当时间字段以Unix时间戳形式存储且数据类型为文本或数值时,需要通过from_unixtime函数进行转化。
在数据集编辑页面,按照图上步骤新建计算字段。
保存数据集,进行刷新如下。
如何设置仪表板中展示的Null值或空值?
1.在数据集里设置空值展示样式。
2.在仪表板里设置空值展示样式。
如何通过参数SQL实现占比的灵活运算?
目前Quick BI是不支持直接计算占比的,您可以通过参数SQL创建数据集,实现占比的计算。
假设目前数据表结构为:日期(date)、省份(province)、城市(city)、销售额(order_amt)。您需要1、按城市维度汇总,计算占所属省份销售额的比值;2、日期可以选择任意区间,省份、城市可以多选。
本例以通过参数SQL构建数据集模型,参考SQL如下:
select a.city,sum(fenzi)/sum(fenmu) as ratio
from
(select province,city,sum(order_amt) fenzi
from zhanbi_test
where $expr{date:date_para}
and $expr{province:province_para}
and $expr{city:city_para}
group by province,city
)a
left join
(select province,sum(order_amt) fenmu
from zhanbi_test
where $expr{date:date_para}
and $expr{province:province_para}
and $expr{city:city_para}
group by province
)b on a.province=b.province
上述SQL是以city字段聚合的示例,您也可以为其他字段做聚合。通过这种参数形式生成的SQL,还需要在数据集的参数设置中,将日期字段转换成日期类型后,就可以创建数据集,并仪表板中展示。
如何通过参数SQL实现累计计算?
目前通过配置方式,支持当年累计、历年累计、月累计、季度累计和自定义,当数据集配置了财年时,且日期字段为财年字段时,日粒度支持财年累计和财季累计。具体请参见日期累计。
配置时,需要维度中选择日期类型的day
字段才能配置,如下图所示。
如果您需要任意选择一段时间,从选择的起始日期开始,之后再统计每个周期的累计,则需要通过参数SQL实现,月累计的参考语句如下:
select a.mon_date,avg(a.order_num) order_num,sum(b.order_num) add_num
from (
select date_format(report_date,'%Y/%m') mon_date,count(distinct order_id) order_num,max(date_format(report_date,'%Y/%m')) max_mon_date
from company_sales_record_copy
where $expr{report_date:month_date}
group by date_format(report_date,'%Y/%m')
)a
left join(
select date_format(report_date,'%Y/%m') mon_date,count(distinct order_id) order_num
from company_sales_record_copy
where $expr{report_date:month_date}
group by date_format(report_date,'%Y/%m')
)b on a.max_mon_date>=b.mon_date
group by a.mon_date
此时仪表板中,只要查询条件关联了参数字段,就可以通过筛选不同的月份区间,查询各个月份从起始月份开始,每个月的累计值。
如何通过参数SQL实现输入单个日期,可以查询最近n天数据?
目前Quick BI展示数据的逻辑为输入单个日期,只展示单个日期的数据;输入日期区间,才能展示日期区间的数据。如果有特殊需求,例如需要筛选两个图表,其中一个图表展示某一天数据,另一个图表展示该天起,最近3天的数据,则可以通过参数SQL来实现。参考SQL如下:
select report_date,area,product_type,count(distinct order_id) order_num
from company_sales_record
where area in ('西南','西北','华北')
and ( $expr{dateadd(report_date,1,'dd'):date1}
or $expr{dateadd(report_date,2,'dd'):date1}
or $expr{dateadd(report_date,3,'dd'):date1})
group by area,product_type,report_date
是否支持设置行级权限?
支持。请参见行级权限。
数据集默认显示多少条数据?
默认显示100条数据。
数据集的数据支持分页吗?
不支持。
新建字段为何无法在右侧显示?
如果是聚合型计算字段,则无法在预览数据时显示。
如何将地理数据应用到地图图表中?
在数据集编辑页面,将地理数据通过维度类型切换功能转换为相应的地理信息。
请参见创建并管理数据集。
如何设置使用描述为字段名称?
您可以在工作空间设置中配置该工作空间中创建数据集时使用表名或备注。
也可以在数据集字段批量配置面板,多选多个字段后批量使用描述为字段名称。
如果字段描述为空,则不允许使用描述为字段名称。
物理表中字段发生变更,数据集如何快速更新?
当查找不到物理字段时,由于该字段可能已经被用于分析或上层仪表板的展示,Quick BI不会自动删除字段,您可以在画布中单击该表,在右侧的操作面板中,查看字段变化情况,一键删除无效字段。
如何取两个数据库的数据做一个数据集?
将2个数据库的数据表分别拖入画布中并配置关联关系,使用Quick引擎抽取之后可正常使用。支持Quick引擎抽取加速的数据源请参见数据源功能项列表。
如何将数据集复制到其他工作空间?
通过数据集跨空间复制功能进行操作。请参见跨空间复制数据集。
如何配置关联模型,实现多表关联分析?
请参见构建模型。
配置关联模型类似SQL语句里的Join,您可以在数据集的编辑页面里配置关联模型。请参见构建模型。
数据集开启查询结果缓存有什么用?
数据集缓存机制可以加速报表访问,降低数据库的压力。例如,某个数据集开启缓存后,只要报表被访问过,则在预设的缓存时间内,其他人再访问报表时,系统无需查询即可直接显示报表数据。
sql数据集查询时间过长该如何优化?
1. 优化SQL逻辑,命中索引,或通过在数据库中创建视图避免复杂join,加快查询速度。
2. 给SQL占位符配置全局生效的默认值,避免大数据量全表扫描。