You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI Deneb Vega定时器问题:currentTime无法实时更新求助

Deneb Vega脚本currentTime无法实时更新的解决方法

问题根源

  1. 数据未定时刷新:你在data的transform里用了now(),但这个函数只会在数据集首次加载时执行一次,后续定时器更新timer信号不会触发数据重新计算,导致adjustedTime和currentTime一直停留在初始值。
  2. 标记属性未绑定动态更新:所有marks的encode都用了enter类型,这只会在图形元素创建时设置属性,后续数据变化不会同步更新元素的位置和内容。

修复步骤

  1. 关联定时器与数据刷新:把data转换逻辑里的now()替换成timer信号,让时间计算跟随定时器更新;同时给数据集添加on触发器,监听timer信号变化来触发数据重计算。
  2. 切换encode类型为update:把marks里动态变化的属性从enter块移到update块,确保数据变化时图形元素能实时同步更新。
  3. 优化时间计算逻辑:调整时区偏移的计算依赖,确保adjustedTime能正确基于定时器信号动态更新。

修复后的完整脚本

{
  "$schema": "https://vega.github.io/schema/vega/v5.json",
  "width": 360,
  "height": 50,
  "signals": [
    {
      "name": "timer",
      "value": now(),
      "on": [
        {
          "events": {"type": "timer", "throttle": 1000},
          "update": "now()"
        }
      ]
    }
  ],
  "data": [
    {
      "name": "dataset",
      "on": [{"trigger": "timer", "update": "data('dataset')"}],
      "transform": [
        {
          "type": "formula",
          "expr": "utcOffset('seconds', timer, datum.DST_ClockDiffBtwLocationAndLocalOffset)",
          "as": "adjustedTime"
        },
        {
          "type": "formula",
          "expr": "hours(datum.adjustedTime) + minutes(datum.adjustedTime) / 60",
          "as": "currentTime"
        },
        {
          "type": "formula",
          "expr": "hours(datetime(datum.SiteSupportStartFrom)) + minutes(datetime(datum.SiteSupportStartFrom)) / 60",
          "as": "startSupportTime"
        },
        {
          "type": "formula",
          "expr": "hours(datetime(datum.SiteSupportDayTo)) + minutes(datetime(datum.SiteSupportDayTo)) / 60",
          "as": "endSupportTime"
        }
      ]
    }
  ],
  "scales": [
    {
      "name": "xscale",
      "type": "linear",
      "domain": [0, 24],
      "range": [0, 350]
    }
  ],
  "marks": [
    {
      "type": "rect",
      "from": {"data": "dataset"},
      "encode": {
        "enter": {
          "y": {"value": 5},
          "y2": {"value": 20},
          "fill": {"value": "lightgreen"}
        },
        "update": {
          "x": {"scale": "xscale", "field": "startSupportTime"},
          "x2": {"scale": "xscale", "field": "endSupportTime"}
        }
      }
    },
    {
      "type": "rule",
      "from": {"data": "dataset"},
      "encode": {
        "enter": {
          "y": {"value": 0},
          "y2": {"value": 27},
          "stroke": {"value": "red"},
          "strokeWidth": {"value": 2}
        },
        "update": {
          "x": {"scale": "xscale", "field": "currentTime"}
        }
      }
    },
    {
      "type": "text",
      "from": {"data": "dataset"},
      "encode": {
        "enter": {
          "y": {"value": 8},
          "fill": {"value": "black"},
          "align": {"value": "center"},
          "dy": {"value": -10}
        },
        "update": {
          "x": {"scale": "xscale", "field": "currentTime"},
          "text": {"signal": "timeFormat(datum.adjustedTime, '%H:%M')"}
        }
      }
    }
  ],
  "axes": [
    {
      "orient": "bottom",
      "scale": "xscale",
      "tickCount": 24
    }
  ]
}

关键修改说明

  • 将时间计算依赖从now()改为timer信号,确保时间随定时器每秒更新
  • 给dataset添加触发器,监听timer变化触发数据重计算
  • 把动态变化的属性(如红色标线位置、时间文本)移到update块,实现实时同步

内容的提问来源于stack exchange,提问作者dgnoyon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 12:58:10