Can you make these changes and see if that helps? Note that in all cases, I redid your map function to explicitly create a new property (grid, main, etc.), like this:
|> map(fn: (r) => ({ r with newColumn: r._value * 2 }))
and got rid of the final map
function in each query. Query C might still require some finessing.
Query A:
from(bucket: "xianenergyd")
|> range(start: v.timeRangeStart, stop:v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "xianenergy")
|> filter(fn: (r) => r._field == "MAIN1_W" or r._field == "MAIN2_W")
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
|> map(fn: (r) => ({ r with grid: r.MAIN1_W + r.MAIN2_W}))
|> aggregateWindow(every: 1h, fn: mean, createEmpty: false)
|> aggregateWindow(every: 1mo, offset: 7h, fn: sum, timeSrc:"_start")
|> yield(name: "GRID")
Query B
from(bucket: "xianenergyd")
|> range(start: v.timeRangeStart, stop:v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "xianenergy")
|> filter(fn: (r) => r._field == "SOLAR1_W" or r._field == "SOLAR2_W")
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
|> map(fn: (r) => ({ r with solar: r.SOLAR1_W + r.SOLAR2_W}))
|> aggregateWindow(every: 1h, fn: mean, createEmpty: false)
|> aggregateWindow(every: 1mo, offset: 7h, fn: sum, timeSrc:"_start")
|> yield(name: "SOLAR")
QueryC
from(bucket: "xianenergyd")
|> range(start: v.timeRangeStart, stop:v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "xianenergy")
|> filter(fn: (r) => r._field == "HOUSE1_W" or r._field == "HOUSE2_W" or r._field == "GARAGE1_W" or r._field == "GARAGE2_W" or r._field == "PI1_W" or r._field == "PI2_W" or r._field == "POOL1_W" or r._field == "POOL2_W" or r._field == "HVAC1_W" or r._field == "HVAC2_W" or r._field == "SHED1_W" or r._field == "SHED2_W" or r._field == "EV1_W" or r._field == "EV2_W")
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
|> map(fn: (r) => ({ r with main: r.HOUSE1_W + r.HOUSE2_W + r.GARAGE1_W + r.GARAGE2_W + r.PI1_W + r.PI2_W + r.POOL1_W + r.POOL2_W + r.HVAC1_W + r.HVAC2_W + r.SHED1_W + r.SHED2_W + r.EV1_W + r.EV2_W}))
|> aggregateWindow(every: 1h, fn: mean, createEmpty: false)
|> aggregateWindow(every: 1mo, offset: 7h, fn: sum, timeSrc:"_start")
|> map(fn: (r) => ({main: r._value, _time: r._time, _label: "Main"}))
|> yield(name: "MAIN")
QueryD
from(bucket: "xianenergyd")
|> range(start: v.timeRangeStart, stop:v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "xianenergy")
|> filter(fn: (r) => r._field == "AC21_W" or r._field == "AC22_W" or r._field == "AC11_W" or r._field == "AC12_W")
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
|> map(fn: (r) => ({ r with battery: r.AC21_W + r.AC22_W - r.AC11_W - r.AC12_W}))
|> aggregateWindow(every: 1h, fn: mean, createEmpty: false)
|> aggregateWindow(every: 1mo, offset: 7h, fn: sum, timeSrc:"_start")
|> yield(name: "BATTERY")