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

如何在Deneb中实现Power BI原生矩阵父组值仅首行显示

问题:Deneb实现Power BI原生矩阵父列首行仅显示效果

我正在尝试使用Deneb创建自定义甘特图可视化,希望添加父列并复刻Power BI原生矩阵的表格格式。已通过calculate函数创建父分组列,但需要实现父分组仅在每组首行显示对应值的效果,使其匹配Power BI原生矩阵样式。目前已有相关配置代码与数据集,寻求技术支持。

当前效果与期望效果

  • 当前Deneb效果:父列的分组值(如Fruit、Vegetables)在每个子项行重复显示
  • 期望效果:父列分组值仅在每组第一行显示,后续子项行该位置为空,与Power BI原生矩阵样式一致

现有配置代码

{
  "data": {"name": "dataset"},
  "spacing": 12,
  "transform": [
    {
      "calculate": "datum['Sort Order'] === 1 || datum['Sort Order'] === 2 || datum['Sort Order'] === 3 ? 'Fruit' : null",
      "as": "Parent1"
    },
    {
      "calculate": "datum['Sort Order'] === 4 || datum['Sort Order'] === 5 || datum['Sort Order'] === 6 ? 'Vegetables' : null",
      "as": "Parent2"
    },
    {
      "calculate": "datum.Parent1 || datum.Parent2",
      "as": "Parent"
    },
    {
      "window": [
        {"op": "first_value", "field": "Parent", "as": "Parent Test"}
      ],
      "frame": [null, null],
      "groupby": ["Parent"]
    },
    {
      "filter": "datum['Parent Test'] !== null"
    }
  ],
  "hconcat": [
    {
      "mark": {"type": "text"},
      "encoding": {
        "y": {
          "field": "Level 2",
          "type": "ordinal",
          "axis": null,
          "sort": {
            "field": "Sort Order",
            "order": "ascending"
          }
        },
        "text": {
          "field": "Parent Test"
        }
      }
    },
    {
      "mark": {"type": "text"},
      "encoding": {
        "y": {
          "field": "Level 2",
          "type": "ordinal",
          "axis": null,
          "sort": {
            "field": "Sort Order",
            "order": "ascending"
          }
        },
        "text": {
          "field": "Level 2",
          "type": "nominal"
        }
      }
    }
  ]
}

数据集

Level 2Sort OrderLevel 1
Strawberry1Fruit
Apple2Fruit
Banana3Fruit
Cucumber4Vegetable
Zuchini5Vegetable
Pepper6Vegetable

解决方案

要实现父列仅首行显示,需要在transform中添加组内排名计算,判断当前行是否为组内第一行,仅在第一行显示父分组值,其余行留空。

修改后的完整配置代码

{
  "data": {"name": "dataset"},
  "spacing": 12,
  "transform": [
    // 直接复用数据集里的Level 1作为父列,无需手动判断Sort Order
    {
      "calculate": "datum['Level 1']",
      "as": "Parent"
    },
    // 按Parent分组,计算组内按Sort Order排序的排名
    {
      "window": [
        {"op": "rank", "as": "GroupRank"},
        {"op": "first_value", "field": "Parent", "as": "ParentDisplay"}
      ],
      "groupby": ["Parent"],
      "sort": [{"field": "Sort Order", "order": "ascending"}]
    },
    // 仅在组内第一行显示Parent值,其余行设为空字符串
    {
      "calculate": "datum.GroupRank === 1 ? datum.ParentDisplay : ''",
      "as": "ParentFinal"
    }
  ],
  "hconcat": [
    {
      "mark": {"type": "text"},
      "encoding": {
        "y": {
          "field": "Level 2",
          "type": "ordinal",
          "axis": null,
          "sort": {
            "field": "Sort Order",
            "order": "ascending"
          }
        },
        "text": {
          "field": "ParentFinal"
        }
      }
    },
    {
      "mark": {"type": "text"},
      "encoding": {
        "y": {
          "field": "Level 2",
          "type": "ordinal",
          "axis": null,
          "sort": {
            "field": "Sort Order",
            "order": "ascending"
          }
        },
        "text": {
          "field": "Level 2",
          "type": "nominal"
        }
      }
    }
  ]
}

关键修改说明

  1. 简化父列生成:直接使用数据集已有的Level 1字段作为父列,避免手动判断Sort Order,适配性更强。
  2. 组内排名计算:通过window的rank操作,按Parent分组、Sort Order升序计算每行在组内的排名。
  3. 控制文本显示:用calculate判断GroupRank === 1时显示父值,否则显示空字符串,实现仅首行显示的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:31:15