在LookML中允许使用sql作为view的源表,其实相当于一个视图。
在view的定义中把sql_table_name改成drived_table,然后在里面写sql就好了。
不过这样有一个小问题,如果这个sql中有时间相关的字段,
当用户筛选了时间的时候,是不会影响到这个sql语句的。
比如这是一个登陆相关的view,我想在explore查询前两天的登陆情况,然后筛选了日期dimension为前两天。
这个时候点查询的话,会先查询整张login表,然后再选出前两天的数据。
因为looker底层实际是根据你选择的dimension和measure去构造sql。
而drived_table中的sql是直接被当场一个with子表来处理的,所以bigquery会先执行这个with子句来查数据。
这样的问题就是我只想查前两天的数据,但是用了整张表的流量。(前提是在bigquery中已经按照时间做了分区)
为了处理这种情况,lookml有一个模板语法,类似于jinja模板的填充。使用{% variable %}
具体可以参照这篇文档Templated Filters and Liquid Parameters
现在有了模板语法,我们就可以在drived_table的sql中接收到用户选择的参数了。
where ts between {% date_start date_filter %} and {% date_end date_filter %} )
filter: date_filter {
type: date
}
比如上面语句就可以接收用户选择的时间。
网友评论