【问题标题】:Talend-Convert IF-THEN ELSE into Ternary operatorTalend-将 IF-THEN ELSE 转换为三元运算符
【发布时间】:2018-12-07 18:40:14
【问题描述】:

我们正在尝试将 tableau Reporting/BI 工具的 IF-THEN-ELSE 语句转为 TERNARY OPERATOR Java Based Talend tool 或 JAVA based IF-THEN-ELSE

输入数据

if isnull([Ship Date (Calculated)]) then
(if (attr(trim([Corp Acct Name])) = 'ABC' 
or attr(trim([Corp Acct Name])) ='BCD' 
or attr(trim([Corp Acct Name])) ='CDE') 
then 
(if DATEPART('weekday',ATTR([ ShipDate])) =1 then (attr([ ShipDate])-3)
elseif DATEPART('weekday',ATTR([ ShipDate])) =2 then (attr([ ShipDate])-3)
else  (attr([ShipDate])-2) END
) else (if DATEPART('weekday',ATTR([ ShipDate])) =1 then (attr([ ShipDate])-2)
else  (attr([ ShipDate])-1) END
) end)
ELSE
(if (attr(trim([Corp Acct Name])) = 'ABC' 
or attr(trim([Corp Acct Name])) ='BCD' 
or attr(trim([Corp Acct Name])) ='CDE') 
then 
(if DATEPART('weekday',[Ship Date (Calculated)])=1 then ([Ship Date (Calculated)]-3)
elseif DATEPART('weekday',[Ship Date (Calculated)])=2 then ([Ship Date (Calculated)]-3)
else ([Ship Date (Calculated)]-2) end)
 else (if DATEPART('weekday',[Ship Date (Calculated)])=1 then ([Ship Date (Calculated)]-2)
else ([Ship Date (Calculated)]-1) end) end)
END

此处使用的字段及其数据类型

[Ship Date (Calculated)]- date
[Corp Acct Name] -String
[ ShipDate] - Date

我们试过了:

row1.ShipDateCalculated==null?("ABC".equalsIgnoreCase(row1.CorpAcctName) || "BCD".equalsIgnoreCase(row1.CorpAcctName
||"CDE".equalsIgnoreCase(row1.CorpAcctName))?(TalendDate.getPartOfDate("DAY_OF_WEEK",row1.ShipDate) ==1?TalendDate.addDate(TalendDate.formatDate("MM/dd/yyyy", row1.ShipDate ),"MM/dd/yyyy",-3,"dd"):
(TalendDate.getPartOfDate("DAY_OF_WEEK",row1.ShipDate) ==2?TalendDate.addDate(TalendDate.formatDate("MM/dd/yyyy", row1.ShipDate ),"MM/dd/yyyy",-3,"dd"):TalendDate.addDate(TalendDate.formatDate("MM/dd/yyyy", row1.ShipDate ),"MM/dd/yyyy",-2,"dd")
:(TalendDate.getPartOfDate("DAY_OF_WEEK",row1.ShipDate) ==1?TalendDate.addDate(TalendDate.formatDate("MM/dd/yyyy", row1.ShipDate ),"MM/dd/yyyy",-2,"dd"):TalendDate.addDate(TalendDate.formatDate("MM/dd/yyyy", row1.ShipDate ),"MM/dd/yyyy",-1,"dd"):""))

输出数据:

寻找基于JAVA的三元运算符。

condition1?(condition2?value if true:value if false): (condition3?value if true:value if false)

更多错误:在当前 tmap 语法上添加 else 部分后。出现错误

【问题讨论】:

  • 您应该将代码转换为 Java 并将其放入 tJavaRow 组件中以处理数据。或者,您可以重新创建使用 Talend 组件和 Talend 检查创建的所有代码。这可能会变得更简洁一些,但最终会有更多组件。
  • 我正在尝试捕获到 tmap ternery 运算符表达式
  • 请向我们展示您现在尝试过的内容,我们可以从这里开始使其发挥作用。
  • @Corentin 更新问题中的已尝试部分。请看一下。

标签: java if-statement tableau-api talend


【解决方案1】:

您的代码中的括号都搞砸了,它没有编译。 您必须进入工作中靠近设计器选项卡的“代码”选项卡,以获取代码的详细信息。它将向您显示编译错误,并提供比错误弹出窗口更多的详细信息。

    row1.ShipDateCalculated==null?
("ABC".equalsIgnoreCase(row1.CorpAcctName) || "BCD".equalsIgnoreCase(row1.CorpAcctName)||"CDE".equalsIgnoreCase(row1.CorpAcctName))?
TalendDate.getPartOfDate("DAY_OF_WEEK",row1.ShipDate) ==1?
TalendDate.addDate(TalendDate.formatDate("MM/dd/yyyy", row1.ShipDate ),"MM/dd/yyyy",-3,"dd"):
TalendDate.getPartOfDate("DAY_OF_WEEK",row1.ShipDate) ==2?
TalendDate.addDate(TalendDate.formatDate("MM/dd/yyyy", row1.ShipDate ),"MM/dd/yyyy",-3,"dd"):
TalendDate.addDate(TalendDate.formatDate("MM/dd/yyyy", row1.ShipDate ),"MM/dd/yyyy",-2,"dd"):
TalendDate.getPartOfDate("DAY_OF_WEEK",row1.ShipDate) ==1?
TalendDate.addDate(TalendDate.formatDate("MM/dd/yyyy", row1.ShipDate ),"MM/dd/yyyy",-2,"dd"):
TalendDate.addDate(TalendDate.formatDate("MM/dd/yyyy", row1.ShipDate ),"MM/dd/yyyy",-1,"dd"):
"" 

【讨论】:

  • 当我运行相同的表达式时抛出此错误paste.ofcode.org/TEBUEXqdAT6iVcqnMkpuW5。否则它看起来不错。
  • 问题现已解决。缺少一个“)”。 ShipDateCalculated 未解析为字段。它是输出列。所以我试图在转换这个输出列的过程中使用输出列。 talend有什么办法吗?
  • 我刚刚在 talend 测试服务器中测试了上述语法。它正在抛出这个堆栈跟踪。paste.ofcode.org/nGSfyVb7NLJHuZRUk6rW5y
  • " String 类型中的方法 equalsIgnoreCase(String) 不适用于参数 (Date)" => 这个消息很清楚,只需检查您的字段 CorpAcctName 的类型...跨度>
  • 谢谢我检查并解决了。 pastie.org/10951640 使用上述表达式后。出现以下错误paste.ofcode.org/avQhF4gHPGtdVnZdvDPiVh
猜你喜欢
  • 2021-02-22
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 2012-08-02
  • 2012-07-11
  • 2019-05-21
相关资源
最近更新 更多