superset中仅仅是对数据表的操作很多时候还是没法满足我们的数据展示需求,因此superset提供了jinja template的方式让我们更为灵活地自定义sql语句。
使用说明
通过jinja中文文档http://docs.jinkan.org/docs/jinja2/templates.html,我们可以了解jinja template如何使用,包括各种分隔符:
1 | {% ... %} |
前者用于执行诸如 for 循环 或赋值的语句,后者把表达式的结果打印到模板上,filters,条件判断,宏等。
superset关于jinja template的说明:https://superset.incubator.apache.org/sqllab.html。其中superset提供了`filter_values`和`url_param`两个jinja方法,其中`filter_values`更为重要。`filter_values`可以接收filter_box这个chart的值,并且以列表的方式输出。
superset还提供了一些操作函数,与python的import层级一一对应,比如:
time
:time
datetime
:datetime.datetime
uuid
:uuid
random
:random
relativedelta
:dateutil.relativedelta.relativedelta
还可以使用jinja内置过滤器并且通过管道的方式使用:http://docs.jinkan.org/docs/jinja2/templates.html#id21。
例子
以下是在SQLLab中使用jinja template的例子:
1 | SELECT COUNT(DISTINCT userId)/ |
1 | {% set first_day = (datetime.now() + relativedelta(days=-1)).strftime("%Y-%m-%d") %} |
1 | {% set first_day = (datetime.now() + relativedelta(days=-2)).strftime("%Y-%m-%d") %} |