繁体   English   中英

如何将计算公式从Salesforce转换为SQL

[英]How to convert calculated formula from salesforce to SQL

我们在salesforce中有一个“ 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
)

我们已经在Hive SQL中创建了相同的Opportunity表,并且我们想编写选择查询来计算“ Is_XYZ”列值。 我们已将公式从Salesforce语法转换为SQL语法。 因此,SQL中的公式将是-

SELECT
IF(
    (
        (
            (   UPPER(LeadSource__c) == 'XYZ' AND
                CreatedDate > '2017-01-01'
            )
            OR
            (   Is_PQR AND
                IF( Effective_Date__c IS NOT NULL,
                    CreatedDate > Effective_Date__c,
                    TRUE
                )
                AND
                IF( Effective_Date__c IS NOT NULL,
                    Effective_Date__c <= current_date,
                    TRUE
                )
            )
        )
        AND (UPPER(MailingState) <> 'NY')
        AND (UPPER(Lead_Sub_Source__c) <> 'PQRS')
    ),
    TRUE,
    FALSE
) as Is_XYZ
FROM Opportunity;

您能帮我确认两个公式(salesforce和SQL)是否相同? 我的意思是,您可以验证上述两个公式是否在做相同的事情。 我在双方(salesforce和Hive SQL)上都对其进行了测试,并且其行为有所不同。 该情况下的值为-

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而配置单元显示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公式中,我们正在检查始终返回falseEffective_Date__c <> null ”。 在Salesforce中,最好使用IsBlank()函数而不是IsNull() 因此,我们在Salesforce中更改了CalculatedFormula以更正此问题。 新公式将为IsBlank(Effective_Date__c)

我不是Salesforce开发人员,因此无法提早发现此错误。 与Salesforce开发人员讨论此问题后,我们便可以找到系统中存在的该错误(从去年开始)。

我发现在Salesforce工作台中无法测试/调试此Calculated字段公式,这非常令人沮丧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM