From 36533ffcd325b5b39c3f47b8082c1d5843e6b6b9 Mon Sep 17 00:00:00 2001 From: Erika Doyle Navara Date: Mon, 5 Jan 2026 14:06:45 -0800 Subject: [PATCH 1/4] Reinstate secureHttpUrl for mcpServerUrl --- teams/vDevPreview/MicrosoftTeams.schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/teams/vDevPreview/MicrosoftTeams.schema.json b/teams/vDevPreview/MicrosoftTeams.schema.json index 5c1eceb..b09813e 100644 --- a/teams/vDevPreview/MicrosoftTeams.schema.json +++ b/teams/vDevPreview/MicrosoftTeams.schema.json @@ -1661,7 +1661,7 @@ "additionalProperties": false, "properties": { "mcpServerUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/secureHttpUrl", "description": "The URL of the remote MCP Server." }, "mcpToolDescription": { From 19be360c01ef9cd00065075cc225a51e52a9a3f3 Mon Sep 17 00:00:00 2001 From: "Michael Faber (he/him)" Date: Tue, 20 Jan 2026 11:59:52 -0600 Subject: [PATCH 2/4] [report definition] 26.01 version bumps --- fabric/item/report/README.md | 8 + .../definition/bookmark/2.0.0/schema.json | 778 ++++++++++++++++++ .../report/definition/bookmark/CHANGELOG.md | 5 + .../definition/report/3.1.0/schema.json | 587 +++++++++++++ .../report/definition/report/CHANGELOG.md | 6 + .../visualContainer/2.5.0/schema.json | 309 +++++++ .../definition/visualContainer/CHANGELOG.md | 6 + 7 files changed, 1699 insertions(+) create mode 100644 fabric/item/report/definition/bookmark/2.0.0/schema.json create mode 100644 fabric/item/report/definition/report/3.1.0/schema.json create mode 100644 fabric/item/report/definition/visualContainer/2.5.0/schema.json diff --git a/fabric/item/report/README.md b/fabric/item/report/README.md index 658f79e..26d2a5a 100644 --- a/fabric/item/report/README.md +++ b/fabric/item/report/README.md @@ -1,5 +1,13 @@ # Releases +## January 2026 + +Modern Tooltips GA, bug fixes + +- [bookmark 2.0.0](./definition/bookmark/CHANGELOG.md#2.0.0) +- [report 3.1.0](./definition/report/CHANGELOG.md#3.1.0) +- [visualContainer 2.5.0](./definition/visualContainer/CHANGELOG.md#2.5.0) + ## November 2025 Documenting visual objects changes for new visuals and visual updates. diff --git a/fabric/item/report/definition/bookmark/2.0.0/schema.json b/fabric/item/report/definition/bookmark/2.0.0/schema.json new file mode 100644 index 0000000..9b15f32 --- /dev/null +++ b/fabric/item/report/definition/bookmark/2.0.0/schema.json @@ -0,0 +1,778 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/bookmark/2.0.0/schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Bookmark", + "description": "Defines a bookmark that captures the state of a report.", + "type": "object", + "properties": { + "$schema": { + "description": "Defines the schema to use for an item.", + "type": "string", + "const": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/bookmark/2.0.0/schema.json" + }, + "displayName": { + "description": "Display name for the bookmark.", + "type": "string" + }, + "name": { + "description": "Unique identifier for the bookmark - unique across the report.", + "type": "string" + }, + "options": { + "description": "Additional options for the bookmark", + "$ref": "#/definitions/BookmarkOptions" + }, + "explorationState": { + "$ref": "#/definitions/ExplorationState", + "description": "Bookmark definition to use when applying this bookmark." + } + }, + "additionalProperties": false, + "required": [ + "$schema", + "displayName", + "explorationState", + "name" + ], + "definitions": { + "BookmarkOptions": { + "type": "object", + "properties": { + "applyOnlyToTargetVisuals": { + "description": "Only applies changes to selected visuals when the bookmark was captured.", + "type": "boolean" + }, + "targetVisualNames": { + "description": "Specific visuals to which this bookmark applies.", + "type": "array", + "items": { + "type": "string" + } + }, + "suppressActiveSection": { + "description": "Don't apply changes to active section.", + "type": "boolean" + }, + "suppressData": { + "description": "Don't apply data changes.", + "type": "boolean" + }, + "suppressDisplay": { + "description": "Don't apply display property changes.", + "type": "boolean" + } + }, + "additionalProperties": false + }, + "ExplorationState": { + "type": "object", + "properties": { + "version": { + "description": "Version of bookmark.", + "type": "string" + }, + "activeSection": { + "description": "Name of the page that was active when this bookmark was captured.", + "type": "string" + }, + "filters": { + "description": "State of filters for the report when the bookmark was captured.", + "$ref": "#/definitions/FiltersState" + }, + "sections": { + "description": "State of all pages when the bookmark was captured.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/SectionState" + } + }, + "objects": { + "description": "Changes to formatting to apply in this bookmark.", + "$ref": "#/definitions/DataViewObjectDefinitionUpdates" + }, + "dataSourceVariables": { + "description": "A string containing the state of any variables from the underlying direct query data source that should be overridden when rendering this content.\nData source variables do not supply values for M parameters in the semantic model. Instead, data source variables are applied when accessing the underlying direct query source.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "activeSection", + "sections", + "version" + ] + }, + "FiltersState": { + "type": "object", + "properties": { + "byName": { + "description": "Filter containers that will be identified by name.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/FilterContainerState" + } + }, + "byExpr": { + "description": "Filter containers that will be identified by expression.", + "type": "array", + "items": { + "$ref": "#/definitions/FilterContainerState" + } + }, + "byType": { + "description": "Filter containers that will be identified by type.", + "type": "array", + "items": { + "$ref": "#/definitions/FilterContainerState" + } + }, + "byTransientState": { + "description": "Filter containers that are transient", + "type": "array", + "items": { + "$ref": "#/definitions/FilterContainerState" + } + } + }, + "additionalProperties": false + }, + "FilterContainerState": { + "description": "Meaning of properties is same as Filters defined outside the bookmark.", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "filter": { + "description": "Defines a filter element as a partial query structure", + "$ref": "../../semanticQuery/1.3.0/schema.json#/definitions/FilterDefinition" + }, + "expression": { + "description": "Holds a single expression and associated metadata.\nName, NativeReferenceName, and Annotations may be specified for any expression.\nEach other property represents a specific type of expression and exactly one of these other properties must be specified.", + "$ref": "../../semanticQuery/1.3.0/schema.json#/definitions/QueryExpressionContainer" + }, + "restatement": { + "type": "string" + }, + "howCreated": { + "type": "number", + "anyOf": [ + { + "const": 0 + }, + { + "const": 1 + }, + { + "const": 2 + }, + { + "const": 3 + }, + { + "const": 4 + }, + { + "const": 5 + }, + { + "const": 6 + }, + { + "const": 7 + } + ] + }, + "precedence": { + "description": "Precedence of the filter. The higher the number, the higher the precedence of the filter.\n\nEach filter is evaluated in the presence of other filters which are strictly higher precedence,\nand in the absense of all filters which are equal or lower precedence.\n\nNote that not all precedence levels are encoded here yet. For example, cross filters have higher\nprecedence than data filters, and data filters have higher precedence than drill filters. Neither\ncross filters nor data filters have an entry in this enumeration yet, but instead have their\nprecedence enforced by explicit code in the FilterGenerator. It is a future work item to encode\nall precendence levels here.\n\nNote also that when we add new precedence levels in this enumeration, we may have to change existing\nprecedence levels. If that happens, we will need to add Upgrader code to translate the precedence\nlevels from one version to another.", + "const": 0, + "type": "number" + }, + "isTransient": { + "type": "boolean" + }, + "cachedDisplayNames": { + "type": "array", + "items": { + "$ref": "#/definitions/FilterLabelIdPair" + } + }, + "filterExpressionMetadata": { + "anyOf": [ + { + "$ref": "#/definitions/FilterExpressionMetadata" + }, + { + "$ref": "#/definitions/DecomposedFilterExpressionMetadata" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + }, + "FilterLabelIdPair": { + "type": "object", + "properties": { + "id": { + "$ref": "../../formattingObjectDefinitions/1.4.0/schema.json#/definitions/DataRepetitionSelector" + }, + "displayName": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "displayName", + "id" + ] + }, + "FilterExpressionMetadata": { + "type": "object", + "properties": { + "expressions": { + "description": "Fields on which the filter is applied (which have group-on keys).", + "type": "array", + "items": { + "$ref": "../../semanticQuery/1.3.0/schema.json#/definitions/QueryExpressionContainer" + } + }, + "cachedValueItems": { + "description": "Defines the filter on the group-on key that is applied for the field.", + "type": "array", + "items": { + "$ref": "#/definitions/IdentityValueMap" + } + }, + "jsonFilter": { + "description": "Json filter metadata.", + "type": "object", + "properties": { + "filterType": { + "description": "Type of json filter." + } + }, + "additionalProperties": false, + "required": [ + "filterType" + ] + } + }, + "additionalProperties": false, + "required": [ + "expressions" + ] + }, + "IdentityValueMap": { + "type": "object", + "properties": { + "identities": { + "type": "array", + "items": { + "$ref": "../../formattingObjectDefinitions/1.4.0/schema.json#/definitions/DataRepetitionSelector" + } + }, + "valueMap": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[0-9]+$": { + "type": "string" + } + } + } + }, + "additionalProperties": false, + "required": [ + "identities", + "valueMap" + ] + }, + "DecomposedFilterExpressionMetadata": { + "type": "object", + "properties": { + "decomposedIdentities": { + "description": "Defines the group-on key fields and the filters applied on them.", + "$ref": "#/definitions/DecomposedIdentities" + }, + "expressions": { + "description": "Original fields (which have group-on keys) used in the filter.", + "type": "array", + "items": {} + }, + "valueMap": { + "description": "Matches the index in decomposedIdentities with the queryRef for an expression.", + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[0-9]+$": { + "type": "string" + } + } + } + }, + "jsonFilter": { + "description": "Json filter metadata.", + "type": "object", + "properties": { + "filterType": { + "description": "Type of json filter." + } + }, + "additionalProperties": false, + "required": [ + "filterType" + ] + } + }, + "additionalProperties": false, + "required": [ + "expressions" + ] + }, + "DecomposedIdentities": { + "type": "object", + "properties": { + "values": { + "description": "`values` have 3 levels\noutermost level:\n - for SelectorsByColumn[], it's the number of selectors in this array\n - for FilterExpressionMetadata, it's the number of cachedValueItems.\nsecond level:\n - for SelectorsByColumn, it is the number of scopedIdentities in the particular SelectorsByColumn\n - for FilterExpressionMetadata, it is the number of identities in a cachedValueItem\ninnermost level:\n - the key is the index of the column structure of scopedIdentity in `columns` list;\n - the the value is the expressions list in one identity", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[0-9]+$": { + "type": "array", + "items": { + "$ref": "../../semanticQuery/1.3.0/schema.json#/definitions/QueryExpressionContainer" + } + } + } + } + } + }, + "columns": { + "description": "Defines the set of group-on key columns.", + "type": "array", + "items": { + "$ref": "#/definitions/DecomposedTree" + } + } + }, + "additionalProperties": false, + "required": [ + "columns", + "values" + ] + }, + "DecomposedTree": { + "type": "object", + "properties": { + "left": { + "$ref": "#/definitions/DecomposedTree" + }, + "right": { + "$ref": "#/definitions/DecomposedTree" + }, + "value": { + "$ref": "../../semanticQuery/1.3.0/schema.json#/definitions/QueryExpressionContainer" + } + }, + "additionalProperties": false + }, + "SectionState": { + "type": "object", + "properties": { + "filters": { + "description": "State of filters for this page when the bookmark was captured.", + "$ref": "#/definitions/FiltersState" + }, + "visualContainers": { + "description": "Flat list of visual-container-specific state.\nDoes not include state of groups.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/VisualContainerState" + } + }, + "visualContainerGroups": { + "description": "Flat list of group-specific state.\nDoes not include state of visual containers.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/VisualContainerGroupState" + } + } + }, + "additionalProperties": false, + "required": [ + "visualContainers" + ] + }, + "VisualContainerState": { + "type": "object", + "properties": { + "filters": { + "description": "State of filters for this page when the bookmark was captured.", + "$ref": "#/definitions/FiltersState" + }, + "singleVisual": { + "description": "State of the configuration of the visual.", + "$ref": "#/definitions/SingleVisualConfigState" + }, + "highlight": { + "description": "Cross-highlights captured in the bookmark.", + "$ref": "#/definitions/HighlightState" + } + }, + "additionalProperties": false + }, + "SingleVisualConfigState": { + "type": "object", + "properties": { + "visualType": { + "description": "Name of visual", + "type": "string" + }, + "autoSelectVisualType": { + "description": "Can the visual type change as data changes in the bookmark.", + "type": "boolean" + }, + "targetType": { + "description": "Change visual to this type - if different from the original state. Used by personalize this visual on the web.", + "type": "string" + }, + "targetAutoSelectVisualType": { + "description": "Change auto changing visual type.", + "type": "boolean" + }, + "objects": { + "description": "Changes to formatting to apply in this bookmark.", + "$ref": "#/definitions/DataViewObjectDefinitionUpdates" + }, + "orderBy": { + "description": "Updated ordering of data.", + "type": "array", + "items": { + "$ref": "../../semanticQuery/1.3.0/schema.json#/definitions/QuerySortClause" + } + }, + "activeProjections": { + "description": "Updated projections that are used by the visual.", + "$ref": "#/definitions/ProjectionState" + }, + "projections": { + "description": "Projections are stored only when presentation changes are applied (such as during personalize visuals)\nor if the projections are resolved projections of a field parameter. When projections are resolved\nprojections of a field parameter but presentation changes are not applied, nulls will be present in the\narray to indicate where non-parameter projections of the visual are.", + "$ref": "#/definitions/ProjectionState" + }, + "parameters": { + "description": "Field parameters that were used as part of the query. We always capture parameter state when parameters\nare present regardless of the bookmark type.", + "$ref": "#/definitions/ParameterStateByRole" + }, + "display": { + "description": "Optional changes to how the visual is displayed.", + "$ref": "#/definitions/VisualContainerDisplayState" + }, + "cachedFilterDisplayItems": { + "type": "array", + "items": { + "$ref": "#/definitions/FilterLabelIdPair" + } + }, + "expansionStates": { + "description": "Changes to expansion state.", + "type": "array", + "items": {} + }, + "filterExpressionMetadata": { + "anyOf": [ + { + "$ref": "#/definitions/FilterExpressionMetadata" + }, + { + "$ref": "#/definitions/DecomposedFilterExpressionMetadata" + } + ] + }, + "isDrillDisabled": { + "description": "Indicates whether the drill feature is disabled", + "type": "boolean" + } + }, + "additionalProperties": false + }, + "DataViewObjectDefinitionUpdates": { + "type": "object", + "properties": { + "merge": { + "description": "ObjectDefinitions to be merged with the target.", + "$ref": "../../formattingObjectDefinitions/1.4.0/schema.json#/definitions/DataViewObjectDefinitions" + }, + "remove": { + "description": "ObjectDefinitions to be deleted from the existing instances.", + "type": "array", + "items": { + "$ref": "#/definitions/DataViewObjectPropertyIdWithSelector" + } + } + }, + "additionalProperties": false + }, + "DataViewObjectPropertyIdWithSelector": { + "type": "object", + "properties": { + "object": { + "description": "Name of visual object.", + "type": "string" + }, + "property": { + "description": "Name of property to change for the visual object.", + "type": "string" + }, + "selector": { + "$ref": "../../formattingObjectDefinitions/1.4.0/schema.json#/definitions/Selector", + "description": "Scope at which to apply this change." + } + }, + "additionalProperties": false, + "required": [ + "object", + "property" + ] + }, + "ProjectionState": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "../../semanticQuery/1.3.0/schema.json#/definitions/QueryExpressionContainer" + } + } + }, + "ParameterStateByRole": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/definitions/ParameterState" + } + } + }, + "ParameterState": { + "type": "object", + "properties": { + "expr": { + "$ref": "../../semanticQuery/1.3.0/schema.json#/definitions/QueryExpressionContainer", + "description": "Parameter expression." + }, + "index": { + "description": "Index from which parameter starts in the visual projection.", + "type": "number" + }, + "length": { + "description": "Number of fields created by the parameter.", + "type": "number" + }, + "sortDirection": { + "description": "If the sort direction is set, the visual is sorted by this field parameter.\nThe implication of a visual being sorted by a field parameter is as follows during parameter resolution:\n- If none of the newly projected fields exist in the sort list, apply the parameter sort direction to the first projected field and add it to the end of the sort list.\n- If all the projected fields in the sort list have the opposite sort direction as the parameter's sort direction, flip the parameter's sort direction.", + "type": "number", + "anyOf": [ + { + "const": 1, + "description": "Ascending" + }, + { + "const": 2, + "description": "Descending" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "expr", + "index", + "length" + ] + }, + "VisualContainerDisplayState": { + "type": "object", + "properties": { + "mode": { + "$ref": "#/definitions/VisualContainerDisplayMode", + "description": "How is this visual shown in the bookmark." + }, + "maximizedOptions": { + "description": "Options if maximized.", + "type": "object", + "properties": { + "dataTable": { + "description": "Type of table to show.", + "enum": [ + "accessible", + "normal" + ], + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": [ + "mode" + ] + }, + "VisualContainerDisplayMode": { + "type": "string", + "anyOf": [ + { + "const": "maximize", + "description": "Visual is shown full screen." + }, + { + "const": "spotlight", + "description": "Visual is spotlighted and other visuals on the page are dimmed." + }, + { + "const": "elevation", + "description": "Visual is shown with an elevation." + }, + { + "const": "hidden", + "description": "Visual is hidden." + } + ] + }, + "HighlightState": { + "type": "object", + "properties": { + "selection": { + "description": "Data points selected for the highlights.", + "anyOf": [ + { + "$ref": "#/definitions/DecomposedSelectors" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/SelectorsByColumn" + } + } + ] + }, + "filterExpressionMetadata": { + "description": "Additional metadata for the filter generated from highlights.", + "anyOf": [ + { + "$ref": "#/definitions/FilterExpressionMetadata" + }, + { + "$ref": "#/definitions/DecomposedFilterExpressionMetadata" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "selection" + ] + }, + "DecomposedSelectors": { + "type": "object", + "properties": { + "decomposedIdentities": { + "$ref": "#/definitions/DecomposedIdentities" + }, + "queryNameMap": { + "description": "The `queryNameIndex` key is the index in the queryNames array;\nthe `number` value is the columnIndex properties in DecomposedScopeIdentity.\nThis map tracks the different queryName and their column shapes present in each dataMap", + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[0-9]+$": { + "type": "array", + "items": { + "type": "number" + } + } + } + } + }, + "queryNames": { + "type": "array", + "items": { + "type": "string" + } + }, + "metadata": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "id": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "SelectorsByColumn": { + "type": "object", + "properties": { + "dataMap": { + "$ref": "#/definitions/SelectorsForColumn" + }, + "metadata": { + "type": "array", + "items": { + "type": "string" + } + }, + "id": { + "type": "string" + } + }, + "additionalProperties": false + }, + "SelectorsForColumn": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "../../formattingObjectDefinitions/1.4.0/schema.json#/definitions/DataRepetitionSelector" + } + } + }, + "VisualContainerGroupState": { + "type": "object", + "properties": { + "isHidden": { + "description": "Is the group hidden in the bookmark.", + "type": "boolean" + }, + "children": { + "description": "State of child groups.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/VisualContainerGroupState" + } + } + }, + "additionalProperties": false + } + } +} \ No newline at end of file diff --git a/fabric/item/report/definition/bookmark/CHANGELOG.md b/fabric/item/report/definition/bookmark/CHANGELOG.md index 72eb5e1..4fbc92f 100644 --- a/fabric/item/report/definition/bookmark/CHANGELOG.md +++ b/fabric/item/report/definition/bookmark/CHANGELOG.md @@ -1,5 +1,10 @@ # Bookmark Versions +### 2.0.0 +Released in: January 2026
+Notes: +- Updates the `selector` property in `DataViewObjectPropertyIdWithSelector` from required to optional to address a bug + ### 1.4.0 Released in: June 2025
diff --git a/fabric/item/report/definition/report/3.1.0/schema.json b/fabric/item/report/definition/report/3.1.0/schema.json new file mode 100644 index 0000000..289138f --- /dev/null +++ b/fabric/item/report/definition/report/3.1.0/schema.json @@ -0,0 +1,587 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/report/3.1.0/schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Report", + "description": "Defines a report and its pages, visuals, settings, and additional information.", + "type": "object", + "properties": { + "$schema": { + "description": "Defines the schema to use for an item.", + "type": "string", + "const": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/report/3.1.0/schema.json" + }, + "themeCollection": { + "$ref": "#/definitions/ThemeCollection", + "description": "Define a theme (built-in and/or a custom theme) to be used for this report." + }, + "filterConfig": { + "description": "Filters that apply to the entire report (all pages and all visuals).", + "$ref": "../../filterConfiguration/1.2.0/schema-embedded.json" + }, + "objects": { + "description": "Specifies the formatting to be set for different \"objects\" of a report.", + "$ref": "#/definitions/ReportFormattingObjects" + }, + "reportSource": { + "description": "Defines how the report was created.", + "type": "string", + "anyOf": [ + { + "const": "Default", + "description": "A blank report generated by Power BI apps." + }, + { + "const": "SharePoint", + "description": "A quick create report created from a SharePointList." + }, + { + "const": "Teams", + "description": "A quick create report created from Teams." + }, + { + "const": "QuickCreate", + "description": "A quick create report created from Power BI app." + }, + { + "const": "EmbedQuickCreate", + "description": "A quick create report created from an embedded source." + }, + { + "const": "Datamart", + "description": "A new report created from Datamart." + }, + { + "const": "DataExplore", + "description": "A report generated by exporting an Exploration as a report." + } + ] + }, + "publicCustomVisuals": { + "description": "Names of the custom visuals used in this report from AppSource.", + "type": "array", + "items": { + "type": "string" + } + }, + "resourcePackages": { + "description": "Set of resources used within this report.", + "type": "array", + "items": { + "$ref": "#/definitions/ResourcePackage" + } + }, + "organizationCustomVisuals": { + "description": "Names and metadata of the organization approved custom visuals used in the report.", + "type": "array", + "items": { + "$ref": "#/definitions/OrganizationCustomVisual" + } + }, + "annotations": { + "description": "Additional information to be saved (for example comments, readme, etc) for this report.", + "type": "array", + "items": { + "$ref": "#/definitions/Annotation" + } + }, + "dataSourceVariables": { + "description": "A string containing the state of any variables from the underlying direct query data source that should be overridden when rendering this content.\nData source variables do not supply values for M parameters in the semantic model. Instead, data source variables are applied when accessing the underlying direct query source.", + "type": "string" + }, + "settings": { + "description": "Settings for the report.", + "$ref": "#/definitions/ExplorationSettings" + }, + "slowDataSourceSettings": { + "description": "Settings for slow data sources (for example turning all apply all button for filters).", + "$ref": "#/definitions/ExplorationSlowDataSourceSettings" + } + }, + "additionalProperties": false, + "required": [ + "$schema", + "themeCollection" + ], + "definitions": { + "ThemeCollection": { + "type": "object", + "properties": { + "baseTheme": { + "description": "Defines the base monthly release themes shipped with Power BI.", + "$ref": "#/definitions/ThemeMetadata" + }, + "customTheme": { + "description": "Defines a custom theme that is applied on top of the base theme.\nProperties not defined in the custom theme will fallback to using the base theme.", + "$ref": "#/definitions/ThemeMetadata" + } + }, + "additionalProperties": false + }, + "ThemeMetadata": { + "type": "object", + "properties": { + "name": { + "description": "Name of the theme.", + "type": "string" + }, + "reportVersionAtImport": { + "$ref": "#/definitions/ThemeVersion", + "description": "Versions when the theme was added to the report." + }, + "type": { + "$ref": "#/definitions/ThemeResourcePackageType", + "description": "Built-in or user specific custom theme." + } + }, + "additionalProperties": false, + "required": [ + "name", + "reportVersionAtImport", + "type" + ] + }, + "ThemeVersion": { + "type": "object", + "properties": { + "visual": { + "description": "The max visual container version at import.", + "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$", + "type": "string" + }, + "page": { + "description": "The max page version at import.", + "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$", + "type": "string" + }, + "report": { + "description": "The max report version at import.", + "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "page", + "report", + "visual" + ] + }, + "ThemeResourcePackageType": { + "type": "string", + "anyOf": [ + { + "const": "RegisteredResources", + "description": "Additional resources not bundled as part of the Power BI application." + }, + { + "const": "SharedResources", + "description": "Resources bundled as part of the Power BI applications." + } + ] + }, + "ReportFormattingObjects": { + "type": "object", + "properties": { + "outspacePane": { + "type": "array", + "items": { + "type": "object", + "properties": { + "selector": { + "description": "Defines the scope at which to apply the formatting for this object.\nCan also define rules for matching highlighted values and how multiple definitions for the same property should be ordered.", + "$ref": "../../formattingObjectDefinitions/1.4.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/OutspacePane", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "section": { + "type": "array", + "items": { + "type": "object", + "properties": { + "selector": { + "description": "Defines the scope at which to apply the formatting for this object.\nCan also define rules for matching highlighted values and how multiple definitions for the same property should be ordered.", + "$ref": "../../formattingObjectDefinitions/1.4.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/Section", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + } + }, + "additionalProperties": false + }, + "OutspacePane": { + "type": "object", + "properties": { + "expanded": {}, + "visible": {} + }, + "additionalProperties": false + }, + "Section": { + "type": "object", + "properties": { + "verticalAlignment": {} + }, + "additionalProperties": false + }, + "ResourcePackage": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "name": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/ResourcePackageType" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/ResourcePackageItem" + } + }, + "disabled": { + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "items", + "name", + "type" + ] + }, + "ResourcePackageType": { + "type": "string", + "anyOf": [ + { + "const": "CustomVisual" + }, + { + "const": "RegisteredResources" + }, + { + "const": "SharedResources" + }, + { + "const": "OrganizationalStoreCustomVisual" + } + ] + }, + "ResourcePackageItem": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/ResourcePackageItemType" + } + }, + "additionalProperties": false, + "required": [ + "name", + "path", + "type" + ] + }, + "ResourcePackageItemType": { + "type": "string", + "anyOf": [ + { + "const": "CustomVisualJavascript" + }, + { + "const": "CustomVisualsCss" + }, + { + "const": "CustomVisualScreenshot" + }, + { + "const": "CustomVisualIcon" + }, + { + "const": "CustomVisualWatermark" + }, + { + "const": "CustomVisualMetadata" + }, + { + "const": "Image" + }, + { + "const": "ShapeMap" + }, + { + "const": "CustomTheme" + }, + { + "const": "BaseTheme" + }, + { + "const": "DashboardTheme" + }, + { + "const": "DashboardBaseTheme" + }, + { + "const": "HighContrastTheme" + }, + { + "const": "AppNavigation" + }, + { + "const": "AppTheme" + }, + { + "const": "AppBaseTheme" + } + ] + }, + "OrganizationCustomVisual": { + "type": "object", + "properties": { + "name": { + "description": "Name of the organization custom visual.", + "type": "string" + }, + "path": { + "description": "Path where the custom visual is stored.", + "type": "string" + }, + "disabled": { + "description": "Signifies if the custom visual is disabled by the organization.", + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "name", + "path" + ] + }, + "Annotation": { + "type": "object", + "properties": { + "name": { + "description": "Unique name for the annotation.", + "type": "string" + }, + "value": { + "description": "A value for this annotation.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "name", + "value" + ] + }, + "ExplorationSettings": { + "type": "object", + "properties": { + "isPersistentUserStateDisabled": { + "description": "Disable saving state of changes to a report as report viewers modify slicers and filters.", + "type": "boolean" + }, + "hideVisualContainerHeader": { + "description": "Hide visual container header in view mode of the report.", + "type": "boolean" + }, + "useStylableVisualContainerHeader": { + "description": "Use the new visual container header that is formattable.", + "type": "boolean" + }, + "exportDataMode": { + "description": "When exporting data, what should be exported.", + "type": "string", + "anyOf": [ + { + "const": "AllowSummarized", + "description": "Only allow summarized data." + }, + { + "const": "AllowSummarizedAndUnderlying", + "description": "Allow underlying and summarized data." + }, + { + "const": "None", + "description": "Don't allow exporting data." + } + ] + }, + "isReportAnnotationsDisabled": { + "description": "Commenting is disabled for this report.", + "type": "boolean" + }, + "defaultFilterActionIsDataFilter": { + "description": "When selecting data points on a visual, it will result in apply that selection as a filter instead of a highlight on other visuals.", + "type": "boolean" + }, + "defaultDrillFilterOtherVisuals": { + "description": "When another visual is drilled, if visual interactions are enabled between the two visuals, then this property specifies if that drill should be applied as a filter to this visual.\nCan be overridden by setting on individual visuals.", + "type": "boolean" + }, + "useCrossReportDrillthrough": { + "description": "Allow drill-through from other reports to this report.", + "type": "boolean" + }, + "allowChangeFilterTypes": { + "description": "Disables changing the type of filter in view mode.", + "type": "boolean" + }, + "allowInlineExploration": { + "description": "Allows personalize this visual for the report in view mode.", + "type": "boolean" + }, + "useEnhancedTooltips": { + "description": "Uses better tooltips for the visuals in this report.", + "type": "boolean" + }, + "useScaledTooltips": { + "description": "If enabled, the tooltip will scale to match canvas zoom.", + "type": "boolean" + }, + "filterPaneHiddenInEditMode": { + "description": "Hide the filter pane in view mode.", + "type": "boolean" + }, + "disableFilterPaneSearch": { + "description": "Disables the search bar in filter pane.", + "type": "boolean" + }, + "pagesPosition": { + "description": "Default location where the page navigator is shown.", + "type": "string", + "anyOf": [ + { + "const": "PagesPane", + "description": "In a pane next to the report." + }, + { + "const": "Bottom", + "description": "In a toolbar below the report." + } + ] + }, + "allowAutomatedInsightsNotification": { + "description": "Allow generating insights for the report in the background on data refresh.", + "type": "boolean" + }, + "useDefaultAggregateDisplayName": { + "description": "Show the default aggregate in display names for summarized data.", + "type": "boolean" + }, + "enableDeveloperMode": { + "description": "Enables developer mode for testing private custom visuals.", + "type": "boolean" + }, + "pauseQueries": { + "description": "Allows pausing queries while making changes to a visual, so every change doesn't trigger a query.\nParticularly useful with slow data sources.", + "type": "boolean" + }, + "queryLimitOption": { + "description": "Describes the limitations for how long and how much compute a single query can be allowed to consume.\nMore details for different options: https://learn.microsoft.com/en-us/power-bi/create-reports/desktop-set-visual-query-limits", + "type": "string", + "anyOf": [ + { + "const": "None" + }, + { + "const": "Shared" + }, + { + "const": "Premium" + }, + { + "const": "SQLServerAS" + }, + { + "const": "AzureAS" + }, + { + "const": "Custom" + }, + { + "const": "Auto" + } + ] + }, + "customMemoryLimit": { + "description": "If custom query limit is applied, this value defines the memory limit.", + "type": "string" + }, + "customTimeoutLimit": { + "description": "If custom query limit is applied, this value defines the timeout limit.", + "type": "string" + }, + "fieldParameterReportSettings": { + "description": "Settings that will control the field parameter across all the visual in the report", + "$ref": "#/definitions/FieldParameterReportSettings" + } + }, + "additionalProperties": false + }, + "FieldParameterReportSettings": { + "type": "object", + "properties": { + "skipHierarchyLevelPersistence": { + "description": "If disabled, during parameter resolution, the hierarchy level and expand/collapse state of the visual won't be persisted", + "type": "boolean" + } + }, + "additionalProperties": false + }, + "ExplorationSlowDataSourceSettings": { + "type": "object", + "properties": { + "isCrossHighlightingDisabled": { + "description": "Disable cross highlights.", + "type": "boolean" + }, + "isSlicerSelectionsButtonEnabled": { + "description": "Adds 'apply' button to slicers.", + "type": "boolean" + }, + "isFilterSelectionsButtonEnabled": { + "description": "Adds 'apply' button to filters.", + "type": "boolean" + }, + "isFieldWellButtonEnabled": { + "description": "Adds 'apply' button to field changes.", + "type": "boolean" + }, + "isApplyAllButtonEnabled": { + "description": "Adds an apply all button.", + "type": "boolean" + } + }, + "additionalProperties": false + } + } +} \ No newline at end of file diff --git a/fabric/item/report/definition/report/CHANGELOG.md b/fabric/item/report/definition/report/CHANGELOG.md index 0f3a941..653187d 100644 --- a/fabric/item/report/definition/report/CHANGELOG.md +++ b/fabric/item/report/definition/report/CHANGELOG.md @@ -1,5 +1,11 @@ # Report Versions +### 3.1.0 + +Released in: January 2026
+Notes: +- Adds the `fieldParameterReportSettings` property to the `ExplorationSettings` definition + ### 3.0.0 Released in: August 2025
diff --git a/fabric/item/report/definition/visualContainer/2.5.0/schema.json b/fabric/item/report/definition/visualContainer/2.5.0/schema.json new file mode 100644 index 0000000..5099c7d --- /dev/null +++ b/fabric/item/report/definition/visualContainer/2.5.0/schema.json @@ -0,0 +1,309 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/visualContainer/2.5.0/schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Visual container", + "description": "Defines a single visual or visual group on a report page.", + "type": "object", + "properties": { + "$schema": { + "description": "Defines the schema to use for an item.", + "type": "string", + "const": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/visualContainer/2.5.0/schema.json" + }, + "name": { + "description": "A unique identifier for the visual across the whole page.", + "maxLength": 50, + "type": "string" + }, + "position": { + "$ref": "#/definitions/VisualContainerPosition", + "description": "Defines where the visual is position on the page and how big it should be, along\nwith z-index (stacking) for that visual.\nAlso defines the order in which visuals are navigated when using just keyboard (tabOrder)." + }, + "visual": { + "description": "Defines a chart to be shown inside of this container.", + "$ref": "../../visualConfiguration/2.2.0/schema-embedded.json" + }, + "visualGroup": { + "description": "Defines that this container should be used as a grouping container.", + "$ref": "#/definitions/VisualGroupConfig" + }, + "parentGroupName": { + "description": "Name of the parent group (visual container), if it is part of one.", + "type": "string" + }, + "filterConfig": { + "description": "Filters that apply to all this visual - on top of the filters defined for the report and page.", + "$ref": "../../filterConfiguration/1.2.0/schema-embedded.json" + }, + "isHidden": { + "description": "Marks the visual as hidden.", + "type": "boolean" + }, + "annotations": { + "description": "Additional information to be saved (for example comments, readme, etc) for this visual.", + "type": "array", + "items": { + "$ref": "#/definitions/Annotation" + } + }, + "howCreated": { + "description": "Source of creation of this visual.", + "type": "string", + "anyOf": [ + { + "const": "Default", + "description": "Used when it doesn't fall in any of the buckets below." + }, + { + "const": "Copilot", + "description": "Created by copilot." + }, + { + "const": "CheckboxTickedInFieldList", + "description": "Selecting data from field list." + }, + { + "const": "DraggedToCanvas", + "description": "Dragging data from field list to the canvas." + }, + { + "const": "VisualTypeIconClicked", + "description": "Clicking a specific visual icon in visualizations list." + }, + { + "const": "DraggedToFieldWell", + "description": "Dragging data from field list to field wells." + }, + { + "const": "InsertVisualButton", + "description": "Clicking the \"Insert visual\" button in ribbon." + }, + { + "const": "WhatIfParameterControl", + "description": "Automatically by what-if parameter." + }, + { + "const": "QnaAppBar", + "description": "Ask a question in app bar." + }, + { + "const": "QnaDoubleClick", + "description": "Double clicking on the canvas to generate a Q&A visual." + }, + { + "const": "QnaKeyboardShortcut", + "description": "Use keyboard shortcut for Q&A visual." + }, + { + "const": "FieldParameterControl", + "description": "Automatically by field parameters." + }, + { + "const": "CanvasBackgroundContextMenu", + "description": "Using on-object context menu for the canvas." + }, + { + "const": "ContextMenuPaste", + "description": "By using paste from context manu." + }, + { + "const": "CopyPaste", + "description": "By using copy paste." + }, + { + "const": "SummarizeVisualContainer", + "description": "By using context menu Summarize." + } + ] + } + }, + "additionalProperties": false, + "required": [ + "$schema", + "name", + "position" + ], + "definitions": { + "VisualContainerPosition": { + "type": "object", + "properties": { + "x": { + "description": "Horizontal position of the left edge of the visual.\nShould be between 0 and width of the containing page.", + "type": "number" + }, + "y": { + "description": "Vertical position of the top edge of the visual.\nShould be between 0 and height of the containing page.", + "type": "number" + }, + "z": { + "description": "Defines the stacking order for the visual.\nHigher z-index visuals are shown on top of the lower ones.", + "type": "number" + }, + "height": { + "description": "Height of the visual.\ny + height should be less than the height of the containing page.", + "type": "number" + }, + "width": { + "description": "Width of the visual.\nx + width should be less than the width of the containing page.", + "type": "number" + }, + "tabOrder": { + "description": "Defines the selection order for this visual when using keyboard (tab key)\nto navigate the visuals on the containing page.", + "type": "number" + }, + "angle": { + "type": "number" + } + }, + "additionalProperties": false, + "required": [ + "height", + "width", + "x", + "y" + ] + }, + "VisualGroupConfig": { + "type": "object", + "properties": { + "displayName": { + "description": "Display name for the group.", + "type": "string" + }, + "groupMode": { + "$ref": "#/definitions/GroupLayoutMode", + "description": "Defines how the visuals are organized inside this group." + }, + "objects": { + "description": "Specifies the formatting to be set for different \"objects\" of this group.", + "$ref": "#/definitions/VisualGroupFormattingObjects" + } + }, + "additionalProperties": false, + "required": [ + "displayName", + "groupMode" + ] + }, + "GroupLayoutMode": { + "type": "string", + "anyOf": [ + { + "const": "ScaleMode", + "description": "Visuals are scaled as group resizes to preserve the aspect ratio and avoid scrolling." + }, + { + "const": "ScrollMode", + "description": "Visuals are not resized, if the containing box for group is smaller than the space\nneeded for visuals, then scrollbar is added." + } + ] + }, + "VisualGroupFormattingObjects": { + "type": "object", + "properties": { + "background": { + "type": "array", + "items": { + "type": "object", + "properties": { + "selector": { + "description": "Defines the scope at which to apply the formatting for this object.\nCan also define rules for matching highlighted values and how multiple definitions for the same property should be ordered.", + "$ref": "../../formattingObjectDefinitions/1.4.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "../../visualConfiguration/2.2.0/schema-embedded.json#/definitions/Background", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "lockAspect": { + "type": "array", + "items": { + "type": "object", + "properties": { + "selector": { + "description": "Defines the scope at which to apply the formatting for this object.\nCan also define rules for matching highlighted values and how multiple definitions for the same property should be ordered.", + "$ref": "../../formattingObjectDefinitions/1.4.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "../../visualConfiguration/2.2.0/schema-embedded.json#/definitions/LockAspect", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "general": { + "type": "array", + "items": { + "type": "object", + "properties": { + "selector": { + "description": "Defines the scope at which to apply the formatting for this object.\nCan also define rules for matching highlighted values and how multiple definitions for the same property should be ordered.", + "$ref": "../../formattingObjectDefinitions/1.4.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/VisualGroupGeneralFormattingObjects", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + } + }, + "additionalProperties": false + }, + "VisualGroupGeneralFormattingObjects": { + "type": "object", + "properties": { + "x": {}, + "y": {}, + "width": {}, + "height": {}, + "altText": {} + }, + "additionalProperties": false + }, + "Annotation": { + "type": "object", + "properties": { + "name": { + "description": "Unique name for the annotation.", + "type": "string" + }, + "value": { + "description": "A value for this annotation.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "name", + "value" + ] + } + }, + "oneOf": [ + { + "required": [ + "visual" + ] + }, + { + "required": [ + "visualGroup" + ] + } + ] +} \ No newline at end of file diff --git a/fabric/item/report/definition/visualContainer/CHANGELOG.md b/fabric/item/report/definition/visualContainer/CHANGELOG.md index fc09dc4..b462532 100644 --- a/fabric/item/report/definition/visualContainer/CHANGELOG.md +++ b/fabric/item/report/definition/visualContainer/CHANGELOG.md @@ -1,5 +1,11 @@ # Visual Container Versions +### 2.5.0 + +Released in: January 2026
+Notes: +- Modern Tooltips GA + ### 2.4.0 Released in: November 2025
From cc6b5a149c17e51d4ef3d93f7d62e04758fb1b48 Mon Sep 17 00:00:00 2001 From: "Michael Faber (he/him)" Date: Tue, 20 Jan 2026 13:38:00 -0600 Subject: [PATCH 3/4] fix tests --- fabric/item/CosmosDB/definition/CosmosDB/2.0.0/schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fabric/item/CosmosDB/definition/CosmosDB/2.0.0/schema.json b/fabric/item/CosmosDB/definition/CosmosDB/2.0.0/schema.json index a055090..5d879ae 100644 --- a/fabric/item/CosmosDB/definition/CosmosDB/2.0.0/schema.json +++ b/fabric/item/CosmosDB/definition/CosmosDB/2.0.0/schema.json @@ -29,7 +29,7 @@ "required": [ "autoscaleSettings" ] - } + }, "resource":{ "type": "object", "properties": { From 5b49de09b42a2bf885b87322672c1f2d6728757c Mon Sep 17 00:00:00 2001 From: "Michael Faber (he/him)" Date: Tue, 20 Jan 2026 15:36:05 -0600 Subject: [PATCH 4/4] update readme --- fabric/item/report/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fabric/item/report/README.md b/fabric/item/report/README.md index 26d2a5a..718355e 100644 --- a/fabric/item/report/README.md +++ b/fabric/item/report/README.md @@ -2,7 +2,7 @@ ## January 2026 -Modern Tooltips GA, bug fixes +Modern Tooltips GA, Field Parameter Report Settings, bug fixes - [bookmark 2.0.0](./definition/bookmark/CHANGELOG.md#2.0.0) - [report 3.1.0](./definition/report/CHANGELOG.md#3.1.0)