如何在Tableau中按照用户自定义日期获取并加载对应数据?
Tableau实时连接动态日期过滤解决方案
报错原因说明
- 你编写的计算字段语法不符合MAKEDATE函数的参数要求:MAKEDATE需要传入独立的年、月、日三个参数,你传入了DATETRUNC返回的日期类型值,会直接触发语法错误
- 实时连接场景下部分Tableau独有函数无法被底层数据源兼容,会出现执行失败的情况
最优解决方案(推荐:直接下推逻辑到数据源,性能更高)
你当前用的是Oracle语法的SQL,直接把参数嵌入自定义SQL即可实现动态日期过滤,不需要在Tableau层面写计算字段,修改后的自定义SQL如下:
select distinct XX.ACCOUNT_NUM, (A.TOTAL_BILLED_TOT-A.TOTAL_PAID_TOT)/1000 arrears, ((A.TOTAL_BILLED_TOT-A.TOTAL_PAID_TOT)/1000 - XX.SUM_BILL ) TILL_REF_JUL20 FROM ( select /*+ parallel (bill ,40 ) */ distinct account_num, sum(INVOICE_NET_mny + INVOICE_TAX_mny)/1000 SUM_BILL from bill where account_num in (Select account_num from MyTable) -- 替换原来的固定日期条件,引用ref_Month参数生成动态日期 and trunc(bill_dtm) > TO_DATE('07-' || TO_CHAR(DATEADD(month, 1, <ref_Month>), 'Mon-YYYY'), 'dd-Mon-YYYY', 'NLS_DATE_LANGUAGE = AMERICAN') and cancellation_dtm is null group by account_num )xx , account a where xx.ACCOUNT_NUM = A.account_num
注:Tableau自定义SQL中引用参数的格式为
<参数名>,会自动把用户选择的参数值代入SQL执行,过滤逻辑直接在数据库层面完成,实时连接场景下性能远高于Tableau层面计算字段过滤
备选解决方案(不修改自定义SQL,修正计算字段)
如果不想改动自定义SQL,可以把原错误的计算字段改成兼容实时连接的写法,生成「参数月份+1后的当月7号」的正确表达式如下:
DATE( DATETRUNC('month', DATEADD('month', 1, [Ref_Month])) + 6 )
之后把bill_dtm字段拖到筛选器,设置过滤条件为大于上述计算字段即可。
内容的提问来源于stack exchange,提问作者Rmd90
相关产品推荐
相关产品推荐

