Read each worksheet's place on the dashboard, keyed by worksheet name.
Dashboard.objects and every member of a DashboardObject are required
in Tableau's shipped declarations and none of them carries an @since tag,
so the contract sets no version floor — which is exactly why none of it is
trusted here. The host page loads whichever build of the Embedding library it
likes, and the real case this covers is an older one: a library that predates
the dashboard-object surface simply has no objects, and a partial one could
hand back an object with no position. Every access below is therefore
guarded, and any failure to read a worksheet's geometry leaves that worksheet
out of the map rather than inventing a place for it. The extractor requires
geometry for every surviving worksheet before it will build a grid, so a
gap here is a whole-figure fall back to the N×1 column — never a half-grid.
Only worksheet objects are considered. Legends, titles, filters, blanks and
extensions — MAIDR's own zone among them — are furniture: they hold no data,
contribute no subplot, and their positions would only distort the banding.
Matching is by object.worksheet.name, never by object.name — the latter
is the object's authoring name, which an author can change without
renaming the sheet inside it. Tableau documents dashboard.worksheets as
exactly the worksheets of the objects whose type is worksheet, so the names
line up by construction.
Read each worksheet's place on the dashboard, keyed by worksheet name.
Dashboard.objectsand every member of aDashboardObjectare required in Tableau's shipped declarations and none of them carries an@sincetag, so the contract sets no version floor — which is exactly why none of it is trusted here. The host page loads whichever build of the Embedding library it likes, and the real case this covers is an older one: a library that predates the dashboard-object surface simply has noobjects, and a partial one could hand back an object with noposition. Every access below is therefore guarded, and any failure to read a worksheet's geometry leaves that worksheet out of the map rather than inventing a place for it. The extractor requires geometry for every surviving worksheet before it will build a grid, so a gap here is a whole-figure fall back to the N×1 column — never a half-grid.Only worksheet objects are considered. Legends, titles, filters, blanks and extensions — MAIDR's own zone among them — are furniture: they hold no data, contribute no subplot, and their positions would only distort the banding.
Matching is by
object.worksheet.name, never byobject.name— the latter is the object's authoring name, which an author can change without renaming the sheet inside it. Tableau documentsdashboard.worksheetsas exactly the worksheets of the objects whose type isworksheet, so the names line up by construction.