自定义SQL

在数据分析中,一些复杂的逻辑或模型可通过自定义SQL创建数据表。并且自定义SQL支持传参,可满足更复杂多变的分析场景。

前提条件

您已获取数据,请参见连接数据源

使用限制

API数据源不支持自定义SQL。

输入SQL代码

您可以通过以下2种方式添加自定义SQL。

  1. 进入自定义SQL页面。

    • 入口1:在数据源页面,单击右上角的SQL创建数据集image.png

    • 入口2:数据集编辑页面,在左侧面板选择数据源,画布中没有任何数据表时,单击画布中的使用SQL代码创建第一张表或左侧面板中的SQL代码创建表image.png

  2. 输入SQL代码后,单击运行

    image.png

    SQL示例如下:

    SELECT  report_date,
            order_level,
            shipping_type,
            area,
            price,
            order_number
    from    company_sales_record
    where   $expr{report_date :report_date}
    and     $expr{order_level :order_level}
    and     $expr{order_number :order_number}

    运行成功后,您可以在运行结果页签,看到结果预览。image.png

  3. 单击确认编辑

    保存自定义SQL创建的数据集。

修改SQL代码

您可以通过以下2种方式修改SQL代码:

  • 鼠标悬浮至画布的表上,单击编辑代码图标。image.png

  • 单击画布上的目标表,在右侧的面板中,单击编辑代码image.png

占位符

Quick BI提供占位符的方式进行传参,在查看报表并进行数据分析的过程中,您可以通过查询控件把占位符的值传到SQL中,从而实现数据的灵活分析。Quick BI支持值占位符和表达式占位符,您可以按照需求进行配置。

类型

描述

使用场景

格式

值占位符

可通过仪表板上的查询控件传入一个值、一组值。

说明

当占位符是日期时,需要选择具体的日期格式,来控制传入值的格式。

适用于大部分需要传参的场景。

'$val{占位符名}'

表达式占位符

可通过仪表板上的查询控件传入一个条件。

当仪表板上的筛选条件中,用户可以自由修改筛选方式,需要使用表达式占位符,将整个筛选条件都传入SQL。

例如下图仪表板用户可设置利润>50或者利润<50,需要连同操作符一起传入SQL。参数传参

$expr{物理字段名:占位符名}

配置方式

根据业务需要写SQL,加入占位符。

  1. 在SQL代码编辑页面,单击占位符管理

    image.png

  2. 占位符管理面板,配置以下占位符并单击确定

    image.png

    配置项请参见占位符管理

    说明

    如果占位符应用在select语句后面,必须设置全局生效的默认值。

    例如,在创建数据集时在select语句后面加了占位符“profit_range”,代码如下:

    SELECT report_date, order_level, shipping_type,price,order_number,area,
     case when profit_amt< ${profit_range} then'亏损' 
     when profit_amt> ${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}

    此时如果不设置默认值,无法正常运行。

    image.png

    需在占位符管理里设置“profit_range”的查询默认值。

    image.png

    默认值设置后可以正常运行,运行结果如下:

    image.png

  3. 单击保存,保存数据集。image.png

  4. 在顶部菜单栏选择开始分析 > 创建仪表板

  5. 在仪表板编辑页面添加查询条件,绑定占位符。

    例如,在设置查询条件时,用一个下拉单选筛选area,绑定SQL占位符,可传入1个值。image.png

    用文本筛选过滤order_number,绑定SQL参数,传入一个条件。image.png

  6. 当仪表板查询时,会按照查询条件把对应内容传入值占位符和表达式占位符中。

    例如,仪表板查询条件如下图所示。image.png

    则对应的SQL为如下:

    SELECT * FROM company_sales_record
    WHERE area = '华北' 
    AND order_number > 0

    占位符用法示例:

    SELECT * FROM tablename
    WHERE area in ('$val{area_ph}') -- 文本类型 多选
    AND name = '$val{name_ph}' -- 文本类型 单选
    AND number = $val{number_ph}  -- 数值类型
    AND report_date > '$val{report_date_ph.get(0)}' -- 日期类型 获取日期范围控件起始日期
    AND report_date < '$val{report_date_ph.get(1)}' -- 日期类型 获取日期范围控件结束日期

占位符的使用场景请参见占位符

说明

兼容历史写法:

值占位符(原占位符)的历史写法:${占位符名}

表达式占位符(原参数)的历史写法:${物理字段名:参数名}

后续步骤

当您需要分析的字段在不同的数据表时,Quick BI支持关联数据表,请参见构建模型