本文主要提供通过即席分析SQL创建数据集时的SQL应用示例。

如何通过参数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 ${date:date_para}
 and   ${province:province_para}
 and   ${city:city_para}
 group by province,city
)a
left  join
(select province,sum(order_amt) fenmu
 from  zhanbi_test
 where ${date:date_para}
 and   ${province:province_para}
 and   ${city:city_para}
 group by province
)b on a.province=b.province

上述SQL是以city字段聚合的示例,您也可以为其他字段做聚合。通过这种参数形式生成的SQL,还需要在数据集的参数设置中,将日期字段转换成日期类型后,就可以创建数据集,并仪表板中展示。

如何通过参数SQL实现累计计算?

目前通过配置方式,只支持年累计(YTD)、月累计(MTD)、季累计(QTD)。配置时,需要维度中选择日期类型的DAY字段才能配置,如下图所示。1
通过上述方式只能统计月初或年初、季初开始到所选日期的累计值,如果您需要任意选择一段时间,从选择的起始日期开始,之后再统计每个周期的累计,则需要通过参数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 ${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 ${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    (${dateadd(report_date,1,'dd'):date1}
or     ${dateadd(report_date,2,'dd'):date1}
or     ${dateadd(report_date,3,'dd'):date1})
group by area,product_type,report_date