SAPUI5中dual_timeseries_combination类型VizFrame绑定报错求助
解决dual_timeseries_combination图表的[50053] Incomplete dimensions binding错误
我帮你排查了代码里的问题,这个错误主要是因为图表的Feed绑定不符合dual_timeseries_combination的要求,再加上日期格式不兼容导致的,下面是具体的修复方案:
问题分析
- FeedItem绑定错误:
dual_timeseries_combination是双Y轴的组合图表,要求分别为两个度量值绑定独立的valueAxis和valueAxis2FeedItem,你之前把两个度量都塞到同一个valueAxis里,导致维度绑定不完整,触发了[50053]错误。 - 日期格式不兼容:你提供的日期是
MM/DD/YYYY格式的字符串,但SAPUI5的日期维度需要ISO 8601标准格式(YYYY-MM-DD)或Date对象,否则无法正确解析为时间维度。 - 时间轴间隔配置缺失:
timeAxis.interval.unit设为空字符串,可能导致时间轴渲染异常。
修复步骤
1. 修正视图中的FeedItem绑定
修改xyz.view.xml里的<viz:feeds>部分,将两个度量分别绑定到valueAxis和valueAxis2:
<viz:feeds> <viz.feeds:FeedItem uid="valueAxis" type="Measure" values="Revenue" /> <viz.feeds:FeedItem uid="valueAxis2" type="Measure" values="Cost" /> <viz.feeds:FeedItem uid="timeAxis" type="Dimension" values="Date" /> </viz:feeds>
2. 转换日期格式为ISO标准
在xyz.controller.js里添加日期转换函数,把现有的MM/DD/YYYY格式转换成YYYY-MM-DD,同时完善双Y轴的配置:
sap.ui.define([ "sap/ui/core/mvc/Controller", "sap/ui/model/json/JSONModel", "sap/viz/ui5/format/ChartFormatter" // 确保导入这个类 ], function(Controller, JSONModel, ChartFormatter) { "use strict"; // 日期转换函数:MM/DD/YYYY → YYYY-MM-DD function convertToISODate(sDate) { const [month, day, year] = sDate.split("/"); return `${year}-${month.padStart(2, "0")}-${day.padStart(2, "0")}`; } return Controller.extend("your.namespace.xyz", { onInit : function () { var oViewModel; oViewModel = new JSONModel({ vizData1 : [ { "Date": convertToISODate("12/9/2012"), "Revenue": 1884613.732, "Cost": 318748.33 }, // ...其他所有数据项都用convertToISODate转换Date字段 { "Date": convertToISODate("1/10/2013"), "Revenue": 3004443.98688375, "Cost": 560890.43 } ] }); this.setModel(oViewModel, "viewModel"); var oVizFrame = this.getView().byId("idVizFrame1"); oVizFrame.setVizProperties({ plotArea: { window: { start: "firstDataPoint", end: "lastDataPoint" }, dataLabel: { formatString:ChartFormatter.DefaultPattern.SHORTFLOAT_MFD2, visible: false } }, valueAxis: { visible: true, label: { formatString:ChartFormatter.DefaultPattern.SHORTFLOAT }, title: { visible: false } }, valueAxis2: { // 新增第二个Y轴的配置,按需调整样式 visible: true, label: { formatString:ChartFormatter.DefaultPattern.SHORTFLOAT }, title: { visible: false } }, timeAxis: { title: { visible: false }, interval : { unit : 'day' } // 设置为day,让时间轴按天间隔显示 }, title: { visible: false }, interaction: { syncValueAxis: false } }); var oPopOver = this.getView().byId("idPopOver1"); oPopOver.connect(oVizFrame.getVizUid()); } }); });
3. 验证视图命名空间
确保你已经在视图根元素里正确引入了viz相关的命名空间:
<mvc:View xmlns:mvc="sap.ui.core.mvc" xmlns:viz="sap.viz.ui5.controls" xmlns:viz.data="sap.viz.ui5.data" xmlns:viz.feeds="sap.viz.ui5.controls.common.feeds" <!-- 其他命名空间 --> >
完成这些修改后,重新运行应用,应该就能正常渲染出你想要的双时间序列组合图表了。
内容的提问来源于stack exchange,提问作者Prashob Thekkyal
相关产品推荐
相关产品推荐

