SAPUI5组合图数据和图表格式

时间:2015-06-23 18:58:08

标签: charts sapui5

我想创建一个SAPUI5组合图表 - 一个柱形图,其中每个月的特定类别的行将比较一年。用户可以选择大约11种可能的类别,但图表一次只显示一个类别的信息。

对于一个类别,它类似于以下内容: enter image description here

我可以创建图表来显示数据但我无法将其转换为使用基于类别的数据。我认为我可以做我想做的事,但我认为问题在于我的数据是如何提供的。

这是我的json(我在数据中显示了两个类别 - 我希望能够为用户选择的类别应用过滤器):

{
"bullet": [{
  "field":"Products Classified",
  "months":[{
    "month":"1",
    "current":"17",
    "previous":"140"
    } ,{
    "month":"2",
    "current":"37",
    "previous":"66"
    },{
    "month":"3",
    "current":"60",
    "previous":"66"
    },{
    "month":"4",
    "current":"41",
    "previous":"121"
    }]
  }, {
  "field":"Products Not Classified",
  "months":[{
    "month":"1",
    "current":"7",
    "previous":"25"
    } ,{
    "month":"2",
    "current":"50",
    "previous":"78"
    },{
    "month":"3",
    "current":"55",
    "previous":"56"
    },{
    "month":"4",
    "current":"45",
    "previous":"60"
    }]
}]

}

这是我的控制器的一部分......

var oModel = new JSONModel("ByYear_sum.json");
sap.ui.model.FilterOperator.EQ, filterText);    

var oDataset = new FlattenedDataset({
dimensions: [{
        name: "Month",
        value: "{month}"
        }],
 measures: [{
      name: "Start Year",
      value: "{current}"
    },{
      name: "End Year",
      value: "{previous}"
    }],
data: {
          path: "/bullet"
          filters: [oFilter]
        }
    });
oVizFrame.setDataset(oDataset);
oVizFrame.setModel(oModel);

oVizFrame.setVizProperties({
    plotArea: {
        dataLabel: {
            visible: true,
            formatString: '#,##0'
        }
    },
    valueAxis: {
        title: {
            visible: false
        }
    },
    legend: {
        title: {
            visible: false
        }
    },
    title: {
        visible: true,
        text: 'Year Comparison'
    }
});

var feedValueAxis = new FeedItem({
      'uid': "valueAxis",
      'type': "Measure",
      'values': ["Start Year", "End Year"]
    }),
   feedCategoryAxis = new FeedItem({
      'uid': "categoryAxis",
      'type': "Dimension",
      'values': ["Month"]
    });

filterText的值将用于显示所选类别的图表信息(例如,分类的产品或未分类的产品)。

我尝试将/ months /放在值的前面(例如" {/ months / previous}")来获取类别的值(即分类的产品)但它没有&#39 ; t似乎正确地找到了数据(我得不到数据)。

我还想显示月份的文本值,而不是数字,如何将格式化程序应用于值?

我的示例图表显示年份数字....被比较的年份来自用户输入,我目前无法弄清楚如何获得所选年份的价值 - 我必须放置'开始年份&# 39;和结束年份'。有没有办法让图例和popover显示年份值(因此根据用户输入动态)?我尝试的所有内容都给了我错误,并且不会显示图表 - 我认为因为相同文本需要匹配所需的内容,而当我尝试使用它无法匹配的值时。

1 个答案:

答案 0 :(得分:0)

我终于能够在其他人的指导下完成这项工作。

1)在标题中,当用户选择不同的过滤器时,我能够设置和更新标题属性。

2)路径也不正确......应该是/ bullet / 0 /月 - ' 0'根据过滤器的变化而变化我只需要选择所选类别的索引并将其用于路径。

3)我更改了数据以返回月份缩写,而不是数字。

4)如果你点击一个数据点,我终于能够在传奇和弹出窗口中显示这些年份。在FlattenedDataSet定义中,我在创建FlattenedDataSet时传入一个变量名称 - 例如:name是name:sYr,其中传入了sYr和年份的值。在FeedItem创建中,值看起来像:' values':[sYr,eYr]我以为我曾尝试过这些,但它似乎与所有其他更改一起使用。我只需要创建新的FlattenedDataSet和FeedItems(并删除旧的FeedItems)并使用新值更新图表。