问题描述
我有一个SAPUI5 VizFrame,其中有一个DimensionDeFinition,货币和两个MeasureDeFinition,周转和成本。成本应该始终具有相同的颜色(我使用了sapUiChartPaletteSequentialHue1)。如果“成本”高于“营业额”,则营业额应具有颜色sapUiChartPaletteSemanticBad;如果“营业额”高于或等于“成本”,则营业额应具有颜色sapUiChartPaletteSemanticGood。
这是视图中的代码:
class QuestionFormView(generic.CreateView):
form_class = QuestionAnswerForm
model = Answer
template_name = 'quiz/question-form.html'
def get_initial(self):
initial = super(QuestionFormView,self).get_initial()
initial['question'] = Question.objects.get(pk=self.kwargs['pk'])
return initial
这是控制器中代码的相关部分:
<viz:VizFrame xmlns="sap.viz" id="idDetailVizFrame" vizType='column' width="100%" height="100%" uiConfig="{applicationSet:'fiori'}">
<viz:dataset>
<vizData:FlattenedDataset data="{/DataSet}">
<vizData:dimensions>
<vizData:DimensionDeFinition name="Currency" value="{Currency}"/>
</vizData:dimensions>
<vizData:measures>
<vizData:MeasureDeFinition identity="idcost" name="{i18n>labelCost}" value="{Cost}" unit="{Currency}" />
<vizData:MeasureDeFinition identity="idTurnover" name="{i18n>labelAccountBalance}" value="{Turnover}" unit="{Currency}" />
</vizData:measures>
</vizData:FlattenedDataset>
</viz:dataset>
<viz:Feeds>
<vizFeeds:FeedItem id='valueCost' uid="valueAxis" type="Measure" values='idcost'/>
<vizFeeds:FeedItem id='valueTurnover' uid="valueAxis" type="Measure" values='idTurnover'/>
<vizFeeds:FeedItem id='categoryAxisFeed' uid="categoryAxis" type="Dimension" values="Currency"/>
</viz:Feeds>
</viz:VizFrame>
使用此代码,成本栏始终是相同的颜色,当营业额小于0时营业额栏为红色,而大于0则营业额栏为绿色。但是,我想将其与0进行比较,而不是比较费用栏。如果营业额> =成本,则颜色为sapUiChartPaletteSemanticGood,如果营业额
解决方法
您需要使用回调来执行两个属性之间的比较,而不是dataContext。 示例代码如下:-
dataPointStyle: {
rules: [{
callback: function (oContext,extData) {
/* I can access my Turnover value by using :- */
//oContext.Turnover
/* I can access my Cost value by using :- */
//extData.Cost
//Return either true or false,based on your logic,return oContext.Turnover < extData.Cost;
},properties: {
color: "sapUiChartPaletteSemanticBad"
},displayName: "Loss"
},{
callback: function (oContext,extData) {
return oContext.Turnover >= extData.Cost;
},properties: {
color: "sapUiChartPaletteSemanticGood"
},displayName: "Profit"
}],others: {
properties: {
color: "sapUiChartPaletteSequentialHue1",},displayName: "Cost"
}
}
vizframe用于复制问题:-
<viz:VizFrame id="idVizFrame" uiConfig="{applicationSet:'fiori'}" height='100%' width="100%" vizType='column'>
<viz:dataset>
<viz.data:FlattenedDataset data="{/milk}">
<viz.data:dimensions>
<viz.data:DimensionDefinition name="Week" value="{Week}"/>
</viz.data:dimensions>
<viz.data:measures>
<viz.data:MeasureDefinition name="Turnover" value="{Turnover}"/>
<viz.data:MeasureDefinition name="Cost" value="{Cost}"/>
</viz.data:measures>
</viz.data:FlattenedDataset>
</viz:dataset>
<viz:feeds>
<viz.feeds:FeedItem id='valueAxisFeed1' uid="valueAxis" type="Measure" values="Turnover"/>
<viz.feeds:FeedItem id='valueAxisFeed2' uid="valueAxis" type="Measure" values="Cost"/>
<viz.feeds:FeedItem id='categoryAxisFeed' uid="categoryAxis" type="Dimension" values="Week"/>
</viz:feeds>
</viz:VizFrame>