vega / vegafusion

Serverside scaling for Vega and Altair visualizations
https://vegafusion.io
BSD 3-Clause "New" or "Revised" License
303 stars 15 forks source link

Fix parent dataset resolution in facet lift planner stage #439

Closed jonmmease closed 6 months ago

jonmmease commented 6 months ago

Consider a facet group mark like this:

    {
      "name": "cell",
      "type": "group",
      "style": "cell",
      "from": {
        "facet": {
          "name": "facet",
          "data": "data_0",
          "groupby": [
            "MPAA Rating"
          ]
        }
      },
      "sort": {
        "field": [
          "datum[\"MPAA Rating\"]"
        ],
        "order": [
          "ascending"
        ]
      },
      "data": [
        {
          "source": "facet",
          "name": "data_0",
...

The facet lift optimization introduces a new dataset (named data_0_facet_facet0) and intends to insert this new dataset alongside the facet mark's input dataset (data_0 in this case). Notice that in this case, the facet group mark has a nested dataset also named data_0. The error we were making is that we would mistakenly resolve data_0 to be the nested dataset and place the new data_0_facet_facet0 nested inside the facet group mark, where it is not visible from the facet definition.

The fix is to only resolve the source dataset in the scope above the facet definition.

A previously failing test is added