Mysql 如何将计算公式从salesforce转换为SQL
salesforce中有一个Mysql 如何将计算公式从salesforce转换为SQL,mysql,sql,salesforce,hiveql,Mysql,Sql,Salesforce,Hiveql,salesforce中有一个Opportunity表,该表有一个计算列,名为“Is_XYZ” “Is_XYZ”列的计算公式为- calculatedFormula: IF( AND( OR( AND( UPPER(LeadSource__c) == 'XYZ', DateValue(CreatedDate) > Date(2017,01,01) ),
Opportunity
表,该表有一个计算列,名为“Is_XYZ
”
“Is_XYZ
”列的计算公式为-
calculatedFormula: IF(
AND(
OR(
AND(
UPPER(LeadSource__c) == 'XYZ',
DateValue(CreatedDate) > Date(2017,01,01)
),
AND( Is_PQR ,
IF(
Effective_Date__c <> null,
DateValue(CreatedDate) > Effective_Date__c ,
TRUE
),
IF(
Effective_Date__c <> null,
Effective_Date__c <= TODAY(),
TRUE
)
)
),
UPPER(MailingState) <> 'NY',
UPPER(Lead_Sub_Source__c) <> 'PQRS'
),
TRUE,
FALSE
)
你能帮我确认两个公式(salesforce和SQL)是相同的吗?我的意思是,你能证明上面两个公式做的是相同的事情吗。
我在两个方面(salesforce和HiveSQL)对它进行了测试,它的表现有所不同。这种情况下的值为-
LeadSource__c = abcdef
Lead_Sub_Source__c = klmnop
CreatedDate = 2019-04-02T00:06:49.000Z
MailingState = HI
Is_PQR = true
Effective_Date__c = 2019-04-09
对于上述值,salesforce显示
Is_XYZ=true
,hive显示Is_XYZ=false
。请帮助我确定问题。我可以看出,由于值上的时间成分,日期/时间算术不正确。我不知道你的坏榜样是否就是这个问题
例如:
DateValue(CreatedDate) > Date(2017,01,01)
不等同于:
CreatedDate > '2017-01-01'
等同于:
CreatedDate >= '2017-01-02'
问题是删除时间组件的DateValue()
同样地
DateValue(CreatedDate) > Effective_Date__c ,
需要修改。最后,我们发现Salesforce公式中存在错误 在Salesforce公式中,我们检查“
Effective\u Date\u c null
”,它总是返回false
。在Salesforce中,最好使用IsBlank()
函数,而不是IsNull()
。
因此,我们在Salesforce中更改了CalculatedFormula以更正此问题。新公式将为-为空(生效日期)
我不是Salesforce开发人员,因此无法更早地发现此错误。在与Salesforce开发人员讨论后,我们能够找到系统中去年出现的这个bug
我在Salesforce workbench中找不到任何方法来测试/调试这个计算字段公式,这非常令人沮丧。乍一看,我还认为这可能是由于比较了date和datetime数据类型所致。但createdDate和EffectiveDate之间的差异超过1天,所以这个问题不是由于日期字段之间的比较造成的。谢谢你@Gordon的回答。
DateValue(CreatedDate) > Effective_Date__c ,