我遇到了一个问题,即Google Data Studio向我的社区连接器发送了错误的时间戳数据,因此,当我尝试过滤日期时,会出现错误。我有两个BigQuery TIMESTAMP
类型字段(分别名为timestamp
和created_at
),它们都直接传递到我的社区连接器,而没有修改。一旦我向报告中添加了日期过滤器(以便进行时间序列或常规过滤),就像这样:
然后我从连接器进行的查询(在我的BigQuery项目历史记录中查看)开始失败,如下所示:
Could not cast literal "20200825" to type TIMESTAMP at [1:677]
BigQuery中的查询如下所示:
SELECT t0.created_at, SUM(t0.sum_metric) AS t0_qt_1z4br3iwbc FROM (SELECT field1, field2, field3) from data_name.table_name where user_identifier in (2)) AS t0 WHERE (t0.created_at >= '20200825' AND t0.created_at <= '20200831') GROUP BY t0.created_at ORDER BY t0.created_at ASC;
这真的像是关于BigQuery的社区连接器的错误。有办法解决吗?我只是在做我没看见的错事?
答案 0 :(得分:1)
好,我解决了这个问题。在您的社区连接器中,您需要将此添加到您的配置中:
config.setDateRangeRequired(true);
这将随您的getData请求一起发送startDate和endDate参数(默认为28天)。像这样在getData()
中访问它们:
var startDate = request.dateRange.startDate;
var endDate = request.dateRange.endDate
,然后根据需要在查询中使用它们。
请注意,如果要在Google Data Studio中存储timestamp
字段并建立社区连接器,则需要设置一个计算所得的字段,以便报表可以适当地对其进行处理(显示一个人类可读的日期,而不是时间戳。我首先从数据库中将时间戳字段读取为类似STRING(timestamp, 'UTC') AS timestamp
的字符串,然后使用此值创建维度。可以在以下模式中完成此操作(如果不同,请使用适合您字段的解析):
fields.newDimension()
.setId('date_timestamp')
.setName('date_timestamp')
.setDescription('Timestamp as a date.')
.setFormula("TODATE($timestamp, '%Y-%m-%d %H:%M:%S%z', '%Y%m%d')")
.setType(types.YEAR_MONTH_DAY)