Power BI中Bacci's Gantt 2.0如何将“Today”居中显示在视口中?
Power BI中Bacci's Gantt 2.0如何将“Today”居中显示在视口中?
嘿,这个问题我刚好折腾过,给你一步步说怎么改Deneb里的Vega配置就行:
- 首先打开你的Deneb可视化编辑界面,切到「代码」视图,先找
signals部分。如果里面还没定义today信号,就添加上这段:
{ "name": "today", "update": "utcNow()" }
要是你的项目用的是本地时间而非UTC,把utcNow()改成now()就行,看你实际的时间设置来调整。
- 接下来找
view配置块(它和signals、scales是同级的,一般在代码顶部区域),修改或者添加initialize属性,设置x轴的平移量,让今天刚好居中:
"view": { "stroke": null, "initialize": { "translate": [{"signal": "(width / 2) - scale('x', today)"}, 0] } }
这里的逻辑很简单:scale('x', today)会把今天的日期转换成时间轴上的像素位置,用视口宽度的一半减去这个像素值,就能让今天稳稳落在视口中间。
- 保存配置后回到Power BI视图,你就能看到Gantt图默认以今天为中心显示了!
对了,要是你的Gantt 2.0配置里x轴的scale名字不是x(比如叫time之类的),记得把scale('x', today)里的x改成你实际的scale名称——去scales数组里找name字段就能看到。
如果你还希望今天居中的同时,能自动适配项目的时间跨度(比如项目时间很长时,不会只显示今天前后的一小段),可以试试进阶调整:
先在signals里添加项目时间范围的计算:
{ "name": "minDate", "update": "data('你的数据集名称')[0].开始日期字段名" }, { "name": "maxDate", "update": "data('你的数据集名称')[length(data('你的数据集名称'))-1].结束日期字段名" }, { "name": "rangeHalf", "update": "max((maxDate - minDate)/2, (width / 2) / scale('x').bandwidth)" }
然后把x轴domain改成[{"signal": "today - rangeHalf"}, {"signal": "today + rangeHalf"}],这样既能保证今天居中,又不会把项目的时间范围给裁掉。
备注:内容来源于stack exchange,提问作者John Golitsis
相关产品推荐
相关产品推荐

