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

前提条件

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

输入SQL代码

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

  1. 进入自定义SQL页面。
    • 入口1:在数据源页面,单击右上角的即席分析SQL
    • 入口2:数据集新建页面,在左侧面板选择数据源,画布中没有任何数据表时,单击画布中的使用SQL代码创建第一张表自定义SQL创建
  2. 新建代码片段对话框中,输入SQL代码,单击运行
    SQL示例如下:
    SELECT  report_date,
            order_level,
            shipping_type,
            area,
            price,
            order_number
    from    company_sales_record
    where   ${report_date :report_date}
    and     ${order_level :order_level}
    and     ${order_number :order_number}
    单击确认
  3. 运行成功后,单击确定
    您可以在数据集的数据预览页面,看到结果预览。 预览界面

修改SQL代码

您可以通过以下2种方式修改SQL代码:
  • 鼠标悬浮至画布的表上,单击编辑代码
  • 单击画布上的目标表,在右侧的面板中,单击编辑代码
编辑代码

参数/占位符

Quick BI提供参数和占位符2种方式传参,在分析的过程中,当您在查看仪表板时需要把参数传到SQL中,可以按照需求进行选择。
类别 描述 使用场景 格式
占位符 可通过仪表板上的筛选控件传入一个值或一组值。
说明 当占位符是日期时,需要选择具体的日期格式,来控制传入值的格式。
适用于大部分需要传参的场景。 ${占位符名}
参数 可通过仪表板上的筛选控件传入一个条件。 当仪表板上的筛选条件中,用户可以自由修改筛选方式,需要使用参数,将整个筛选条件都传入SQL。
例如下图仪表板用户可设置 利润>50或者 利润<50,需要连同操作符一起传入SQL。 参数传参
${物理字段名:参数名}

配置方式

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

  1. 编辑代码片段页面,单击参数设置
  2. 可选:单击页面右上角的自动提取参数
    如果当前SQL中有占位符或参数,则系统会自动提取,请跳过此步骤。
  3. 参数设置页面,设置参数或占位符对应的变量类型并单击确定
    片段
  4. 单击保存,保存数据集。
    单击保存
  5. 在顶部菜单栏选择开始分析 > 创建仪表板
  6. 在仪表板编辑页面添加查询条件,绑定占位符和参数。
    例如,在设置查询条件时,用一个下拉单选筛选 区域,绑定SQL占位符,可传入1个值。 占位符传参
    用数值筛选过滤 利润,绑定SQL参数,传入一个条件。 参数传参
  7. 当仪表板查询时,会按照查询条件把对应内容传入占位符和参数中。
    例如,仪表板查询条件如下图所示。 查询条件
    则对应的SQL为如下:
    SELECT * FROM company_sales_record
    WHERE area = '华北' 
    AND profit_amt > 0
    占位符用法示例:
    SELECT * FROM tablename
    WHERE area in ('${area_ph}') -- 文本类型 多选
    AND name = '${name_ph}' -- 文本类型 单选
    AND number = ${number_ph}  -- 数值类型
    AND report_date > '${report_date_ph.get(0)}' -- 日期类型 获取日期范围控件起始日期
    AND report_date < '${report_date_ph.get(1)}' -- 日期类型 获取日期范围控件结束日期

标签占位符

可通过标签占位符获取当前访问用户的标签值。

格式: $tag{用户标签名}

例如,控制某员工只能看到华北大区的数据,只能看到商品A,商品B的数据,则配置某用户的标签:
  • 区域:华北
  • 商品:商品A, 商品B
SQL代码片段示例:
select * from table_name
where 
area = '$tag{区域}'
and
product in ('$tag{商品}')
当某用户访问数据时,系统会自动读取该用户的标签,运行时的SQL示例:
select * from table_name
where 
area = '华北'
and
product in ('商品A', '商品B')

后续步骤

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