不同的条形颜色取决于 SAPUI5 VizFrame 中的值
Different bar color depending on values in SAPUI5 VizFrame
我有一个 SAPUI5 VizFrame,其中包含一个 DimensionDefinition、Currency 和两个 MeasureDefinition、Turnover 和 Cost。成本应始终具有相同的颜色(我使用了 sapUiChartPaletteSequentialHue1)。如果成本高于营业额,营业额应具有颜色 sapUiChartPaletteSemanticBad,如果营业额高于或等于成本,则营业额应具有颜色 sapUiChartPaletteSemanticGood。
这是视图中的代码:
<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>
这是控制器中代码的相关部分:
plotArea: {
dataLabel: {
visible: false
},
dataPointStyle: {
"rules":
[
{
"dataContext": {"idTurnover": {"min": 0}},
"properties": {
"color":"sapUiChartPaletteSemanticBad"
},
"displayName":"Loss"
},
{
"dataContext": {"idTurnover": {"max": 0}},
"properties": {
"color":"sapUiChartPaletteSemanticGood"
},
"displayName":"Profit"
}
],
"others":
{
"properties": {
"color": "sapUiChartPaletteSequentialHue1"
},
"displayName":"Cost"
}
}
},
使用此代码,成本条始终是相同颜色,营业额小于 0 时营业额条为红色,营业额大于 0 时为绿色。但我不想将值与 0 进行比较,而是想比较它到成本栏。如果 Turnover >= Cost,颜色为 sapUiChartPaletteSemanticGood,如果 Turnover < Cost,颜色为 sapUiChartPaletteSemanticBad。如何比较这 2 个值?
您需要使用回调来执行两个属性之间的比较,而不是 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>
我有一个 SAPUI5 VizFrame,其中包含一个 DimensionDefinition、Currency 和两个 MeasureDefinition、Turnover 和 Cost。成本应始终具有相同的颜色(我使用了 sapUiChartPaletteSequentialHue1)。如果成本高于营业额,营业额应具有颜色 sapUiChartPaletteSemanticBad,如果营业额高于或等于成本,则营业额应具有颜色 sapUiChartPaletteSemanticGood。
这是视图中的代码:
<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>
这是控制器中代码的相关部分:
plotArea: {
dataLabel: {
visible: false
},
dataPointStyle: {
"rules":
[
{
"dataContext": {"idTurnover": {"min": 0}},
"properties": {
"color":"sapUiChartPaletteSemanticBad"
},
"displayName":"Loss"
},
{
"dataContext": {"idTurnover": {"max": 0}},
"properties": {
"color":"sapUiChartPaletteSemanticGood"
},
"displayName":"Profit"
}
],
"others":
{
"properties": {
"color": "sapUiChartPaletteSequentialHue1"
},
"displayName":"Cost"
}
}
},
使用此代码,成本条始终是相同颜色,营业额小于 0 时营业额条为红色,营业额大于 0 时为绿色。但我不想将值与 0 进行比较,而是想比较它到成本栏。如果 Turnover >= Cost,颜色为 sapUiChartPaletteSemanticGood,如果 Turnover < Cost,颜色为 sapUiChartPaletteSemanticBad。如何比较这 2 个值?
您需要使用回调来执行两个属性之间的比较,而不是 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>