Попытка суммировать поле формулы на основе ограничений из другого поля

Немного предыстории отчета: это отчет о продуктивности наших сотрудников, работающих в нашем бизнесе. Мы определяем их продуктивность исходя из продолжительности визитов к клиентам. Некоторые из наших сотрудников предлагают групповые занятия. Они взимают плату с каждого клиента в группе, даже если они дают, например, только один час обслуживания, они могут выставить счет за 10 часов, если в группе 10 человек. Определяем какую услугу они оказали по сервисным кодам.

Итак, у меня есть два поля в этой формуле: поле кода услуги и поле продолжительности.

Поле длительности изначально является полем STRING из базы данных, хотя оно дает только числовые данные, поэтому я изменил его на numberVar. Поле сервисного кода также является строковым полем и иногда содержит символы и цифры.

Мне нужно, чтобы Crystal Reports взял сумму продолжительности. Однако, если сервисный код, скажем, «1000», он должен сначала разделить продолжительность на 3, прежде чем суммировать ее. Вот тут меня зацепило.

Вот мой код на время:

local numbervar num1;
If GroupName ({billing_tx_charge_detail.v_SERVICE_CODE})="1530" then 
    num1 := ToNumber({billing_tx_charge_detail.v_duration})/3
else num1 := ToNumber({billing_tx_charge_detail.v_duration})

Затем я делаю отдельную формулу для суммы с именем sumDuration:

Sum(@duration)

Я получаю сообщение об ошибке, что это поле не может быть суммировано. После двухдневного поиска в Google я обнаружил, что Crystal не может суммировать поля или формулы, содержащие константы. Если я просто скажу:

local numbervar num1;
num1 := ToNumber({billing_tx_charge_detail.v_duration})

тогда я могу обобщить @duration. Что мне не хватает? Это должно быть что-то простое, но я просто не вижу этого. Есть ли способ создать пользовательскую функцию для выполнения того, что я пытаюсь здесь получить? Или все еще проще?

Один человек предложил создать SQL-команду для проведения расчетов до того, как данные попадут в отчет. Я новичок в SQL, поэтому понятия не имел, с чего начать.


person Doctor Gurge    schedule 12.02.2016    source источник


Ответы (1)


Если вы группируете по коду услуги и размещаете приведенную выше формулу в нижнем колонтитуле, вы будете вычислять {billing_tx_charge_detail.v_duration} только для последней записи в группе. Если вы собираетесь использовать формулу, просуммировать результаты и поместить результаты в нижний колонтитул кода службы, попробуйте следующее. (в основном удалите ссылку на имя группы)

If {billing_tx_charge_detail.v_SERVICE_CODE}) = "1530" then 
ToNumber({billing_tx_charge_detail.v_duration})/3 else
ToNumber({billing_tx_charge_detail.v_duration})

Вы можете использовать переменные (num1), если хотите, но они не нужны. Вы по-прежнему можете использовать вторую формулу, на которую вы ссылались, и поместить ее в нижний колонтитул группы ИЛИ вы можете поместить первую формулу в раздел сведений, щелкнуть правой кнопкой мыши и вставить сводку в группу. нижний колонтитул. Вы также можете поместить в нижний колонтитул отчета, если вам нужно, чтобы он тоже был там.

person CoSpringsGuy    schedule 12.02.2016
comment
Это сработало как шарм. Я добавил else в утверждение после деления на 3. Значит, единственное, что вызвало у меня затруднения, это ссылка на название группы? Ух ты. Кроме того, если бы мне нужно было сослаться на несколько служебных кодов вместо одного 1530, я сделал бы это, просто добавив ключевые слова AND или OR, или у CR есть какое-то специальное ключевое слово, которое оно использует для включения нескольких значений в условное выражение? - person Doctor Gurge; 15.02.2016
comment
{billing_tx_charge_detail.v_SERVICE_CODE}) в ('1530','1531','1532','и т. д.') - person CoSpringsGuy; 15.02.2016
comment
{billing_tx_charge_detail.v_SERVICE_CODE} в ('1530','1531','1532','и т. д.') - person CoSpringsGuy; 15.02.2016