业务对象饼图难题
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]
返回进行评估)
由于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]
返回进行评估)