Как преобразовать вычисленную формулу из Salesforce в SQL - PullRequest
0 голосов
/ 14 мая 2019

У нас есть одна таблица Opportunity в salesforce, и у этой таблицы есть один вычисляемый столбец, называемый "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
)

Мы создали такую ​​же таблицу Opportunity в Hive SQL, и мы хотим написать запрос на выборку для вычисления значения столбца «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. Пожалуйста, помогите мне определить проблему.

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Могу сказать, что арифметика даты / времени неверна из-за временных составляющих значений. Я не знаю, в этом ли проблема с вашим конкретным плохим примером.

Например:

DateValue(CreatedDate) > Date(2017,01,01)

не эквивалентно:

CreatedDate > '2017-01-01'

Эквивалент будет:

CreatedDate >= '2017-01-02'

Проблема в том, что DateValue() удаляет компонент времени.

Аналогично,

DateValue(CreatedDate) > Effective_Date__c ,

требует модификации.

0 голосов
/ 15 мая 2019

Наконец, мы обнаружили, что в формуле Salesforce есть ошибка.

В формуле Salesforce мы проверяем «Effective_Date__c <> null», который всегда возвращает false.В Salesforce предпочтительнее использовать функцию IsBlank(), чем IsNull().Итак, мы изменили CalculatedFormula в Salesforce, чтобы исправить эту проблему.Новая формула будет иметь вид - IsBlank(Effective_Date__c).

Я не являюсь разработчиком Salesforce, поэтому не могу выбрать эту ошибку раньше.Обсудив это с разработчиком Salesforce, мы смогли найти эту ошибку, которая присутствует в системе с прошлого года.

В инструментальных средствах Salesforce я не нашел способа протестировать / отладить формулу вычисляемого поля, что очень расстраивает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...