业务对象饼图难题

Business Object Pie Chart Conundrum

由于Business Objects (Launchpad 4.1 SP6) 的限制,我需要构建一个饼图。足够简单,但我需要使用的数据集包含一个已评估的代码字段,并且根据字符串值 returned,对另一个字段求​​和(给定 activity 描述的应计分钟数return代码值)。

例如 [Code] returns "BRK1" 表示休息并评估为数字 15(表示 15 分钟)。另一个 [Code] returns "LUNCH" 并评估为数字 60(表示 60 分钟午餐)。这些类型的代码 return "Subtractive Codes",表示它们表示从计划工作中减去的时间。在相同的 [Code] 字段中还有描述工作段的代码。例如:[Code] returns "SB_PHN_SOUTH" 表示 "shift bucket" 的计算结果为 540 分钟。移位桶是 "Additive Codes".

因此,鉴于这些业务和编程规则,我有一个如下所示的数据集:

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

这可以很容易地变成饼图,但有一个主要错误。所有组 BREAK、DISC、MISS、NEUTR 和 NODISC 都是 Subractive 并且属于分子。代码 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("All other codes")) 的技术,但我要么得到了#MULTIVALUE 错误(无论我尝试过什么上下文运算符)或其他类型的不正确 return 值。

我在这里或其他地方没有找到描述类似问题(或解决方案)的帖子,所以我希望这里的一些优秀的 Business Objects Webi 专家可以提出解决方案。

感谢您的关注!

我建议使用标准表格 table 来获取您想要的值,然后从那里将其转换为饼图。

根据您的描述,我假设您希望在图表中看到的值是:

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]返回进行评估)