已解决-(Deneb + Vega-Lite)VCONCAT 文本标记条件格式问题出现问题

问题描述 投票:0回答:1

[帖子编辑:由问题作者解决]

Deneb + Vega-Lite 的困难

VCONCAT 和文本标记条件格式问题

我正在努力做两件事一件事:

- 将“Total”标签添加到第二个 VCONCAT 规范。该规范旨在成为第一个规范所有月份的总计

  • 由于上述要点,variance文本标记存在问题,它具有相同的条件格式表达式,但似乎不起作用。

见下图: enter image description here

pbix 链接:highlighted_hover_dev

帖子编辑: 能够使用“datum”应用“Total”标签 - 但条件格式的问题仍然存在: enter image description here

这是下面的规格,抱歉它不是最干净的。预先感谢您的任何帮助,如果这种方法不理想,请建议更好的方法。

{
  "data": {
    "name": "dataset"
  },
  "params": [
    {
      "name": "offsets",
      "value": 20
    },
    {
      "name": "offsets_adj",
      "expr": "offsets * 1.8"
    }
  ],
  "transform": [
    {
      "calculate": "timeFormat(datum.dates, '%b')",
      "as": "monthonly"
    },
    {
      "joinaggregate": [
        {
          "op": "sum",
          "field": "sales",
          "as": "max_sales"
        },
        {
          "op": "sum",
          "field": "budget",
          "as": "max_budget"
        }
      ],
      "groupby": [
        "dates"
      ]
    },
    {
      "joinaggregate": [
        {
          "op": "sum",
          "field": "sales",
          "as": "grp_sales"
        },
        {
          "op": "sum",
          "field": "budget",
          "as": "grp_budget"
        }
      ],
      "groupby": [
        "monthonly"
      ]
    },
    {
      "calculate": "datum.max_sales * 1.05",
      "as": "MaxDomain"
    },
    {
      "calculate": "datum.max_sales * 1",
      "as": "text_position"
    },
    {
      "calculate": "datum.sales > datum.budget ? datum.sales : datum.budget",
      "as": "max_value"
    },
    {
      "calculate": "datum.grp_sales - datum.grp_budget",
      "as": "variance"
    },
    {
      "calculate": "datum.max_sales - datum.max_budget",
      "as": "variance_total"
    }
  ],
  "vconcat": [
    {
      "name": "monthly_vconcat",
      "height": 500,
      "width": 500,
      "layer": [
        {
          "params": [
            {
              "name": "hover",
              "select": {
                "type": "point",
                "on": "pointerover",
                "clear": "pointerout"
              }
            }
          ],
          "mark": {
            "type": "bar",
            "color": "#f5f1a3",
            "tooltip": true
          },
          "encoding": {
            "opacity": {
              "condition": {
                "param": "hover",
                "empty": false,
                "value": 0.5
              },
              "value": 0
            }
          }
        },
        {
          "mark": {
            "type": "bar",
            "fill": "#404040",
            "tooltip": true,
            "height": {
              "band": 0.8
            },
            "yOffset": 2,
            "opacity": 0.1
          },
          "encoding": {
            "x": {
              "field": "sales",
              "axis": {
                "title": null,
                "labels": false,
                "ticks": false,
                "domain": false,
                "grid": false
              }
            }
          }
        },
        {
          "mark": {
            "type": "bar",
            "fill": "lightgrey",
            "height": {
              "band": 0.8
            },
            "yOffset": -2,
            "opacity": 0.4
          },
          "encoding": {
            "x": {
              "field": "budget",
              "type": "quantitative"
            },
            "opacity": {
              "condition": {
                "test": {
                  "field": "__selected__",
                  "equal": "off"
                },
                "value": 0.1
              },
              "value": 0.6
            }
          }
        },
        {
          "name": "highlighted_bar",
          "mark": {
            "type": "bar",
            "fill": "#404040",
            "tooltip": true,
            "height": {
              "band": 0.8
            },
            "yOffset": 2
          },
          "encoding": {
            "x": {
              "field": "sales__highlight"
            },
            "opacity": {
              "condition": {
                "test": {
                  "field": "__selected__",
                  "equal": "off"
                },
                "value": 0
              },
              "value": 1
            }
          }
        },
        {
          "mark": {
            "type": "text",
            "fontWeight": "bolder",
            "dx": 20
          },
          "encoding": {
            "text": {
              "field": "sales",
              "format": ",.2s"
            },
            "x": {
              "field": "sales"
            }
          }
        },
        {
          "mark": {
            "type": "text",
            "fontWeight": "bolder",
            "color": {
              "expr": "datum.variance >= 0 ? 'limegreen' : 'tomato'"
            },
            "align": "left",
            "dx": {
              "expr": "offsets_adj"
            }
          },
          "encoding": {
            "text": {
              "field": "variance",
              "format": "(+#,0);(-#,0)",
              "formatType": "pbiFormatAutoUnit"
            },
            "x": {
              "field": "text_position"
            }
          }
        }
      ],
      "encoding": {
        "y": {
          "field": "dates",
          "type": "nominal",
          "timeUnit": "month"
        },
        "x": {
          "type": "quantitative",
          "axis": {
            "title": "sales"
          }
        }
      }
    },
    {
      "width": 500,
      "name": "total_vconcat",
      "layer": [
        {
          "mark": {
            "type": "bar",
            "tooltip": true,
            "height": {
              "band": 1.5
            },
            "yOffset": -2,
            "opacity": 0.6,
            "fill": "lightgrey"
          },
          "encoding": {
            "x": {
              "field": "max_budget",
              "type": "quantitative",
              "title": "Total",
              "axis": {
                "title": "",
                "labels": false
              }
            }
          }
        },
        {
          "mark": {
            "type": "bar",
            "fill": "#404040",
            "tooltip": true,
            "height": {
              "band": 1.5
            },
            "yOffset": 8
          }
        },
        {
          "mark": {
            "type": "text",
            "dx": 40,
            "fontWeight": "bold",
            "align": "right"
          },
          "encoding": {
            "text": {
              "field": "max_sales",
              "aggregate": "sum",
              "format": ",.3~s"
            }
          }
        },
        {
          "mark": {
            "type": "text",
            "color": {
              "expr": "datum.variance >= 0 ? 'limegreen' : 'tomato'"
            },
            "dx": 50,
            "fontWeight": "bold",
            "align": "left"
          },
          "encoding": {
            "text": {
              "field": "variance",
              "aggregate": "sum",
              "format": "(+#,0);(-#,0)",
              "formatType": "pbiFormatAutoUnit"
            }
          }
        }
      ],
      "encoding": {
        "y": {
          "title": "Total",
          "axis": {
            "domain": false
          }
        },
        "x": {
          "field": "max_sales",
          "type": "quantitative",
          "aggregate": "sum",
          "axis": {
            "title": "",
            "labels": false,
            "ticks": false,
            "domain": false,
            "grid": false,
            "labelPadding": 20
          }
        }
      }
    }
  ]
}

powerbi visualization vega-lite deneb
1个回答
0
投票

已解决:罪魁祸首是文本中的“聚合”:“总和”:y 编码。我还添加了一个更好的 joinaggregate,没有总计的日期分组。这似乎按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.