2016-05-26 3 views
1

С ограничениями Business Objects (Launchpad 4.1 SP6) мне нужно построить круговую диаграмму. Достаточно просто, но набор данных, который я должен использовать, содержит поле кода, которое оценивается, и в зависимости от возвращаемого строкового значения другое поле суммируется (начисленные минуты данного действия, описываемые значением кода возврата).Business Object Pie Chart Conundrum

Например, [Код] возвращает значение «BRK1», означающее разрыв и оценку числа 15 (с указанием 15 минут). Другой [Code] возвращает «LUNCH» и оценивает число 60 (с указанием 60-минутного обеда). Эти типы кодов возвращают «Subtractive Codes», что означает, что они представляют время, вычитаемое из запланированной работы. В пределах того же поля [Код] также указаны коды, описывающие рабочие сегменты. Например: [Код] возвращает «SB_PHN_SOUTH», указывающий «ведро сдвига», которое оценивается до 540 минут. Ведра сдвига - это «Аддитивные коды».

Таким образом, учитывая эти деловые и программные правила, у меня есть набор данных, который выглядит следующим образом:

EWFMCodeSelect EWFMPieChart 
BREAK   2425685 
DISC   443075 
MISS   83476 
NEUTR   2700 
NODISC   582787 
SHIFT   16120299 

Это может быть легко превращена в виде круговой диаграммы, но с одной серьезной ошибки. Все группы, BREAK, DISC, MISS, NEUTR и NODISC являются субтрактивными и относятся к числителю. Код SHIFT является знаменателем. SHIFT представляет 9 часов времени переключения, разрывов и такого вычитания из времени переключения, поэтому на точной круговой диаграмме будет отображаться каждое вычитаемое ведро в процентах от всего времени «SHIFT».

У меня есть две переменные для значений группы в ковши для оценки и суммирования:

=If([Code]InList("BRK1"; "BRK2"; "BRK3"; "LUNCH")) Then"BREAK" 
ElseIf([Code]InList("TEAM"; "MTG"; "PROJ"; "TRNG")) Then "DISC" 
ElseIf([Code]InList("LATE";"NOSHOW";"UNPAID";"UPVAC")) Then "MISS" 
ElseIf([Code]InList("COACH")) Then "NEUTR" 
ElseIf([Code]InList("VAC";"LOA";"SICKUP";"SICKPL")) Then "NODISC" 
Else("SHIFT") 

, а затем:

=If([EWFMCodeSelect]="BREAK") Then Sum([TimeDiff (ToInt)]ForEach([Clndr Date];[Time-Interval];[Agent Login];[Code])) 
ElseIf([EWFMCodeSelect]="DISC") Then Sum([TimeDiff (ToInt)]ForEach([Clndr Date];[Time-Interval];[Agent Login];[Code])) 
ElseIf([EWFMCodeSelect]="MISS") Then Sum([TimeDiff (ToInt)]ForEach([Clndr Date];[Time-Interval];[Agent Login];[Code])) 
ElseIf([EWFMCodeSelect]="NEUTR") Then Sum([TimeDiff (ToInt)]ForEach([Clndr Date];[Time-Interval];[Agent Login];[Code])) 
ElseIf([EWFMCodeSelect]="NODISC") Then Sum([TimeDiff (ToInt)]ForEach([Clndr Date];[Time-Interval];[Agent Login];[Code])) 
ElseIf([EWFMCodeSelect]="SHIFT") Then Sum([TimeDiff (ToInt)]ForEach([Clndr Date];[Time-Interval];[Agent Login];[Code])) 

Я пробовал различные методы для Sum ("SHIFT") - (InList («Все остальные коды»)), но я либо получаю ошибку #MULTIVALUE (независимо от того, какие я пытаюсь использовать Контекстные операторы), либо какой-либо другой тип неправильного возвращаемого значения.

Я не нашел сообщений здесь или где-либо еще, описывающих подобную проблему (или решение), поэтому я надеюсь, что некоторые замечательные эксперты Business Objects Webi могут предложить путь к решению.

Благодарим за внимание!

ответ

1

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

На основании вашего описания, я предполагаю, что значения, которые вы хотите видеть на диаграмме являются:

EWFMCodeSelect 
BREAK   15.0% 
DISC    2.7% 
MISS    .5% 
NEUTR    .0% 
NODISC   3.6% 

Эта функция должна получить вам проценты:

=[TimeDiff] 
/NoFilter((Sum([TimeDiff] 
       ForAll([EWFMCodeSelect]) 
       Where ([EWFMCodeSelect] = "SHIFT")))) 

Так как вы не хотите пирог для [SHIFT], вам нужно будет поместить фильтр на блок, чтобы его исключить (функция NoFilter() в формуле приносит [SHIFT] назад для оценки)

+0

Спасибо, что нашли время Джо, я ценю вашу помощь. Я удалил предложение ELSE в переменной EWFMCodeSelect и отфильтровал блок отчета, чтобы исключить значения SHIFT. Я использовал вашу формулу в новой переменной, которую я нежно вызываю EWFMPieChart (%), удалив переменную CodeSelect в блоке вместе с моей новой переменной, и я получаю ошибку #MULTIVALUE по всем направлениям.Я возился с обычными комбинациями ForEach, которые я использовал для очистки многозначных ошибок в других ситуациях в этом rpt, но безрезультатно. Какие-нибудь дополнительные предложения? –

+0

Можете ли вы обновить свой вопрос с помощью полных формул, которые вы используете сейчас? – Joe

+0

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