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

Power BI中无法通过数据集Measure设置Vega图表标题的问题

Power BI中Vega图表无法通过Measure动态设置标题

我正在将Vega规范移植到Power BI中,tooltip等组件已成功使用格式化值,但始终无法通过signal或其他方式,利用数据集中的ChartTitle度量值设置图表标题。所有错误均提示预期传入字符串却传入了对象,还出现过JavaScript经典的[object Object]显示。

除直接设置固定文本值(如"bro just work")外,我尝试过以下方法,均未生效:

  • 在signals部分定义读取ChartTitle的信号
  • 使用aggregate转换取最大值来定义信号

完整Vega规范

{
  "$schema": "https://vega.github.io/schema/vega/v5.json",
  "description": "Overlapping bar chart showing monthly actual vs budget values for 2024.",
  "width": 550,
  "height": {"signal": "chartHeight"},
  "padding": 5,
  "title": {
    "text":{
            "signal": "datum['ChartTitle']"
          }
  },
  "signals": [
    {
      "name": "maxY4",
      "update": "max(actualExtent[1], budgetExtent[1])*1.4"
    },
    {
      "name": "maxY1",
      "update": "max(actualExtent[1], budgetExtent[1])*1.3"
    },
    {
      "name": "maxY2",
      "update": "max(actualExtent[1], budgetExtent[1])*1.2"
    },
    {
      "name": "maxY3",
      "update": "max(actualExtent[1], budgetExtent[1])*1.1"
    },
    {
      "name": "bluebox",
      "update": "((max(actualExtent[1], budgetExtent[1])*1.36))"
    },
    {
      "name": "greybox",
      "update": "(max(actualExtent[1], budgetExtent[1])*1.26)"
    },
    {
      "name": "chartHeight",
      "update": 200
    }
  ],
  "data": [
    {
      "name": "dataset",
      "transform": [
        {
          "type": "formula",
          "expr": "datum['Date']",
          "as": "parsedDate"
        },
        {
          "type": "formula",
          "expr": "datum['variance']>=0 ?1:0",
          "as": "isgreen"
        },
        {
          "type": "extent",
          "field": "Actual",
          "signal": "actualExtent"
        },
        {
          "type": "extent",
          "field": "Budget",
          "signal": "budgetExtent"
        }
      ]
    },
    {
      "name": "headers",
      "values": [
        {"id": 1, "val": "Month"},
        {"id": 2, "val": "Actual"},
        {"id": 3, "val": "Budget"},
        {"id": 4, "val": "Variance %"}
      ]
    }
  ],
  "scales": [
    {
      "name": "x",
      "type": "time",
      "domain": {
        "data": "dataset",
        "field": "parsedDate"
      },
      "range": "width"
    },
    {
      "name": "y",
      "type": "linear",
      "domain": [
        0,
        {"signal": "maxY3"}
      ],
      "range": "height",
      "nice": true
    }
  ],
  "axes": [
    {
      "orient": "bottom",
      "scale": "x",
      "format": "",
      "title": "",
      "ticks": false,
      "labelAlign": "center",
      "tickOffset": 20
    },
    {
      "orient": "left",
      "scale": "y",
      "title": "",
      "domain": false,
      "labels": false,
      "grid": false,
      "ticks": false
    }
  ],
  "marks": [
    {
      "type": "rect",
      "from": {"data": "dataset"},
      "encode": {
        "enter": {
          "x": {
            "scale": "x",
            "field": "parsedDate",
            "offset": 0
          },
          "width": {"value": 30},
          "y": {
            "scale": "y",
            "field": "Budget"
          },
          "y2": {
            "scale": "y",
            "value": 0
          },
          "fill": {"value": "grey"},
          "tooltip": {
            "signal": "{'Date': timeFormat(datum.parsedDate, '%Y-%m'), 'Actual': datum['Actual__formatted'], 'Budget': datum['Budget__formatted'], 'Variance %': datum['variancepct__formatted']}"
          }
        }
      }
    },
    {
      "type": "rect",
      "from": {"data": "dataset"},
      "encode": {
        "enter": {
          "x": {
            "scale": "x",
            "field": "parsedDate",
            "offset": 15
          },
          "width": {"value": 30},
          "y": {
            "scale": "y",
            "field": "Actual"
          },
          "y2": {
            "scale": "y",
            "value": 0
          },
          "fill": {"value": "lightblue"},
          "tooltip": {
            "signal": "{'Date': timeFormat(datum.parsedDate, '%Y-%m'), 'Actual': datum['Actual__formatted'], 'Budget': datum['Budget__formatted'], 'Variance %': datum['variancepct__formatted']}"
          }
        }
      }
    },
    {
      "type": "text",
      "from": {"data": "dataset"},
      "encode": {
        "enter": {
          "x": {
            "scale": "x",
            "field": "parsedDate",
            "offset": 20
          },
          "y": {
            "scale": "y",
            "signal": "maxY1",
            "offset": 0
          },
          "text": {
            "signal": "datum['Actual__formatted']"
          },
          "fontSize": {"value": 12},
          "fill": {"value": "black"},
          "align": {"value": "center"}
        }
      }
    },
    {
      "type": "text",
      "from": {"data": "dataset"},
      "encode": {
        "enter": {
          "x": {
            "scale": "x",
            "field": "parsedDate",
            "offset": 20
          },
          "y": {
            "scale": "y",
            "signal": "maxY2",
            "offset": 0
          },
          "text": {
            "signal": "datum['Budget__formatted']"
          },
          "fontSize": {"value": 12},
          "fill": {"value": "black"},
          "align": {"value": "center"}
        }
      }
    },
    {
      "type": "text",
      "from": {"data": "dataset"},
      "encode": {
        "enter": {
          "x": {
            "scale": "x",
            "field": "parsedDate",
            "offset": 20
          },
          "y": {
            "scale": "y",
            "signal": "maxY3",
            "offset": 0
          },
          "text": {
            "signal": "datum['variancepct__formatted']"
          },
          "fontSize": {"value": 12},
          "fill": {
            "signal": "datum.isgreen==1?'green':'red'"
          },
          "align": {"value": "center"}
        }
      }
    },
    {
      "type": "text",
      "from": {"data": "dataset"},
      "encode": {
        "enter": {
          "x": {
            "scale": "x",
            "field": "parsedDate",
            "offset": 20
          },
          "y": {
            "scale": "y",
            "signal": "maxY4",
            "offset": 0
          },
          "text": {
            "signal": "[timeFormat(datum.parsedDate, '%b')]"
          },
          "fontSize": {"value": 12},
          "fontWeight": {
            "value": "bold"
          },
          "fill": {"value": "black"},
          "align": {"value": "center"}
        }
      }
    },
    {
      "type": "rect",
      "encode": {
        "enter": {
          "x": {"value": -70},
          "y": {
            "scale": "y",
            "signal": "bluebox"
          },
          "width": {"value": 12},
          "height": {"value": 12},
          "fill": {"value": "lightblue"}
        }
      }
    },
    {
      "type": "rect",
      "encode": {
        "enter": {
          "x": {"value": -70},
          "y": {
            "scale": "y",
            "signal": "greybox"
          },
          "width": {"value": 12},
          "height": {"value": 12},
          "fill": {"value": "grey"}
        }
      }
    },
    {
      "type": "text",
      "name": "aa",
      "from": {"data": "headers"},
      "encode": {
        "update": {
          "x": {"value": -10},
          "y": {
            "scale": "y",
            "signal": "datum.id == 1?maxY4:datum.id == 2?maxY1:datum.id == 3?maxY2:maxY3"
          },
          "text": {"field": "val"},
          "fontSize": {"value": 12},
          "fontWeight": {
            "value": "bold"
          },
          "fill": {"value": "black"},
          "align": {"value": "right"}
        }
      }
    }
  ]
}

Power BI中ChartTitle度量值定义截图

PBI中ChartTitle度量值定义截图


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:30:59