diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 9f4573fa..2c6bb5e5 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -11,7 +11,7 @@ pool: steps: - script: echo Triggering staging deployment of JSON-SCHEMAS in github, this copy files to staging blob storage! - displayName: 'Staging deployment JSON-SCHEMAS' + displayName: 'Production deployment JSON-SCHEMAS' - task: M365CdnAssetsUpload@3 inputs: @@ -19,5 +19,6 @@ steps: ConnectionType: 'ServiceConnection' AzureSubscription: 'Production_1CDN_Access' Environment: 'PublicCloud' - ContainerName: 's01-prod' + ContainerName: 's01-content' + BlobPrefix: 'json-schemas/en-us/html' AllLogsToConsole: true diff --git a/fabric/item/map/definition/2.0.0/schema.json b/fabric/item/map/definition/2.0.0/schema.json new file mode 100644 index 00000000..bfaca93c --- /dev/null +++ b/fabric/item/map/definition/2.0.0/schema.json @@ -0,0 +1,853 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/map/definition/2.0.0/schema.json", + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "Map Definition", + "type": "object", + "additionalProperties": false, + "$defs": { + "colorDefinition": { + "oneOf": [ + { + "type": "string", + "description": "A CSS color string (hex, rgb, rgba, hsl, hsla, or named color)" + }, + { + "type": "array", + "description": "A data-driven expression array for dynamic styling" + } + ] + } + }, + "properties": { + "$schema": { + "type": "string", + "description": "The schema version for the map definition" + }, + "basemap": { + "type": "object", + "description": "Configuration for the base map settings", + "additionalProperties": false, + "properties": { + "options": { + "type": ["object", "null"], + "description": "Options for the map", + "additionalProperties": false, + "properties": { + "center": { + "type": "array", + "description": "The position to align the center of the map view with", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "zoom": { + "type": "number", + "description": "The zoom level of the map view" + }, + "pitch": { + "type": "number", + "description": "The pitch (tilt) of the map in degrees between 0 and 60, where 0 is looking straight down on the map" + }, + "bearing": { + "type": "number", + "description": "The bearing of the map (rotation) in degrees. When the bearing is 0, 90, 180, or 270 the top of the map container will be north, east, south or west respectively" + }, + "style": { + "type": "string", + "description": "The name of the style to use when rendering the map. Available styles can be found in the supported styles article. The default style is \"road\"" + }, + "showLabels": { + "type": "boolean", + "description": "Specifies if the map should display labels" + }, + "language": { + "type": "string", + "description": "The language of the map labels. Supported languages can be found in the documentation. If set to \"auto\", the browser's preferred language will be used" + }, + "renderWorldCopies": { + "type": "boolean", + "description": "Specifies if multiple copies of the world should be rendered when zoomed out" + }, + "view": { + "type": "string", + "description": "The view to show the correct maps for a certain country/region for geopolitically disputed regions. If not specified, the default unified view will be used. Please refer to https://aka.ms/AzureMapsLocalizationViews for details and to see the available Views." + }, + "styleOverrides": { + "type": "object", + "description": "Override the default styles for the map elements", + "additionalProperties": false, + "properties": { + "countryRegion": { + "type": "object", + "description": "Country or regions. Supported by map styles \"road\", \"satellite_road_labels\", \"grayscale_light\", \"grayscale_dark\", \"night\", \"road_shaded_relief\", \"high_contrast_dark\", \"high_contrast_light\"", + "properties": { + "borderVisible": { + "type": "boolean", + "description": "Specifies the visibility of the border" + } + } + }, + "adminDistrict": { + "type": "object", + "description": "First administrative level within the country/region level, such as a state or a province. Supported by map styles \"road\", \"satellite_road_labels\", \"grayscale_light\", \"grayscale_dark\", \"night\", \"road_shaded_relief\", \"high_contrast_dark\", \"high_contrast_light\"", + "properties": { + "borderVisible": { + "type": "boolean", + "description": "Specifies the visibility of the border" + } + } + }, + "adminDistrict2": { + "type": "object", + "description": "Second administrative level within the country/region level, such as a county. Supported by map styles \"road\", \"satellite_road_labels\", \"night\", \"road_shaded_relief\", \"high_contrast_dark\", \"high_contrast_light\"", + "properties": { + "borderVisible": { + "type": "boolean", + "description": "Specifies the visibility of the border" + } + } + }, + "roadDetails": { + "type": "object", + "description": "Street blocks in the populated places. Supported by map styles \"road\", \"grayscale_light\", \"grayscale_dark\", \"night\", \"road_shaded_relief\", \"high_contrast_dark\", \"high_contrast_light\"", + "properties": { + "visible": { + "type": "boolean", + "description": "Specifies the visibility of the element" + } + } + }, + "buildingFootprint": { + "type": "object", + "description": "Building footprints along with their address numbers. Supported by map styles \"road\", \"grayscale_light\", \"grayscale_dark\", \"night\", \"road_shaded_relief\", \"high_contrast_dark\", \"high_contrast_light\"", + "properties": { + "visible": { + "type": "boolean", + "description": "Specifies the visibility of the element" + } + } + } + } + } + } + }, + "controls": { + "type": "object", + "description": "Map control settings", + "additionalProperties": false, + "properties": { + "zoom": { + "type": ["boolean", "null"], + "description": "Enable zoom control" + }, + "pitch": { + "type": ["boolean", "null"], + "description": "Enable pitch control" + }, + "compass": { + "type": ["boolean", "null"], + "description": "Enable compass control" + }, + "scale": { + "type": ["boolean", "null"], + "description": "Enable scale control" + }, + "traffic": { + "type": ["boolean", "null"], + "description": "Enable traffic control" + }, + "style": { + "type": ["boolean", "null"], + "description": "Enable style control" + } + } + }, + "backgroundColor": { + "type": ["string", "null"], + "description": "Background color of the map" + }, + "theme": { + "type": ["string", "null"], + "description": "Theme for the map" + } + } + }, + "dataSources": { + "type": "array", + "description": "Array of data sources for the map", + "items": { + "oneOf": [ + { + "type": "object", + "description": "A workspace item data source (Lakehouse, KqlDatabase, Ontology, etc.)", + "additionalProperties": false, + "properties": { + "itemType": { + "type": "string", + "description": "The type of the data source item (e.g., Lakehouse, KqlDatabase, Ontology)" + }, + "workspaceId": { + "type": "string", + "description": "The workspace ID of the item", + "format": "uuid" + }, + "itemId": { + "type": "string", + "description": "The item ID", + "format": "uuid" + } + }, + "required": ["itemType", "workspaceId", "itemId"] + }, + { + "type": "object", + "description": "A connection data source", + "additionalProperties": false, + "properties": { + "itemType": { + "type": "string", + "description": "The type of the data source item", + "const": "Connection" + }, + "connectionId": { + "type": "string", + "description": "The connection ID", + "format": "uuid" + } + }, + "required": ["itemType", "connectionId"] + } + ] + } + }, + "iconSources": { + "type": "array", + "description": "Array of icon sources for the map", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the icon source", + "format": "uuid" + }, + "name": { + "type": "string", + "description": "Name of the icon source" + }, + "type": { + "type": "string", + "description": "Type of the icon source" + }, + "itemId": { + "type": "string", + "description": "ID of the data source item for this icon source", + "format": "uuid" + }, + "relativePath": { + "type": "string", + "description": "Relative path to the icon source" + } + }, + "required": ["id", "name", "type", "itemId", "relativePath"] + } + }, + "layerSources": { + "type": "array", + "description": "Array of layer sources for the map", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the layer source", + "format": "uuid" + }, + "name": { + "type": "string", + "description": "Name of the layer source" + }, + "type": { + "type": "string", + "description": "Type of the layer source" + }, + "options": { + "type": ["object", "null"], + "description": "Options for the layer source", + "additionalProperties": false, + "properties": { + "cluster": { + "type": "boolean", + "description": "Enable clustering of point features" + }, + "clusterProperties": { + "type": "object", + "description": "Defines custom properties that are calculated using expressions against all the points within each cluster and added to the properties of each cluster point", + "additionalProperties": { + "type": "array", + "description": "An aggregate expression in the form [operator, mapExpression] or for three-argument operators [operator, mapExpression, reduceExpression]" + } + }, + "clusterField": { + "type": "string", + "description": "Field name to use for cluster aggregation" + }, + "clusterType": { + "type": "string", + "description": "Type of cluster aggregation to perform" + } + } + }, + "itemId": { + "type": "string", + "description": "ID of the data source item for this layer", + "format": "uuid" + }, + "relativePath": { + "type": ["string", "null"], + "description": "Relative path to the data source" + }, + "ontologyEntityId": { + "type": ["string", "null"], + "description": "ID of the ontology entity" + }, + "refreshIntervalMs": { + "type": "integer", + "description": "Refresh interval in milliseconds", + "minimum": 0 + }, + "connectionId": { + "type": ["string", "null"], + "description": "ID of the connection for external data sources" + }, + "connectionResourceId": { + "type": ["string", "null"], + "description": "Identifier of a resource provided by the connection. e.g. layer name, asset name" + } + }, + "required": ["id", "name", "type"] + } + }, + "layerSettings": { + "type": "array", + "description": "Array of layer settings for the map", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the layer", + "format": "uuid" + }, + "name": { + "type": "string", + "description": "Name of the layer" + }, + "sourceId": { + "type": "string", + "description": "ID of the associated layer source", + "format": "uuid" + }, + "sourceLayerId": { + "type": ["string", "null"], + "description": "ID of the specific layer within the source" + }, + "options": { + "type": "object", + "description": "Options for the layer rendering", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "description": "Layer type (vector or raster)", + "enum": ["vector", "raster"] + }, + "visible": { + "type": "boolean", + "description": "Specifies if the layer is visible or not" + }, + "minZoom": { + "type": "number", + "description": "An integer specifying the minimum zoom level to render the layer at. This value is inclusive, i.e. the layer will be visible at maxZoom > zoom >= minZoom" + }, + "maxZoom": { + "type": "number", + "description": "An integer specifying the maximum zoom level to render the layer at. This value is exclusive, i.e. the layer will be visible at maxZoom > zoom >= minZoom" + }, + "color": { + "type": "string", + "description": "Base color for the layer" + }, + "sourceLayer": { + "type": "string", + "description": "Required when the source of the layer is a VectorTileSource. A vector source can have multiple layers within it, this identifies which one to render in this layer. Prohibited for all other types of sources" + }, + "latitudeColumnName": { + "type": ["string", "null"], + "description": "Name of the latitude column" + }, + "longitudeColumnName": { + "type": ["string", "null"], + "description": "Name of the longitude column" + }, + "geometryColumnName": { + "type": ["string", "null"], + "description": "Name of the geometry column" + }, + "enablePopups": { + "type": "boolean", + "description": "Show popups when shapes are clicked" + }, + "heatmapWeight": { + "type": "string", + "description": "Property name to use for heatmap weight" + }, + "allowExtrusions": { + "type": "boolean", + "description": "Render polygons with height property as 3D extrusions" + }, + "pointLayerType": { + "type": "string", + "description": "Type of point layer to render", + "enum": ["bubble", "heatmap", "marker"] + }, + "bubbleOptions": { + "type": "object", + "description": "Styling options for bubble/point geometries", + "additionalProperties": false, + "properties": { + "color": { + "description": "The color to fill the circle symbol with", + "$ref": "#/$defs/colorDefinition" + }, + "radius": { + "type": "number", + "description": "The radius of the circle symbols in pixels. Must be greater than or equal to 0" + }, + "strokeColor": { + "description": "The color of the circles' outlines", + "$ref": "#/$defs/colorDefinition" + }, + "strokeWidth": { + "type": "number", + "description": "The width of the circles' outlines in pixels" + }, + "opacity": { + "type": "number", + "description": "A number between 0 and 1 that indicates the opacity at which the circles will be drawn" + }, + "sizeType": { + "type": "string", + "description": "Bubble size type", + "enum": ["fixed", "data-driven"] + }, + "fixedSize": { + "type": "number", + "description": "Fixed size for bubbles when sizeType is fixed (1-50)", + "minimum": 1, + "maximum": 50 + }, + "sizeProperty": { + "type": "string", + "description": "Property name for data-driven bubble sizes" + }, + "clusterRadius": { + "type": "number", + "description": "Radius of each cluster in pixels" + }, + "enableSeriesGroup": { + "type": "boolean", + "description": "Enable grouping by series for color differentiation" + }, + "seriesGroup": { + "type": "string", + "description": "Property key to use for series grouping" + }, + "paletteId": { + "type": "string", + "description": "ID of the color palette to use for data-driven colors" + }, + "customColors": { + "type": "object", + "description": "Custom colors for data-driven styling. Keys are series values, values are color strings.", + "additionalProperties": { + "$ref": "#/$defs/colorDefinition" + } + } + } + }, + "heatmapOptions": { + "type": "object", + "description": "Styling options for heatmap layers", + "additionalProperties": false, + "properties": { + "intensity": { + "type": "number", + "description": "Similar to heatmap-weight but specifies the global heatmap intensity. The higher this value is, the more 'weight' each point will contribute to the appearance" + }, + "opacity": { + "type": "number", + "description": "The opacity at which the heatmap layer will be rendered defined as a number between 0 and 1" + }, + "radius": { + "type": "number", + "description": "The radius in pixels used to render a data point on the heatmap. The radius must be a number greater or equal to 1" + }, + "weight": { + "type": "number", + "description": "Specifies how much an individual data point contributes to the heatmap. Must be a number greater than 0. A value of 5 would be equivalent to having 5 points of weight 1 in the same spot. This is useful when clustering points to allow heatmap rendering or large datasets" + } + } + }, + "markerOptions": { + "type": "object", + "description": "Styling options for marker layers", + "additionalProperties": false, + "properties": { + "enableSeriesGroup": { + "type": "boolean", + "description": "Enable grouping by series for color differentiation" + }, + "seriesGroup": { + "type": "string", + "description": "Property key to use for series grouping" + }, + "fillColor": { + "description": "The color to fill the marker with", + "$ref": "#/$defs/colorDefinition" + }, + "strokeColor": { + "description": "The color of the markers' outlines", + "$ref": "#/$defs/colorDefinition" + }, + "strokeWidth": { + "type": "number", + "description": "The width of the markers' outlines in pixels" + }, + "size": { + "type": "number", + "description": "The size of the markers in pixels" + }, + "clusterSize": { + "type": "number", + "description": "The size of the clustered markers in pixels" + }, + "icon": { + "type": "string", + "description": "Icon name to use for the marker" + } + } + }, + "lineOptions": { + "type": "object", + "description": "Styling options for line geometries", + "additionalProperties": false, + "properties": { + "strokeColor": { + "description": "Specifies the color of the line", + "$ref": "#/$defs/colorDefinition" + }, + "strokeWidth": { + "type": "number", + "description": "The width of the line in pixels. Must be a value greater or equal to 0" + }, + "strokeOpacity": { + "type": "number", + "description": "A number between 0 and 1 that indicates the opacity at which the line will be drawn" + }, + "enableSeriesGroup": { + "type": "boolean", + "description": "Enable grouping by series for color differentiation" + }, + "seriesGroup": { + "type": "string", + "description": "Property key to use for series grouping" + }, + "paletteId": { + "type": "string", + "description": "ID of the color palette to use for data-driven colors" + }, + "customColors": { + "type": "object", + "description": "Custom colors for data-driven styling. Keys are series values, values are color strings.", + "additionalProperties": { + "$ref": "#/$defs/colorDefinition" + } + } + } + }, + "polygonOptions": { + "type": "object", + "description": "Styling options for polygon fill", + "additionalProperties": false, + "properties": { + "fillColor": { + "description": "The color to fill the polygons with", + "$ref": "#/$defs/colorDefinition" + }, + "fillOpacity": { + "type": "number", + "description": "A number between 0 and 1 that indicates the opacity at which the fill will be drawn" + }, + "enableSeriesGroup": { + "type": "boolean", + "description": "Enable grouping by series for color differentiation" + }, + "seriesGroup": { + "type": "string", + "description": "Property key to use for series grouping" + }, + "paletteId": { + "type": "string", + "description": "ID of the color palette to use for data-driven colors" + }, + "customColors": { + "type": "object", + "description": "Custom colors for data-driven styling. Keys are series values, values are color strings.", + "additionalProperties": { + "$ref": "#/$defs/colorDefinition" + } + } + } + }, + "polygonExtrusionOptions": { + "type": "object", + "description": "Styling options for extruded polygons (3D)", + "additionalProperties": false, + "properties": { + "fillColor": { + "description": "The color to fill the polygons with. Ignored if fillPattern is set", + "$ref": "#/$defs/colorDefinition" + }, + "fillOpacity": { + "type": "number", + "description": "A number between 0 and 1 that indicates the opacity at which the fill will be drawn" + }, + "height": { + "type": "number", + "description": "The height in meters to extrude this layer. This height is relative to the ground. Must be a number greater or equal to 0" + }, + "base": { + "type": "number", + "description": "The height in meters to extrude the base of this layer. This height is relative to the ground. Must be greater or equal to 0 and less than or equal to height" + } + } + }, + "dataLabelOptions": { + "type": "object", + "description": "Configuration for data labels displayed on features", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "description": "Whether data labels are enabled" + }, + "color": { + "description": "Text color", + "$ref": "#/$defs/colorDefinition" + }, + "size": { + "type": "number", + "description": "Text size in pixels" + }, + "textStrokeColor": { + "description": "Text stroke color", + "$ref": "#/$defs/colorDefinition" + }, + "textStrokeWidth": { + "type": "number", + "description": "Text stroke width in pixels" + }, + "allowOverlap": { + "type": "boolean", + "description": "Allow text overlap with other symbols" + } + } + }, + "dataLabelKeys": { + "type": "array", + "description": "Property names to display as data labels", + "items": { + "type": "string" + } + }, + "tooltipKeys": { + "type": "array", + "description": "Property names to display in tooltips", + "items": { + "type": "string" + } + }, + "opacity": { + "type": "number", + "description": "A number between 0 and 1 that indicates the opacity at which the overlay will be drawn", + "minimum": 0, + "maximum": 1 + } + } + }, + "latitudeColumnName": { + "type": ["string", "null"], + "description": "Name of the latitude column" + }, + "longitudeColumnName": { + "type": ["string", "null"], + "description": "Name of the longitude column" + }, + "geometryColumnName": { + "type": ["string", "null"], + "description": "Name of the geometry column" + }, + "filters": { + "type": "array", + "description": "Array of data filters to apply to the layer", + "items": { + "oneOf": [ + { + "type": "object", + "description": "Text-based filter for string property values", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the filter", + "format": "uuid" + }, + "type": { + "type": "string", + "const": "text", + "description": "Discriminant property for text filter" + }, + "field": { + "type": "string", + "description": "Name of the feature property to filter on" + }, + "locked": { + "type": "boolean", + "description": "When true, prevents viewers from modifying or removing this filter" + }, + "value": { + "type": "array", + "description": "Array of text values to filter by. Empty array indicates no values selected yet.", + "items": { + "type": ["string", "null"] + } + } + }, + "required": ["id", "type", "field", "locked", "value"] + }, + { + "type": "object", + "description": "Boolean filter for true/false property values", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the filter", + "format": "uuid" + }, + "type": { + "type": "string", + "const": "boolean", + "description": "Discriminant property for boolean filter" + }, + "field": { + "type": "string", + "description": "Name of the feature property to filter on" + }, + "locked": { + "type": "boolean", + "description": "When true, prevents viewers from modifying or removing this filter" + }, + "value": { + "type": "boolean", + "description": "The boolean value to filter by" + } + }, + "required": ["id", "type", "field", "locked", "value"] + }, + { + "type": "object", + "description": "Numeric range filter for integer or decimal property values", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the filter", + "format": "uuid" + }, + "type": { + "type": "string", + "const": "number", + "description": "Discriminant property for number filter" + }, + "field": { + "type": "string", + "description": "Name of the feature property to filter on" + }, + "locked": { + "type": "boolean", + "description": "When true, prevents viewers from modifying or removing this filter" + }, + "min": { + "type": "number", + "description": "Minimum value (inclusive)" + }, + "max": { + "type": "number", + "description": "Maximum value (inclusive)" + } + }, + "required": ["id", "type", "field", "locked", "min", "max"] + }, + { + "type": "object", + "description": "DateTime range filter for temporal data", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the filter", + "format": "uuid" + }, + "type": { + "type": "string", + "const": "datetime", + "description": "Discriminant property for datetime filter" + }, + "field": { + "type": "string", + "description": "Name of the feature property to filter on" + }, + "locked": { + "type": "boolean", + "description": "When true, prevents viewers from modifying or removing this filter" + }, + "start": { + "type": "string", + "description": "Start of the time range (ISO 8601 format)", + "format": "date-time" + }, + "end": { + "type": "string", + "description": "End of the time range (ISO 8601 format)", + "format": "date-time" + } + }, + "required": ["id", "type", "field", "locked", "start", "end"] + } + ] + } + } + }, + "required": ["id", "name", "sourceId"] + } + } + }, + "required": ["$schema"] +} diff --git a/fabric/item/report/README.md b/fabric/item/report/README.md index 718355ef..49d7aa00 100644 --- a/fabric/item/report/README.md +++ b/fabric/item/report/README.md @@ -1,5 +1,25 @@ # Releases +## March 2026 + +Custom Totals for Table and Matrix visuals + +- [bookmark 2.1.0](./definition/bookmark/CHANGELOG.md#2.1.0) +- [filterConfiguration 1.3.0](./definition/filterConfiguration/CHANGELOG.md#1.3.0) +- [formattingObjectDefinitions 1.5.0](./definition/formattingObjectDefinitions/CHANGELOG.md#1.5.0) +- [page 2.1.0](./definition/page/CHANGELOG.md#2.1.0) +- [report 3.2.0](./definition/report/CHANGELOG.md#3.2.0) +- [semanticQuery 1.4.0](./definition/semanticQuery/CHANGELOG.md#1.4.0) +- [visualConfiguration 2.3.0](./definition/visualConfiguration/CHANGELOG.md#2.3.0) +- [visualContainer 2.7.0](./definition/visualContainer/CHANGELOG.md#2.7.0) +- [visualContainerMobileState 2.3.0](./definition/visualContainerMobileState/CHANGELOG.md#2.3.0) + +## February 2026 + +Input slicer GA, AI narratives "auto-refresh" formatting option + +- [visualContainer 2.6.0](./definition/visualContainer/CHANGELOG.md#2.6.0) + ## January 2026 Modern Tooltips GA, Field Parameter Report Settings, bug fixes diff --git a/fabric/item/report/definition/bookmark/2.1.0/schema.json b/fabric/item/report/definition/bookmark/2.1.0/schema.json new file mode 100644 index 00000000..c747ce6d --- /dev/null +++ b/fabric/item/report/definition/bookmark/2.1.0/schema.json @@ -0,0 +1,778 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/bookmark/2.1.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.1.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.4.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.4.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.5.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.4.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.5.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.4.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.4.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.4.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.5.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.5.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.4.0/schema.json#/definitions/QueryExpressionContainer" + } + } + }, + "ParameterStateByRole": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/definitions/ParameterState" + } + } + }, + "ParameterState": { + "type": "object", + "properties": { + "expr": { + "$ref": "../../semanticQuery/1.4.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.5.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 4fbc92f0..f5e8c6c7 100644 --- a/fabric/item/report/definition/bookmark/CHANGELOG.md +++ b/fabric/item/report/definition/bookmark/CHANGELOG.md @@ -1,5 +1,12 @@ # Bookmark Versions +### 2.1.0 + +Released in: March 2026
+Notes: +- Updates the reference to the `formattingObjectDefinitions` schema from `1.4.0` to `1.5.0` +- Updates the reference to the `semanticQuery` schema from `1.3.0` to `1.4.0` + ### 2.0.0 Released in: January 2026
Notes: diff --git a/fabric/item/report/definition/filterConfiguration/1.3.0/schema-embedded.json b/fabric/item/report/definition/filterConfiguration/1.3.0/schema-embedded.json new file mode 100644 index 00000000..fae3748e --- /dev/null +++ b/fabric/item/report/definition/filterConfiguration/1.3.0/schema-embedded.json @@ -0,0 +1,185 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/filterConfiguration/1.3.0/schema.embedded.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Filter configuration", + "description": "Defines the configuration of filters.", + "type": "object", + "properties": { + "filters": { + "description": "Defines the definitions and metadata for the filters.", + "type": "array", + "items": { + "$ref": "#/definitions/FilterContainer" + } + }, + "filterSortOrder": { + "description": "Defines how the filters sorted - by name or custom sorting\nIf custom sorting, then ordinal property of every filter is used as the sort order,\nfilters where ordinal is skipped will be shown at the end; ordering will fallback to display name of the field.", + "type": "string", + "anyOf": [ + { + "const": "Ascending", + "description": "Sorted ascending by display name of the filter field." + }, + { + "const": "Descending", + "description": "Sorted descending by display name of the filter field." + }, + { + "const": "Custom", + "description": "Sorted ascending by ordinal property of filters." + } + ] + } + }, + "additionalProperties": false, + "definitions": { + "FilterContainer": { + "type": "object", + "properties": { + "name": { + "description": "A unique name (across the whole report definition) defined for this filter.", + "type": "string" + }, + "displayName": { + "description": "An alternate name to use when displaying this filter - by default the display name of the field will be used, if there is no field or display name,\nthen restatement of the filter will be shown. Only applies to certain filter types.", + "type": "string" + }, + "ordinal": { + "description": "Defines the ordering of this filter w.r.t. other filters - only applies when Custom sort order is set.", + "type": "number" + }, + "field": { + "description": "Defines the field from your data that is filtered.", + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer" + }, + "type": { + "description": "The type of a filter.", + "type": "string", + "anyOf": [ + { + "const": "Categorical" + }, + { + "const": "Range" + }, + { + "const": "Advanced" + }, + { + "const": "Passthrough" + }, + { + "const": "TopN" + }, + { + "const": "Include" + }, + { + "const": "Exclude" + }, + { + "const": "RelativeDate" + }, + { + "const": "Tuple" + }, + { + "const": "RelativeTime" + }, + { + "const": "VisualTopN" + } + ] + }, + "filter": { + "description": "Defines the actual filter definition - it is dependent on the type of filter.", + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/FilterDefinition" + }, + "restatement": { + "description": "A custom restatement to show for the filter - only applies to Passthrough filter type. For all other filters, a restatement is generated based on the filter definition.", + "type": "string" + }, + "howCreated": { + "description": "Specifies how this filter was first created.", + "type": "string", + "anyOf": [ + { + "const": "Auto", + "description": "Created automatically when a field is used in the visual." + }, + { + "const": "User", + "description": "Filters created from fields not used in a visual by the user." + }, + { + "const": "Drill", + "description": "Created when drilling down on a data point in a visual." + }, + { + "const": "Include", + "description": "Created by including a data point in a visual." + }, + { + "const": "Exclude", + "description": "Created by excluding a data point from a visual." + }, + { + "const": "Drillthrough", + "description": "Created by drill context that is applied to the page when using drill-through\naction from another page." + } + ] + }, + "isHiddenInViewMode": { + "description": "Defines whether to hide this filter when viewing the report.", + "type": "boolean" + }, + "isLockedInViewMode": { + "description": "Defines whether the filter value can be changed when viewing the report.", + "type": "boolean" + }, + "objects": { + "description": "Formatting for different \"objects\" of a filter card", + "$ref": "#/definitions/FilterContainerFormattingObjects" + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + }, + "FilterContainerFormattingObjects": { + "type": "object", + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/FilterContainerFormattingObjectsProperties", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + } + }, + "additionalProperties": false + }, + "FilterContainerFormattingObjectsProperties": { + "type": "object", + "properties": { + "requireSingleSelect": {}, + "isInvertedSelectionMode": {} + }, + "additionalProperties": false + } + } +} \ No newline at end of file diff --git a/fabric/item/report/definition/filterConfiguration/1.3.0/schema.json b/fabric/item/report/definition/filterConfiguration/1.3.0/schema.json new file mode 100644 index 00000000..047da36e --- /dev/null +++ b/fabric/item/report/definition/filterConfiguration/1.3.0/schema.json @@ -0,0 +1,193 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/filterConfiguration/1.3.0/schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Filter configuration", + "description": "Defines the configuration of filters.", + "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/filterConfiguration/1.3.0/schema.json" + }, + "filters": { + "description": "Defines the definitions and metadata for the filters.", + "type": "array", + "items": { + "$ref": "#/definitions/FilterContainer" + } + }, + "filterSortOrder": { + "description": "Defines how the filters sorted - by name or custom sorting\nIf custom sorting, then ordinal property of every filter is used as the sort order,\nfilters where ordinal is skipped will be shown at the end; ordering will fallback to display name of the field.", + "type": "string", + "anyOf": [ + { + "const": "Ascending", + "description": "Sorted ascending by display name of the filter field." + }, + { + "const": "Descending", + "description": "Sorted descending by display name of the filter field." + }, + { + "const": "Custom", + "description": "Sorted ascending by ordinal property of filters." + } + ] + } + }, + "additionalProperties": false, + "required": [ + "$schema" + ], + "definitions": { + "FilterContainer": { + "type": "object", + "properties": { + "name": { + "description": "A unique name (across the whole report definition) defined for this filter.", + "type": "string" + }, + "displayName": { + "description": "An alternate name to use when displaying this filter - by default the display name of the field will be used, if there is no field or display name,\nthen restatement of the filter will be shown. Only applies to certain filter types.", + "type": "string" + }, + "ordinal": { + "description": "Defines the ordering of this filter w.r.t. other filters - only applies when Custom sort order is set.", + "type": "number" + }, + "field": { + "description": "Defines the field from your data that is filtered.", + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer" + }, + "type": { + "description": "The type of a filter.", + "type": "string", + "anyOf": [ + { + "const": "Categorical" + }, + { + "const": "Range" + }, + { + "const": "Advanced" + }, + { + "const": "Passthrough" + }, + { + "const": "TopN" + }, + { + "const": "Include" + }, + { + "const": "Exclude" + }, + { + "const": "RelativeDate" + }, + { + "const": "Tuple" + }, + { + "const": "RelativeTime" + }, + { + "const": "VisualTopN" + } + ] + }, + "filter": { + "description": "Defines the actual filter definition - it is dependent on the type of filter.", + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/FilterDefinition" + }, + "restatement": { + "description": "A custom restatement to show for the filter - only applies to Passthrough filter type. For all other filters, a restatement is generated based on the filter definition.", + "type": "string" + }, + "howCreated": { + "description": "Specifies how this filter was first created.", + "type": "string", + "anyOf": [ + { + "const": "Auto", + "description": "Created automatically when a field is used in the visual." + }, + { + "const": "User", + "description": "Filters created from fields not used in a visual by the user." + }, + { + "const": "Drill", + "description": "Created when drilling down on a data point in a visual." + }, + { + "const": "Include", + "description": "Created by including a data point in a visual." + }, + { + "const": "Exclude", + "description": "Created by excluding a data point from a visual." + }, + { + "const": "Drillthrough", + "description": "Created by drill context that is applied to the page when using drill-through\naction from another page." + } + ] + }, + "isHiddenInViewMode": { + "description": "Defines whether to hide this filter when viewing the report.", + "type": "boolean" + }, + "isLockedInViewMode": { + "description": "Defines whether the filter value can be changed when viewing the report.", + "type": "boolean" + }, + "objects": { + "description": "Formatting for different \"objects\" of a filter card", + "$ref": "#/definitions/FilterContainerFormattingObjects" + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + }, + "FilterContainerFormattingObjects": { + "type": "object", + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/FilterContainerFormattingObjectsProperties", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + } + }, + "additionalProperties": false + }, + "FilterContainerFormattingObjectsProperties": { + "type": "object", + "properties": { + "requireSingleSelect": {}, + "isInvertedSelectionMode": {} + }, + "additionalProperties": false + } + } +} \ No newline at end of file diff --git a/fabric/item/report/definition/filterConfiguration/CHANGELOG.md b/fabric/item/report/definition/filterConfiguration/CHANGELOG.md index 656512fc..fe9735fb 100644 --- a/fabric/item/report/definition/filterConfiguration/CHANGELOG.md +++ b/fabric/item/report/definition/filterConfiguration/CHANGELOG.md @@ -1,5 +1,12 @@ # Filter Configuration Versions +### 1.3.0 + +Released in: March 2026
+Notes: +- Updates the reference to the `formattingObjectDefinitions` schema from `1.4.0` to `1.5.0` +- Updates the reference to the `semanticQuery` schema from `1.3.0` to `1.4.0` + ### 1.2.0 Released in: June 2025
diff --git a/fabric/item/report/definition/formattingObjectDefinitions/1.5.0/schema.json b/fabric/item/report/definition/formattingObjectDefinitions/1.5.0/schema.json new file mode 100644 index 00000000..8b1ac36c --- /dev/null +++ b/fabric/item/report/definition/formattingObjectDefinitions/1.5.0/schema.json @@ -0,0 +1,160 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/formattingObjectDefinitions/1.5.0/schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Formatting Object Definitions", + "description": "Defines shared definitions for report object formatting.", + "definitions": { + "DataViewObjectDefinitions": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/definitions/DataViewObjectDefinition" + } + } + }, + "DataViewObjectDefinition": { + "type": "object", + "properties": { + "selector": { + "$ref": "#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/DataViewObjectPropertyDefinitions" + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + }, + "DataViewObjectPropertyDefinitions": { + "type": "object", + "additionalProperties": {} + }, + "Selector": { + "type": "object", + "properties": { + "data": { + "description": "Scope is defined by data bound to the visual.", + "type": "array", + "items": { + "$ref": "#/definitions/DataRepetitionSelector" + } + }, + "metadata": { + "description": "Defines the scope to a specific field.", + "type": "string" + }, + "id": { + "description": "User defined scope.", + "type": "string" + }, + "highlightMatching": { + "description": "Describes how the Selector should behave towards Highlighted Values within the Scope matched by that Selector.", + "default": 0, + "type": "number", + "anyOf": [ + { + "const": 0, + "description": "Only non-highlighted value will be selected, even if a highlighted value exists." + }, + { + "const": 1, + "description": "Non-highlighted values are selected. If highlighted values exist, they are selected as well." + }, + { + "const": 2, + "description": "If a highlighted value exists, it's selected. Otherwise, the non-highlighted value is selected." + } + ] + }, + "hierarchyMatching": { + "description": "Describes how the selector matches hierarchy values.\nThis also changes how the query is generated for {@link DataViewScopeWildcard} selectors.\nNow those selectors can produce scopedValues for the level those match.\n\nThere are two ways that we can match values in the hierarchy:\n1.", + "default": "`HierarchyMatching.Full` - Only leaf levels are matched.\nUses the values array which exits only for the last level {@link DataViewMatrixNode.values }\n\n2. {@link `HierarchyMatching.Partial`} - Can match any specific level. Which works two different ways:\n\n- Getting the value from the subtotal if we match the whole hierarchy.\n\n- Getting the value from scoped values if match specific level {@link DataViewMatrixNode.nodeValues }.\n\n(Using {@link DataViewScopeWildcard }).", + "type": "number", + "anyOf": [ + { + "const": 0, + "description": "Only leaf levels are matched." + }, + { + "const": 1, + "description": "All levels are matched." + } + ] + }, + "order": { + "description": "Specifies a user-defined ordering of identical properties.\nSelector constructors should strive to monitonically increase this number across identical properties differing by id.", + "type": "number" + } + }, + "additionalProperties": false + }, + "DataRepetitionSelector": { + "type": "object", + "properties": { + "scopeId": { + "description": "Defines the intersection of scopes. For example - product color = red.", + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer" + }, + "wildcard": { + "description": "Defines a match against all instances of a given DataView scope. Does not match Subtotals.\nDeprecated: - Use roles instead.", + "type": "array", + "items": { + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer" + } + }, + "roles": { + "description": "Matches against all fields in a role.", + "type": "array", + "items": { + "type": "string" + } + }, + "total": { + "description": "Matches against the totals and subtotals.", + "type": "array", + "items": { + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer" + } + }, + "dataViewWildcard": { + "description": "Matches all instances or all totals or both.", + "$ref": "#/definitions/DataViewWildcard" + } + }, + "additionalProperties": false + }, + "DataViewWildcard": { + "type": "object", + "properties": { + "matchingOption": { + "$ref": "#/definitions/DataViewWildcardMatchingOption", + "description": "Defines the matching option to use." + } + }, + "additionalProperties": false, + "required": [ + "matchingOption" + ] + }, + "DataViewWildcardMatchingOption": { + "type": "number", + "anyOf": [ + { + "const": 0, + "description": "Match Identities and Totals (default)" + }, + { + "const": 1, + "description": "Match Instances with Identities only" + }, + { + "const": 2, + "description": "Match Totals only" + } + ] + } + } +} \ No newline at end of file diff --git a/fabric/item/report/definition/formattingObjectDefinitions/CHANGELOG.md b/fabric/item/report/definition/formattingObjectDefinitions/CHANGELOG.md index b3b88f47..dd44b905 100644 --- a/fabric/item/report/definition/formattingObjectDefinitions/CHANGELOG.md +++ b/fabric/item/report/definition/formattingObjectDefinitions/CHANGELOG.md @@ -1,5 +1,11 @@ # Formatting Object Definitions Versions +### 1.5.0 + +Released in: March 2026
+Notes: +- Updates the reference to the `semanticQuery` schema from `1.3.0` to `1.4.0` + ### 1.4.0 Released in: June 2025
diff --git a/fabric/item/report/definition/page/2.1.0/schema.json b/fabric/item/report/definition/page/2.1.0/schema.json new file mode 100644 index 00000000..a5569dc1 --- /dev/null +++ b/fabric/item/report/definition/page/2.1.0/schema.json @@ -0,0 +1,675 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/page/2.1.0/schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Page", + "description": "Defines a single 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/page/2.1.0/schema.json" + }, + "name": { + "description": "A unique identifier for the page across the whole report.", + "maxLength": 50, + "type": "string" + }, + "displayName": { + "description": "A user facing name for this page.", + "type": "string" + }, + "displayOption": { + "$ref": "#/definitions/PageDisplayOption", + "description": "Defines how the page is scaled." + }, + "height": { + "description": "Height of the page (in pixels) - optional only for 'DeprecatedDynamic' option, required otherwise.", + "type": "number" + }, + "width": { + "description": "Width of the page (in pixels) - optional only for 'DeprecatedDynamic' option, required otherwise.", + "type": "number" + }, + "filterConfig": { + "description": "Filters that apply to all the visuals on this page - on top of the filters defined for the whole report.", + "$ref": "../../filterConfiguration/1.3.0/schema-embedded.json" + }, + "pageBinding": { + "description": "Additional metadata defined for how this page is used (tooltip, drillthrough, etc).", + "$ref": "#/definitions/PageBinding" + }, + "objects": { + "description": "Defines the formatting for different objects on a page.", + "$ref": "#/definitions/PageFormattingObjects" + }, + "type": { + "description": "Specific usage of this page (for example drillthrough).", + "type": "string", + "anyOf": [ + { + "const": "Drillthrough", + "description": "Page to be used as drillthrough." + }, + { + "const": "Tooltip", + "description": "Page to be used as tooltip." + } + ] + }, + "visibility": { + "description": "Defines when this page should be visible - by default it is always visible.", + "type": "string", + "anyOf": [ + { + "const": "AlwaysVisible", + "description": "Page is always shown in the pages list" + }, + { + "const": "HiddenInViewMode", + "description": "Page is not visible when viewing report in View mode." + } + ] + }, + "visualInteractions": { + "description": "Defines how data point selection on a specific visual flow (as filters) to other visuals on the page.\nBy default it is up-to the visual to apply it either as a cross-highlight or as a filter.", + "type": "array", + "items": { + "$ref": "#/definitions/VisualInteraction" + } + }, + "autoPageGenerationConfig": { + "description": "Configuration that was used to automatically generate a page (for example using 'Auto create the report' option).", + "$ref": "#/definitions/AutoPageGenerationConfig" + }, + "annotations": { + "description": "Additional information to be saved (for example comments, readme, etc) for this page.", + "type": "array", + "items": { + "$ref": "#/definitions/Annotation" + } + }, + "howCreated": { + "description": "Source of creation of this page.", + "type": "string", + "anyOf": [ + { + "const": "Default", + "description": "Page is generated by user interaction." + }, + { + "const": "Copilot", + "description": "Page is created by copilot." + } + ] + } + }, + "additionalProperties": false, + "required": [ + "$schema", + "displayName", + "displayOption", + "name" + ], + "definitions": { + "PageDisplayOption": { + "type": "string", + "anyOf": [ + { + "const": "DeprecatedDynamic", + "description": "No dynamic page without width or height.\nDeprecated: Use other display options." + }, + { + "const": "FitToPage", + "description": "Page is scaled so both width and height fit on the current viewport." + }, + { + "const": "FitToWidth", + "description": "Only width is scaled to fit on the current viewport, height will be updated to maintain page aspect ratio." + }, + { + "const": "ActualSize", + "description": "No scaling is done - page is centered relative to the report canvas." + }, + { + "const": "ActualSizeTopLeft", + "description": "No scaling is done - page is anchored to top-left corder relative to the report canvas.\nDeprecated: Use ActualSize instead." + } + ] + }, + "PageBinding": { + "type": "object", + "properties": { + "name": { + "description": "Name of this binding - unique across the report.", + "type": "string" + }, + "type": { + "$ref": "#/definitions/BindingType", + "description": "Specific usage of this binding (for example drillthrough)." + }, + "referenceScope": { + "description": "What is the scope under which the binding applies.", + "default": "Default", + "type": "string", + "anyOf": [ + { + "const": "Default", + "description": "Scope is restricted to the report." + }, + { + "const": "CrossReport", + "description": "Scope is across reports - for cross-report drillthrough." + } + ] + }, + "parameters": { + "description": "Additional parameters to apply when the binding is invoked.", + "type": "array", + "items": { + "$ref": "#/definitions/BindingParameter" + } + }, + "acceptsFilterContext": { + "description": "Should additional filter context flow when applying the binding.", + "default": "Default", + "type": "string", + "anyOf": [ + { + "const": "Default", + "description": "Flows filter context" + }, + { + "const": "None", + "description": "Additional filter context does not flow to the binding." + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name", + "type" + ] + }, + "BindingType": { + "type": "string", + "anyOf": [ + { + "const": "Default", + "description": "No specific usage of this binding." + }, + { + "const": "Drillthrough", + "description": "Binding to be used as drillthrough." + }, + { + "const": "Tooltip", + "description": "Binding to be used as tooltip page." + } + ] + }, + "BindingParameter": { + "type": "object", + "properties": { + "name": { + "description": "Name of the parameter - unique across the report.", + "type": "string" + }, + "boundFilter": { + "description": "Name of the filter which this parameter affects.", + "type": "string" + }, + "asAggregation": { + "description": "The parameter should be applied when the field of the filter is aggregated.", + "type": "boolean" + }, + "qnaSingleSelectRequired": { + "description": "Exactly one instance value should be picked as a filter for this parameter.", + "type": "boolean" + }, + "fieldExpr": { + "description": "Field expression for page binding", + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer" + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + }, + "PageFormattingObjects": { + "type": "object", + "properties": { + "pageInformation": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/PageInformation", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "pageSize": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/PageSize", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/Background", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "displayArea": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/DisplayArea", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "outspace": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/Background", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "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.5.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" + ] + } + }, + "filterCard": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/FilterCard", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "pageRefresh": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/PageRefresh", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "personalizeVisual": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/PersonalizeVisual", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + } + }, + "additionalProperties": false + }, + "PageInformation": { + "type": "object", + "properties": { + "pageInformationName": {}, + "pageInformationQnaPodEnabled": {}, + "pageInformationAltName": {}, + "pageInformationType": {} + }, + "additionalProperties": false + }, + "PageSize": { + "type": "object", + "properties": { + "pageSizeTypes": {}, + "pageSizeWidth": {}, + "pageSizeHeight": {} + }, + "additionalProperties": false + }, + "Background": { + "type": "object", + "properties": { + "color": {}, + "image": {}, + "transparency": {} + }, + "additionalProperties": false + }, + "DisplayArea": { + "type": "object", + "properties": { + "verticalAlignment": {} + }, + "additionalProperties": false + }, + "OutspacePane": { + "type": "object", + "properties": { + "backgroundColor": {}, + "transparency": {}, + "foregroundColor": {}, + "titleSize": {}, + "searchTextSize": {}, + "headerSize": {}, + "fontFamily": {}, + "border": {}, + "borderColor": {}, + "checkboxAndApplyColor": {}, + "inputBoxColor": {}, + "width": {} + }, + "additionalProperties": false + }, + "FilterCard": { + "type": "object", + "properties": { + "backgroundColor": {}, + "transparency": {}, + "border": {}, + "borderColor": {}, + "foregroundColor": {}, + "textSize": {}, + "fontFamily": {}, + "inputBoxColor": {} + }, + "additionalProperties": false + }, + "PageRefresh": { + "type": "object", + "properties": { + "show": {}, + "refreshType": {}, + "duration": {}, + "dialogLauncher": {}, + "measure": {}, + "checkEvery": {} + }, + "additionalProperties": false + }, + "PersonalizeVisual": { + "type": "object", + "properties": { + "show": {}, + "perspectiveRef": {}, + "applyToAllPages": {} + }, + "additionalProperties": false + }, + "VisualInteraction": { + "type": "object", + "properties": { + "source": { + "description": "Visual name that will be the source of user interaction (selecting data point for example).", + "type": "string" + }, + "target": { + "description": "Visual name for the target of the interaction (selecting data point for example).", + "type": "string" + }, + "type": { + "$ref": "#/definitions/VisualInteractionFilterType", + "description": "How should the interaction flow from source to target visual (as highlights, as filter, none)." + } + }, + "additionalProperties": false, + "required": [ + "source", + "target", + "type" + ] + }, + "VisualInteractionFilterType": { + "type": "string", + "anyOf": [ + { + "const": "Default", + "description": "The target visual type determines if it should accept the interaction as a highlight or as a filter." + }, + { + "const": "DataFilter", + "description": "Data point selection is added as a filter to the target visual." + }, + { + "const": "HighlightFilter", + "description": "Data point selection is added as a highlight to the target visual." + }, + { + "const": "NoFilter", + "description": "Data point selection is ignored by the target visual." + } + ] + }, + "AutoPageGenerationConfig": { + "type": "object", + "properties": { + "selectedFields": { + "description": "Data fields to use for the auto page generation", + "type": "array", + "items": { + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer" + } + }, + "visualContainerConfigurations": { + "description": "Visuals already on the page previously generated by the auto-config", + "type": "array", + "items": { + "$ref": "#/definitions/QuickExploreVisualContainerConfig" + } + }, + "layout": { + "description": "The specific layout chosen to render the auto-visuals", + "$ref": "#/definitions/QuickExploreLayoutContainer" + } + }, + "additionalProperties": false, + "required": [ + "selectedFields", + "visualContainerConfigurations" + ] + }, + "QuickExploreVisualContainerConfig": { + "type": "object", + "properties": { + "name": { + "description": "Name of the visual - matches the name property in visual.json files", + "type": "string" + }, + "fields": { + "description": "Specific data fields used to build this visual from the full set of selected fields", + "type": "array", + "items": { + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer" + } + } + }, + "additionalProperties": false, + "required": [ + "fields", + "name" + ] + }, + "QuickExploreLayoutContainer": { + "type": "object", + "properties": { + "related": { + "description": "A layout that has 1 hero visual and some related visuals", + "$ref": "#/definitions/QuickExploreRelatedLayout" + }, + "combination": { + "description": "Layout that generates visuals purely based on combination of fields\nDeprecated: Use related layout instead.", + "$ref": "#/definitions/QuickExploreCombinationLayout" + } + }, + "additionalProperties": false + }, + "QuickExploreRelatedLayout": { + "type": "object", + "properties": { + "version": { + "default": 1, + "type": "number" + }, + "dataTableName": { + "description": "If data table is shown, then the name of that visual", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "version" + ] + }, + "QuickExploreCombinationLayout": { + "type": "object", + "properties": { + "version": { + "default": 1, + "type": "number" + }, + "dataTableName": { + "description": "If data table is shown, then the name of that visual", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "version" + ] + }, + "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" + ] + } + } +} \ No newline at end of file diff --git a/fabric/item/report/definition/page/CHANGELOG.md b/fabric/item/report/definition/page/CHANGELOG.md index 7d3391e1..14d5f8f6 100644 --- a/fabric/item/report/definition/page/CHANGELOG.md +++ b/fabric/item/report/definition/page/CHANGELOG.md @@ -1,6 +1,14 @@ # Page Versions -### 1.2.0 +### 2.1.0 + +Released in: March 2026
+Notes: +- Updates the reference to the `filterConfiguration` schema from `1.2.0` to `1.3.0` +- Updates the reference to the `formattingObjectDefinitions` schema from `1.4.0` to `1.5.0` +- Updates the reference to the `semanticQuery` schema from `1.3.0` to `1.4.0` + +### 2.0.0 Released in: June 2025
Notes: diff --git a/fabric/item/report/definition/report/3.2.0/schema.json b/fabric/item/report/definition/report/3.2.0/schema.json new file mode 100644 index 00000000..8c0a669a --- /dev/null +++ b/fabric/item/report/definition/report/3.2.0/schema.json @@ -0,0 +1,587 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/report/3.2.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.2.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.3.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.5.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.5.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 653187dd..1b156520 100644 --- a/fabric/item/report/definition/report/CHANGELOG.md +++ b/fabric/item/report/definition/report/CHANGELOG.md @@ -1,5 +1,12 @@ # Report Versions +### 3.2.0 + +Released in: March 2026
+Notes: +- Updates the reference to the `filterConfiguration` schema from `1.2.0` to `1.3.0` +- Updates the reference to the `formattingObjectDefinitions` schema from `1.4.0` to `1.5.0` + ### 3.1.0 Released in: January 2026
diff --git a/fabric/item/report/definition/semanticQuery/1.4.0/schema.json b/fabric/item/report/definition/semanticQuery/1.4.0/schema.json new file mode 100644 index 00000000..e028cf17 --- /dev/null +++ b/fabric/item/report/definition/semanticQuery/1.4.0/schema.json @@ -0,0 +1,1920 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/semanticQuery/1.4.0/schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Semantic Query", + "description": "Defines shared definitions for queries and filters.", + "definitions": { + "FilterDefinition": { + "description": "Defines a filter element as a partial query structure", + "type": "object", + "properties": { + "Version": { + "description": "Version of the query", + "type": "number", + "const": 2 + }, + "From": { + "description": "Set of tables from which the data will be picked.", + "type": "array", + "items": { + "$ref": "#/definitions/EntitySource" + } + }, + "Where": { + "description": "Set of filters to apply to the data.", + "type": "array", + "items": { + "$ref": "#/definitions/QueryFilter" + } + } + }, + "additionalProperties": false, + "required": [ + "From", + "Where" + ] + }, + "QueryFilter": { + "type": "object", + "properties": { + "Target": { + "description": "Set of expressions over which the condition applies. Applied to the set of all non-aggregate, non-measure expressions in the Select if not specified.", + "type": "array", + "items": { + "$ref": "#/definitions/QueryExpressionContainer" + } + }, + "Condition": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Condition to apply to the target. Must be an expression that evaluates to a boolean." + }, + "Annotations": { + "description": "Auxillary metadata for this filter.", + "type": "object", + "additionalProperties": {} + } + }, + "additionalProperties": false, + "required": [ + "Condition" + ] + }, + "QueryExpressionContainer": { + "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.", + "type": "object", + "properties": { + "Name": { + "description": "The name by which the expression can be referenced", + "type": "string" + }, + "NativeReferenceName": { + "description": "The name by which the expression can be referenced in native expressions.", + "type": "string" + }, + "Annotations": { + "description": "Auxiliary metadata for this expression.", + "type": "object", + "properties": { + "customTotalMetadata": { + "$ref": "#/definitions/QueryCustomTotalMetadata" + } + }, + "additionalProperties": {} + }, + "SourceRef": { + "description": "The SourceRef element contains an expression which is reference to a source table in the query or the data.", + "anyOf": [ + { + "$ref": "#/definitions/StandaloneSourceRefExpression" + }, + { + "$ref": "#/definitions/QuerySourceRefExpression" + } + ] + }, + "Column": { + "description": "The Column element contains an expression which is a reference to a column in a source table.", + "$ref": "#/definitions/QueryColumnExpression" + }, + "Measure": { + "description": "The Measure element contains an expression which is a reference to a measure in a source table.", + "$ref": "#/definitions/QueryMeasureExpression" + }, + "Min": { + "description": "The Min element contains an expression whose min aggregation needs to be computed.", + "$ref": "#/definitions/QueryMinExpression" + }, + "Max": { + "description": "The Max element contains an expression whose max aggregation needs to be computed.", + "$ref": "#/definitions/QueryMaxExpression" + }, + "Aggregation": { + "description": "The Aggregation element contains an expression which is an aggregation of an expression.", + "$ref": "#/definitions/QueryAggregationExpression" + }, + "Percentile": { + "description": "The Percentile element contains an expression which computes a percentile of an expression.", + "$ref": "#/definitions/QueryPercentileExpression" + }, + "Hierarchy": { + "description": "Hierarchy is an element which represents a reference to a hierarchy in a source table.", + "$ref": "#/definitions/QueryHierarchyExpression" + }, + "HierarchyLevel": { + "description": "HierarchyLevel is an element which represents a reference to a hierarchy level in a hierarchy.", + "$ref": "#/definitions/QueryHierarchyLevelExpression" + }, + "PropertyVariationSource": { + "description": "PropertyVariationSource is an element which represents a reference to a source of variations associated with a property.", + "$ref": "#/definitions/QueryPropertyVariationSourceExpression" + }, + "Subquery": { + "description": "Subquery is an element which holds a query.", + "$ref": "#/definitions/QuerySubqueryExpression" + }, + "Discretize": { + "description": "Transforms a continuous space of numerical values into a discrete space of numerical values.", + "$ref": "#/definitions/QueryDiscretizeExpression" + }, + "And": { + "description": "The And element contains an expression which represents an \"and\" between two expressions that evaluate to a boolean value.", + "$ref": "#/definitions/QueryBinaryExpression" + }, + "Between": { + "description": "The Between element contains an expression which is a comparison between an expression and two bounds.", + "$ref": "#/definitions/QueryBetweenExpression" + }, + "In": { + "description": "The In element contains an expression which is a comparison between an ordered list of expressions and a set of ordered lists of values.\nIf the tuple defined in Expressions matches any tuple defined in Values, then In returns true.", + "$ref": "#/definitions/QueryInExpression" + }, + "Or": { + "description": "The And element contains an expression which represents an \"or\" between two expressions that evaluate to a boolean value.", + "$ref": "#/definitions/QueryBinaryExpression" + }, + "Comparison": { + "description": "The Comparison element contains an expression which is a comparison between two expressions.", + "$ref": "#/definitions/QueryComparisonExpression" + }, + "Not": { + "description": "The Not element contains an expression which represents a \"not\" of an expression that evaluate to a boolean value.", + "$ref": "#/definitions/QueryNotExpression" + }, + "Contains": { + "description": "The Contains element contains an expression which is a \"contains\" comparison between two expressions.\nThe operation is case insensitive and accent sensitive.", + "$ref": "#/definitions/QueryContainsExpression" + }, + "StartsWith": { + "description": "The StartsWith element contains an expression which is a \"starts with\" comparison between two expressions.", + "$ref": "#/definitions/QueryStartsWithExpression" + }, + "Exists": { + "description": "The Exists element contains an expression which represents confirming the existence of at least one instance of an expression.", + "$ref": "#/definitions/QueryExistsExpression" + }, + "Literal": { + "description": "The Literal element contains an expression which is a literal value.", + "$ref": "#/definitions/QueryLiteralExpression" + }, + "DateSpan": { + "description": "The DateSpan element contains an expression which is a datespan calculation of an expression.\nA DateSpan can be compared directly to a Date via Comparison or Between.", + "$ref": "#/definitions/QueryDateSpanExpression" + }, + "DateAdd": { + "description": "The DateAdd element contains an expression which is a dateadd calculation of an expression.", + "$ref": "#/definitions/QueryDateAddExpression" + }, + "Now": { + "description": "The Now element contains an expression which returns the current date and time.", + "$ref": "#/definitions/QueryNowExpression" + }, + "DefaultValue": { + "description": "The DefaultValue element represents the model-defined default value for a column.\nIt may only be used as the Right expression in a Comparison expression with a ComparisonKind of Equal.", + "$ref": "#/definitions/QueryDefaultValueExpression" + }, + "AnyValue": { + "description": "The AnyValue element represents a wildcard value that will match any value in a column.\nIt may only be used as the Right expression in a Comparison expression with a ComparisonKind of Equal.", + "$ref": "#/definitions/QueryAnyValueExpression" + }, + "Arithmetic": { + "description": "The Arithmetic element contains an expression which is an arithmetic operation on two expressions.", + "$ref": "#/definitions/QueryArithmeticExpression" + }, + "Floor": { + "description": "The Floor element represents an operation to round the specified expression toward zero to a multiple of the specified size.", + "$ref": "#/definitions/QueryFloorExpression" + }, + "ScopedEval": { + "description": "ScopedEval is an element which evaluates an expression in a specified scope.", + "$ref": "#/definitions/QueryScopedEvalExpression" + }, + "FilteredEval": { + "description": "The FilteredEval element contains a set of filters to apply to the measure.", + "$ref": "#/definitions/QueryFilteredEvalExpression" + }, + "TransformTableRef": { + "description": "The TransformTableRef element contains an expression which is reference to a TransformTable in the query.", + "$ref": "#/definitions/QueryTransformTableRefExpression" + }, + "TransformOutputRoleRef": { + "description": "The TransformOutputRoleRef element contains an expression which is reference to a column produced by a Transform algorithm.\nThe reference is resolved by the Role attached to the output column by the transform.", + "$ref": "#/definitions/QueryTransformOutputRoleRefExpression" + }, + "SparklineData": { + "description": "Used to represent the data behind a sparkline. The data returned will be JSON formatted X/Y value pairs.", + "$ref": "#/definitions/QuerySparklineDataExpression" + }, + "NativeVisualCalculation": { + "description": "The NativeVisualCalculation element represents invocation of an expression defined using an expression in an underlying query language.\nThe expression should be invoked in the Visual Calculation Context for this query.", + "$ref": "#/definitions/QueryNativeVisualCalc" + }, + "FillRule": { + "description": "The FillRule element represents an operation to apply a dynamic fill operation.", + "$ref": "#/definitions/QueryFillRuleExpression" + }, + "GroupRef": { + "description": "The GroupRef element contains an expression which is a reference to a model grouping column.", + "$ref": "#/definitions/QueryGroupRefExpression" + }, + "ResourcePackageItem": { + "description": "The ResourcePackageItem element contains an expression which references a ResourcePackage item.", + "$ref": "#/definitions/QueryResourcePackageItem" + }, + "RoleRef": { + "description": "The RoleRef element contains an expression which is a reference to a named Role defined by a Visual.", + "$ref": "#/definitions/QueryRoleRefExpression" + }, + "SummaryValueRef": { + "description": "The SumaryValueRef element contains an expression which is a reference to a summary value in Insights Summary.", + "$ref": "#/definitions/QuerySummaryValueRefExpression" + }, + "AllRolesRef": { + "description": "The AllRolesRef element is used to reference all the roles in a visual.", + "$ref": "#/definitions/QueryAllRolesRefExpression" + }, + "SelectRef": { + "description": "The SelectRef element contains an expression which is a reference to a named item in the select clause of the query.", + "$ref": "#/definitions/QuerySelectRefExpression" + }, + "ThemeDataColor": { + "description": "The ThemeDataColor element represents an operation to select a color from a theme.", + "$ref": "#/definitions/QueryThemeDataColorExpression" + }, + "Conditional": { + "description": "The Conditional element represents an operation to select between several possible cases or an optional default.", + "$ref": "#/definitions/QueryConditionalExpression" + }, + "NativeMeasure": { + "description": "The NativeMeasure element represents invocation of a measure defined using an expression in an underlying query language.", + "$ref": "#/definitions/QueryNativeMeasure" + }, + "NativeColumn": { + "description": "The NativeColumn element represents invocation of a column defined using an expression in an underlying query language.", + "$ref": "#/definitions/QueryNativeColumn" + }, + "VisualTopN": { + "description": "The VisualTopN element represents a type of filter that limits the amount of data points returned in a query", + "$ref": "#/definitions/QueryVisualTopNExpression" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "SourceRef" + ] + }, + { + "required": [ + "Column" + ] + }, + { + "required": [ + "Measure" + ] + }, + { + "required": [ + "Min" + ] + }, + { + "required": [ + "Max" + ] + }, + { + "required": [ + "Aggregation" + ] + }, + { + "required": [ + "Percentile" + ] + }, + { + "required": [ + "Hierarchy" + ] + }, + { + "required": [ + "HierarchyLevel" + ] + }, + { + "required": [ + "PropertyVariationSource" + ] + }, + { + "required": [ + "Subquery" + ] + }, + { + "required": [ + "Discretize" + ] + }, + { + "required": [ + "And" + ] + }, + { + "required": [ + "Between" + ] + }, + { + "required": [ + "In" + ] + }, + { + "required": [ + "Or" + ] + }, + { + "required": [ + "Comparison" + ] + }, + { + "required": [ + "Not" + ] + }, + { + "required": [ + "Contains" + ] + }, + { + "required": [ + "StartsWith" + ] + }, + { + "required": [ + "Exists" + ] + }, + { + "required": [ + "Literal" + ] + }, + { + "required": [ + "DateSpan" + ] + }, + { + "required": [ + "DateAdd" + ] + }, + { + "required": [ + "Now" + ] + }, + { + "required": [ + "DefaultValue" + ] + }, + { + "required": [ + "AnyValue" + ] + }, + { + "required": [ + "Arithmetic" + ] + }, + { + "required": [ + "Floor" + ] + }, + { + "required": [ + "ScopedEval" + ] + }, + { + "required": [ + "FilteredEval" + ] + }, + { + "required": [ + "TransformTableRef" + ] + }, + { + "required": [ + "TransformOutputRoleRef" + ] + }, + { + "required": [ + "SparklineData" + ] + }, + { + "required": [ + "NativeVisualCalculation" + ] + }, + { + "required": [ + "FillRule" + ] + }, + { + "required": [ + "GroupRef" + ] + }, + { + "required": [ + "ResourcePackageItem" + ] + }, + { + "required": [ + "RoleRef" + ] + }, + { + "required": [ + "SummaryValueRef" + ] + }, + { + "required": [ + "AllRolesRef" + ] + }, + { + "required": [ + "SelectRef" + ] + }, + { + "required": [ + "ThemeDataColor" + ] + }, + { + "required": [ + "Conditional" + ] + }, + { + "required": [ + "NativeMeasure" + ] + }, + { + "required": [ + "NativeColumn" + ] + }, + { + "required": [ + "VisualTopN" + ] + } + ] + }, + "QueryVisualTopNExpression": { + "type": "object", + "properties": { + "ItemCount": { + "type": "number" + } + }, + "additionalProperties": false, + "required": [ + "ItemCount" + ] + }, + "QueryNativeColumn": { + "type": "object", + "properties": { + "DataType": { + "description": "The expected result data type of the native expression.", + "type": "number" + }, + "Expression": { + "description": "The expression to evaluate.", + "type": "string" + }, + "Language": { + "description": "The name of the underlying query language used to define Expression.", + "type": "string" + }, + "Source": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Defines the table that this column should be considered as part of." + }, + "ExpressionContentCache": { + "description": "Holds metadata about the expression content.", + "$ref": "#/definitions/QueryExpressionContentCache" + }, + "ProposedName": { + "description": "The preferred name that should be used if the expression needs to be associated with a name in order to be evaluated.", + "type": "string" + }, + "Format": { + "description": "The format string that should be applied to the result of evaluating the expression.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "DataType", + "Expression", + "Language", + "Source" + ] + }, + "QueryExpressionContentCache": { + "type": "object", + "properties": { + "Dependencies": { + "type": "array", + "items": { + "$ref": "#/definitions/QueryExpressionContainer" + } + }, + "UnrecognizedIdentifiers": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "QueryNativeMeasure": { + "type": "object", + "properties": { + "DataType": { + "description": "The expected result data type of the native expression.", + "type": "number" + }, + "Expression": { + "description": "The expression to evaluate.", + "type": "string" + }, + "Language": { + "description": "The name of the underlying query language used to define Expression.", + "type": "string", + "const": "dax" + }, + "ExpressionContentCache": { + "description": "Holds metadata about the expression content.", + "$ref": "#/definitions/QueryExpressionContentCache" + }, + "ProposedName": { + "description": "The preferred name that should be used if the expression needs to be associated with a name in order to be evaluated.", + "type": "string" + }, + "Format": { + "description": "The format string that should be applied to the result of evaluating the expression.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "DataType", + "Expression", + "Language" + ] + }, + "QueryConditionalExpression": { + "type": "object", + "properties": { + "Cases": { + "description": "Cases are considered in the specified order.\nThe result is the Case.Value of the first case where Case.Condition evaluates to true.\nIf no Case.Condition evaluates to true, the result is the DefaultValue, if DefaultValue is specified.\nOtherwise, the result is null.", + "type": "array", + "items": { + "$ref": "#/definitions/QueryCase" + } + }, + "DefaultValue": { + "description": "An optional value to return when no case evaluates to true.", + "$ref": "#/definitions/QueryExpressionContainer" + } + }, + "additionalProperties": false, + "required": [ + "Cases" + ] + }, + "QueryCase": { + "type": "object", + "properties": { + "Condition": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "An expression producing a boolean indicating whether or not to match this Case." + }, + "Value": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "An expression producing the result when this case is matched." + } + }, + "additionalProperties": false, + "required": [ + "Condition", + "Value" + ] + }, + "QueryThemeDataColorExpression": { + "type": "object", + "properties": { + "ColorId": { + "description": "The theme color to select.", + "type": "number" + }, + "Percent": { + "type": "number" + } + }, + "additionalProperties": false, + "required": [ + "ColorId", + "Percent" + ] + }, + "QuerySelectRefExpression": { + "type": "object", + "properties": { + "ExpressionName": { + "description": "The Name of the ExpressionContainer from Select of the QueryDefinition.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "ExpressionName" + ] + }, + "QueryAllRolesRefExpression": { + "type": "object", + "additionalProperties": false + }, + "QuerySummaryValueRefExpression": { + "type": "object", + "properties": { + "Name": { + "description": "The Name of the summary value within a summary template.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Name" + ] + }, + "QueryRoleRefExpression": { + "type": "object", + "properties": { + "Role": { + "description": "The Name of the desired Role within a Visual.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Role" + ] + }, + "QueryResourcePackageItem": { + "type": "object", + "properties": { + "PackageName": { + "description": "Identifies the ResourcePackage.", + "type": "string" + }, + "PackageType": { + "description": "Identifies the type of resource package.", + "type": "number" + }, + "ItemName": { + "description": "Identifies the item within the resource package", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "ItemName", + "PackageName", + "PackageType" + ] + }, + "QueryGroupRefExpression": { + "type": "object", + "properties": { + "GroupedColumns": { + "description": "The underlying columns for the desired grouping.", + "type": "array", + "items": { + "$ref": "#/definitions/QueryExpressionContainer" + } + }, + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Reference to the source table containing the property. Must be a SourceRef, PropertyVariationSource, or TransformTableRef expression." + }, + "Property": { + "description": "The name of the target property in the source.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "GroupedColumns", + "Property" + ] + }, + "QueryFillRuleExpression": { + "type": "object", + "properties": { + "Input": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "The expression providing the input value to the rule." + }, + "FillRule": { + "description": "Describes the algorithm, and associated parameters, needed to convert the Input into the desired fill." + } + }, + "additionalProperties": false, + "required": [ + "FillRule", + "Input" + ] + }, + "QueryNativeVisualCalc": { + "type": "object", + "properties": { + "Language": { + "description": "The name of the underlying query language that is used to define Expression (i.e., \"Dax\").", + "type": "string", + "const": "dax" + }, + "Expression": { + "description": "The expression to be evaluated.", + "type": "string" + }, + "Name": { + "description": "The name of the calculation", + "type": "string" + }, + "DataType": { + "description": "The data type of visual calculation", + "enum": [ + "Binary", + "Boolean", + "Date", + "DateTime", + "DateTimeZone", + "Decimal", + "Double", + "Duration", + "Integer", + "Json", + "None", + "Null", + "Text", + "Time", + "Variant" + ], + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "Language", + "Name" + ] + }, + "QuerySparklineDataExpression": { + "type": "object", + "properties": { + "Measure": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "The measure to compute sparkline data for." + }, + "Groupings": { + "description": "The granularity at which to evaluate the measure.", + "type": "array", + "items": { + "$ref": "#/definitions/QueryExpressionContainer" + } + }, + "PointsPerSparkline": { + "description": "Number of points per sparkline", + "type": "number", + "const": 52 + }, + "ApplyCalculationGroupTo": { + "description": "The granularity of the sparkline measure in the calculation group evaluation. This determines whether the\ncalculation group should apply to the entire sparkline or to each value of the sparkline. Defaults to entire\nsparkline (\"Sparkline\")", + "default": "Sparkline", + "type": "string", + "anyOf": [ + { + "const": "Sparkline" + }, + { + "const": "Point" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "Groupings", + "Measure" + ] + }, + "QueryTransformOutputRoleRefExpression": { + "type": "object", + "properties": { + "Role": { + "description": "The Role of the target column.", + "type": "string" + }, + "Transform": { + "description": "The Name of the target Transform. This must be omitted when used to define a column in the output table of a Transform.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Role" + ] + }, + "QueryTransformTableRefExpression": { + "type": "object", + "properties": { + "Source": { + "description": "The Name of the target table.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Source" + ] + }, + "QueryFilteredEvalExpression": { + "type": "object", + "properties": { + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "The expression over which the condition applies. Must be a scalar." + }, + "Filters": { + "description": "List of filters to apply to the measure.", + "type": "array", + "items": { + "$ref": "#/definitions/QueryFilter" + } + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "Filters" + ] + }, + "QueryScopedEvalExpression": { + "type": "object", + "properties": { + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Expression to evaluate in the new scope." + }, + "Scope": { + "description": "Set of expressions defining the new scope. These expressions can only be Columns.", + "type": "array", + "items": { + "$ref": "#/definitions/QueryExpressionContainer" + } + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "Scope" + ] + }, + "QueryFloorExpression": { + "type": "object", + "properties": { + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Expression to round" + }, + "Size": { + "description": "Describes the desired multiple for rounding.\n- TimeUnit is specified: the expression is rounded to a Size multiples of the specified TimeUnit.\n- TimeUnit is omitted: the expression is rounded to a multiple of Size.", + "type": "number" + }, + "TimeUnit": { + "description": "The desired unit of rounding for Date/Time values.", + "type": "number", + "anyOf": [ + { + "const": 0, + "description": "Day" + }, + { + "const": 1, + "description": "Week" + }, + { + "const": 2, + "description": "Month" + }, + { + "const": 3, + "description": "Year" + }, + { + "const": 4, + "description": "Decade" + }, + { + "const": 5, + "description": "Second" + }, + { + "const": 6, + "description": "Minute" + }, + { + "const": 7, + "description": "Hour" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "Size" + ] + }, + "QueryArithmeticExpression": { + "type": "object", + "properties": { + "Left": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "First operand expression" + }, + "Right": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Second operand expression" + }, + "Operator": { + "$ref": "#/definitions/ArithmeticOperatorKind", + "description": "The arithmetic operation to perform" + } + }, + "additionalProperties": false, + "required": [ + "Left", + "Operator", + "Right" + ] + }, + "ArithmeticOperatorKind": { + "type": "number", + "anyOf": [ + { + "const": 0, + "description": "Add" + }, + { + "const": 1, + "description": "Subtract" + }, + { + "const": 2, + "description": "Multiple" + }, + { + "const": 3, + "description": "Divide" + } + ] + }, + "QueryAnyValueExpression": { + "type": "object", + "properties": { + "DefaultValueOverridesAncestors": { + "description": "When true, any interaction with the a model-specified default value override results in all attribute relationship path ancestors being overridden.", + "type": "boolean" + } + }, + "additionalProperties": false + }, + "QueryDefaultValueExpression": { + "type": "object", + "additionalProperties": false + }, + "QueryNowExpression": { + "type": "object", + "additionalProperties": false + }, + "QueryDateAddExpression": { + "type": "object", + "properties": { + "Amount": { + "description": "Number of units to add to the date.", + "type": "number" + }, + "TimeUnit": { + "$ref": "#/definitions/TimeUnit", + "description": "Unit of time to add to the date." + }, + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Expression to which to add." + } + }, + "additionalProperties": false, + "required": [ + "Amount", + "Expression", + "TimeUnit" + ] + }, + "TimeUnit": { + "type": "number", + "anyOf": [ + { + "const": 0, + "description": "Day" + }, + { + "const": 1, + "description": "Week" + }, + { + "const": 2, + "description": "Month" + }, + { + "const": 3, + "description": "Year" + }, + { + "const": 4, + "description": "Decade" + }, + { + "const": 5, + "description": "Second" + }, + { + "const": 6, + "description": "Minute" + }, + { + "const": 7, + "description": "Hour" + } + ] + }, + "QueryDateSpanExpression": { + "type": "object", + "properties": { + "TimeUnit": { + "$ref": "#/definitions/TimeUnit", + "description": "Unit of time used for datespan function." + }, + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Expression to which to apply the datespan function." + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "TimeUnit" + ] + }, + "QueryLiteralExpression": { + "type": "object", + "properties": { + "Value": { + "description": "The value of the literal.\n- Boolean: \"true\"\n- DateTime: \"datetime'YYYY-MM-DDThh:mm:ss.ffffff\"\n- Decimal: \"2.4M\"\n- Double: \"2.4D\"\n- Integer: \"24L\"\n- Number: \"\"\n- Null: \"null\"\n- String: \"some string value\"", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Value" + ] + }, + "QueryExistsExpression": { + "type": "object", + "properties": { + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Expression to verify there exists at least one instance of. Must be a SourceRef expression." + } + }, + "additionalProperties": false, + "required": [ + "Expression" + ] + }, + "QueryStartsWithExpression": { + "type": "object", + "properties": { + "Left": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "First expression to which to apply the operator." + }, + "Right": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Second expression to which to apply the operator." + } + }, + "additionalProperties": false, + "required": [ + "Left", + "Right" + ] + }, + "QueryContainsExpression": { + "type": "object", + "properties": { + "Left": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "First expression to which to apply the operator." + }, + "Right": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Second expression to which to apply the operator." + } + }, + "additionalProperties": false, + "required": [ + "Left", + "Right" + ] + }, + "QueryNotExpression": { + "type": "object", + "properties": { + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Expression to negate. Must be an expression that evaluates to a boolean value." + } + }, + "additionalProperties": false, + "required": [ + "Expression" + ] + }, + "QueryComparisonExpression": { + "type": "object", + "properties": { + "ComparisonKind": { + "$ref": "#/definitions/QueryComparisonKind", + "description": "Type of the comparison." + }, + "Left": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "First expression to which to apply the operator." + }, + "Right": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Second expression to which to apply the operator." + } + }, + "additionalProperties": false, + "required": [ + "ComparisonKind", + "Left", + "Right" + ] + }, + "QueryComparisonKind": { + "type": "number", + "anyOf": [ + { + "const": 0, + "description": "Equal" + }, + { + "const": 1, + "description": "GreaterThan" + }, + { + "const": 2, + "description": "GreaterThanOrEqual" + }, + { + "const": 3, + "description": "LessThan" + }, + { + "const": 4, + "description": "LessThanOrEqual" + } + ] + }, + "QueryBinaryExpression": { + "type": "object", + "properties": { + "Left": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "First expression to which to apply the operator." + }, + "Right": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Second expression to which to apply the operator." + } + }, + "additionalProperties": false, + "required": [ + "Left", + "Right" + ] + }, + "QueryInExpression": { + "type": "object", + "properties": { + "Expressions": { + "description": "The tuple of expressions to compare.", + "type": "array", + "items": { + "$ref": "#/definitions/QueryExpressionContainer" + } + }, + "Values": { + "description": "The tuples of values to compare with the expressions.", + "type": "array", + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/QueryExpressionContainer" + } + } + }, + "Table": { + "description": "An expression, which must be a SourceRef, holding a table to compare against the Expressions.\nThe number of columns in the table must match the number of Expressions.\nEach row in the table is considered a tuple to be matched against the expressions.", + "$ref": "#/definitions/QueryExpressionContainer" + } + }, + "additionalProperties": false, + "required": [ + "Expressions" + ] + }, + "QueryBetweenExpression": { + "type": "object", + "properties": { + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Expression to compare." + }, + "LowerBound": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Lower (inclusive) bound for the value of the expression." + }, + "UpperBound": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Upper (inclusive) bound for the value of the expression." + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "LowerBound", + "UpperBound" + ] + }, + "QueryDiscretizeExpression": { + "type": "object", + "properties": { + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "The expression to be discretized." + }, + "Count": { + "description": "The number of discrete values to result from the transformation.", + "type": "number" + } + }, + "additionalProperties": false, + "required": [ + "Count", + "Expression" + ] + }, + "QuerySubqueryExpression": { + "type": "object", + "properties": { + "Query": { + "$ref": "#/definitions/QueryDefinition", + "description": "The query to evaluate." + } + }, + "additionalProperties": false, + "required": [ + "Query" + ] + }, + "QueryDefinition": { + "description": "Defines a query to be executed.", + "type": "object", + "properties": { + "Version": { + "description": "Version of the query", + "type": "number", + "const": 2 + }, + "From": { + "description": "Set of tables from which the data will be picked.", + "type": "array", + "items": { + "$ref": "#/definitions/EntitySource" + } + }, + "Where": { + "description": "Set of filters to apply to the data.", + "type": "array", + "items": { + "$ref": "#/definitions/QueryFilter" + } + }, + "OrderBy": { + "description": "List of expressions over which to sort the results.", + "type": "array", + "items": { + "$ref": "#/definitions/QuerySortClause" + } + }, + "Select": { + "description": "List of expressions to display in the results.", + "type": "array", + "items": { + "$ref": "#/definitions/QueryExpressionContainer" + } + }, + "VisualShape": { + "description": "Provides metadata information about the structure and state of the visualization.", + "type": "array", + "items": { + "$ref": "#/definitions/Axis" + } + }, + "GroupBy": { + "description": "List of expressions that represent the items to group by.\nThese additional groupings can be columns that we don't project or entity tables.", + "type": "array", + "items": { + "$ref": "#/definitions/QueryExpressionContainer" + } + }, + "Transform": { + "description": "List of table manipulation operations to apply within the query.", + "type": "array", + "items": { + "$ref": "#/definitions/QueryTransform" + } + }, + "Top": { + "description": "When specified, the query will return up to the specified number of rows based on the specified OrderBy.", + "type": "number" + } + }, + "additionalProperties": false, + "required": [ + "From", + "Select" + ] + }, + "QueryTransform": { + "type": "object", + "properties": { + "Name": { + "description": "The name used to refer to this transform in other parts of the query.\nThis name must be unique across all other Transform.Name values in this query.", + "type": "string" + }, + "Algorithm": { + "description": "The algorithm to apply.", + "type": "string" + }, + "Input": { + "$ref": "#/definitions/QueryTransformInput", + "description": "Describes the information needed to invoke the transform." + }, + "Output": { + "$ref": "#/definitions/QueryTransformOutput", + "description": "Describes the expected results from the invoked transform." + } + }, + "additionalProperties": false, + "required": [ + "Algorithm", + "Input", + "Name", + "Output" + ] + }, + "QueryTransformOutput": { + "type": "object", + "properties": { + "Table": { + "description": "The structure of the data produced by the transform.", + "$ref": "#/definitions/QueryTransformTable" + } + }, + "additionalProperties": false + }, + "QueryTransformTable": { + "type": "object", + "properties": { + "Name": { + "description": "Name by which the transform is referenced in the query.\nThis name must be unique across all other TransformTable.Name values in the query.", + "type": "string" + }, + "Columns": { + "description": "The columns that make up this table.", + "type": "array", + "items": { + "$ref": "#/definitions/QueryTransformTableColumn" + } + } + }, + "additionalProperties": false, + "required": [ + "Columns", + "Name" + ] + }, + "QueryTransformTableColumn": { + "type": "object", + "properties": { + "Role": { + "description": "An arbitrary string used to identify this column to the transform algorithm. Role may not be unique.", + "type": "string" + }, + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "The expression defining this column. ExpressionContainer.Name property defines the name of the column.\nExpressionContainer.Name is required and must be unique across all other columns in this table." + } + }, + "additionalProperties": false, + "required": [ + "Expression" + ] + }, + "QueryTransformInput": { + "type": "object", + "properties": { + "Parameters": { + "description": "Parameters to be supplied when invoking the algorithm", + "type": "array", + "items": { + "$ref": "#/definitions/QueryExpressionContainer" + } + }, + "Table": { + "description": "The structure of the table of data passed to the transform.", + "$ref": "#/definitions/QueryTransformTable" + } + }, + "additionalProperties": false, + "required": [ + "Parameters" + ] + }, + "Axis": { + "type": "object", + "properties": { + "Groups": { + "description": "Ordered list of hierarchical groupings in this axis.", + "type": "array", + "items": { + "$ref": "#/definitions/AxisGroup" + } + }, + "Name": { + "description": "Name by which the axis is referenced in the query.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Groups", + "Name" + ] + }, + "AxisGroup": { + "type": "object", + "properties": { + "Keys": { + "description": "List of expressions that define the keys of this group.", + "type": "array", + "items": { + "$ref": "#/definitions/QueryExpressionContainer" + } + }, + "Subtotal": { + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "Keys", + "Subtotal" + ] + }, + "QuerySortClause": { + "type": "object", + "properties": { + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Expression over which to sort the results." + }, + "Direction": { + "$ref": "#/definitions/SortDirection", + "description": "Indicates the direction to sort." + } + }, + "additionalProperties": false, + "required": [ + "Direction", + "Expression" + ] + }, + "SortDirection": { + "type": "number", + "anyOf": [ + { + "const": 1, + "description": "Ascending" + }, + { + "const": 2, + "description": "Descending" + } + ] + }, + "EntitySource": { + "type": "object", + "properties": { + "Name": { + "description": "Name by which the table is referenced in the query", + "type": "string" + }, + "Entity": { + "description": "Reference name of the table in the data.", + "type": "string" + }, + "Schema": { + "description": "Identifier for the schema which contains the entity source. This can be omitted if the Schema name is the default.", + "type": "string" + }, + "Expression": { + "description": "An expression that produces a table. Mandatory if Type is Expression.", + "$ref": "#/definitions/QueryExpressionContainer" + }, + "Type": { + "description": "Type of entity source - defaults to Table (0)", + "default": 0, + "type": "number", + "anyOf": [ + { + "const": 0, + "description": "The EntitySource is a reference to a table in the underlying model." + }, + { + "const": 1, + "description": "The EntitySource is a presentation data object such as a report page or visual." + }, + { + "const": 2, + "description": "The EntitySource is a table produced by the specified expression." + } + ] + } + }, + "additionalProperties": false, + "required": [ + "Name" + ] + }, + "QueryPropertyVariationSourceExpression": { + "type": "object", + "properties": { + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Reference to the source property containing the property variation source. Must be a SourceRef expression." + }, + "Name": { + "description": "The name of the target variation source in the property.", + "type": "string" + }, + "Property": { + "description": "The name of the target property in the SourceRef.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "Name", + "Property" + ] + }, + "QueryHierarchyLevelExpression": { + "type": "object", + "properties": { + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Reference to the hierarchy containing the level. Must be a Hierarchy expression." + }, + "Level": { + "description": "The name of the target level in the hierarchy.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "Level" + ] + }, + "QueryHierarchyExpression": { + "type": "object", + "properties": { + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Reference to the source table containing the hierarchy. Must be a SourceRef or a PropertyVariationSource expression." + }, + "Hierarchy": { + "description": "The name of the target hierarchy in the source.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "Hierarchy" + ] + }, + "QueryPercentileExpression": { + "type": "object", + "properties": { + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "The expression to be evaluated for the percentile." + }, + "K": { + "description": "The desired percentile value.\n- Exclusive is true: K must be between 0 and 1, exclusive.\n- Exclusive is false: K must be between 0 and 1, inclusive.", + "type": "number" + }, + "Exclusive": { + "description": "Indicates whether an inclusive or exclusive percentile should be computed.", + "default": false, + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "K" + ] + }, + "QueryAggregationExpression": { + "type": "object", + "properties": { + "Function": { + "$ref": "#/definitions/QueryAggregateFunction", + "description": "Type of the aggregation." + }, + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Expression to aggregate." + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "Function" + ] + }, + "QueryAggregateFunction": { + "type": "number", + "anyOf": [ + { + "const": 0, + "description": "Sum" + }, + { + "const": 1, + "description": "Average" + }, + { + "const": 2, + "description": "Distinct count" + }, + { + "const": 3, + "description": "Min" + }, + { + "const": 4, + "description": "Max" + }, + { + "const": 5, + "description": "Count number of non-null values" + }, + { + "const": 6, + "description": "Median" + }, + { + "const": 7, + "description": "StandardDeviation" + }, + { + "const": 8, + "description": "Variance" + } + ] + }, + "QueryMaxExpression": { + "type": "object", + "properties": { + "IncludeAllTypes": { + "$ref": "#/definitions/IncludeAllTypes", + "description": "Defines how variant types should be treated." + }, + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Expression whose min will be computed." + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "IncludeAllTypes" + ] + }, + "IncludeAllTypes": { + "description": "Argument for QueryMinExpression and QueryMaxExpression to decide behavior for variant types.", + "type": "number", + "anyOf": [ + { + "const": 0, + "description": "Exclude non-numeric types if the Expression returns mixed typed values." + }, + { + "const": 1, + "description": "Include non-numeric types if the Expression returns mixed typed values if the model supports it. otherwise, fallback to Default behavior." + }, + { + "const": 2, + "description": "Include non-numeric types if the Expression returns mixed typed value. raise an error if the model does not support this." + } + ] + }, + "QueryMinExpression": { + "type": "object", + "properties": { + "IncludeAllTypes": { + "$ref": "#/definitions/IncludeAllTypes", + "description": "Defines how variant types should be treated." + }, + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Expression whose min will be computed." + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "IncludeAllTypes" + ] + }, + "QueryMeasureExpression": { + "type": "object", + "properties": { + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Reference to the source table containing the property. Must be a SourceRef, PropertyVariationSource, or TransformTableRef expression." + }, + "Property": { + "description": "The name of the target property in the source.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "Property" + ] + }, + "QueryColumnExpression": { + "type": "object", + "properties": { + "Expression": { + "$ref": "#/definitions/QueryExpressionContainer", + "description": "Reference to the source table containing the property. Must be a SourceRef, PropertyVariationSource, or TransformTableRef expression." + }, + "Property": { + "description": "The name of the target property in the source.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "Property" + ] + }, + "QuerySourceRefExpression": { + "type": "object", + "properties": { + "Source": { + "description": "Name of the source table in a query.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Source" + ] + }, + "StandaloneSourceRefExpression": { + "type": "object", + "properties": { + "Schema": { + "description": "The name of the schema containing the referenced entity - can be omitted if optional.", + "type": "string" + }, + "Entity": { + "description": "Name of the referenced entity from your data.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Entity" + ] + }, + "QueryCustomTotalMetadata": { + "description": "Metadata for custom total calculations. Used to differentiate custom total calculations from normal visual calculations, enabling operations that need to identify which column a custom total belongs to.", + "type": "object", + "properties": { + "baseQueryName": { + "description": "The query name of the base column that this custom total references. This establishes the relationship between a custom total and the column it refers to.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "baseQueryName" + ] + } + } +} \ No newline at end of file diff --git a/fabric/item/report/definition/semanticQuery/CHANGELOG.md b/fabric/item/report/definition/semanticQuery/CHANGELOG.md index 93fe912b..a4d9029e 100644 --- a/fabric/item/report/definition/semanticQuery/CHANGELOG.md +++ b/fabric/item/report/definition/semanticQuery/CHANGELOG.md @@ -1,5 +1,11 @@ # Semantic Query Versions +### 1.4.0 + +Released in: March 2025
+Notes: +- Added `QueryCustomTotalMetadata` definition to support custom totals for Table and Matrix visuals + ### 1.3.0 Released in: June 2025
diff --git a/fabric/item/report/definition/visualConfiguration/2.3.0/schema-embedded.json b/fabric/item/report/definition/visualConfiguration/2.3.0/schema-embedded.json new file mode 100644 index 00000000..287012c6 --- /dev/null +++ b/fabric/item/report/definition/visualConfiguration/2.3.0/schema-embedded.json @@ -0,0 +1,935 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/visualConfiguration/2.3.0/schema.embedded.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Visual configuration", + "description": "Defines the configuration of visuals.", + "type": "object", + "properties": { + "visualType": { + "description": "Name of the visual.", + "type": "string" + }, + "autoSelectVisualType": { + "description": "VisualType is automatically picked by the system based on the data used in the visual.", + "type": "boolean" + }, + "query": { + "description": "Defines the data to be plotted in the visual.", + "$ref": "#/definitions/Query" + }, + "expansionStates": { + "description": "Defines the specific data points that are expanded.", + "type": "array", + "items": { + "$ref": "#/definitions/ExpansionState" + } + }, + "objects": { + "description": "Specifies the formatting to be set for different \"objects\" of the visual.", + "$ref": "../../formattingObjectDefinitions/1.5.0/schema.json#/definitions/DataViewObjectDefinitions" + }, + "visualContainerObjects": { + "description": "Specifies the formatting to be set for different \"objects\" of the container.", + "$ref": "#/definitions/VisualContainerFormattingObjects" + }, + "syncGroup": { + "description": "Defines the sync group that this visual is part of.\nOnly applies to slicer visuals.", + "$ref": "#/definitions/VisualSyncGroup" + }, + "drillFilterOtherVisuals": { + "description": "When another visual is drilled, if visual interactions are enabled between the two visuals,\nthen this property specifies if that drill should be applied as a filter to this visual.\nOverrides the default setting of the report.", + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "visualType" + ], + "definitions": { + "Query": { + "type": "object", + "properties": { + "sortDefinition": { + "description": "Defines how the data should be sorted in a visual", + "$ref": "#/definitions/SortDefinition" + }, + "options": { + "description": "Specific options to apply when running the query. Applies to certain visuals only.", + "$ref": "#/definitions/VisualQueryOptions" + }, + "queryState": { + "description": "Describes how the data should be arranged and used in the visual.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ProjectionState" + } + }, + "isDrillDisabled": { + "description": "Should drill be allowed in the visual - only used by specific custom visuals.", + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "queryState" + ] + }, + "SortDefinition": { + "type": "object", + "properties": { + "sort": { + "description": "Defines the fields the data is sorted by.", + "type": "array", + "items": { + "$ref": "#/definitions/QuerySort" + } + }, + "isDefaultSort": { + "description": "If the sort if explicitly set by user, then this will be false, Power BI can update the sort to match\nthe visual in this case.", + "type": "boolean" + } + }, + "additionalProperties": false + }, + "QuerySort": { + "type": "object", + "properties": { + "field": { + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer", + "description": "Field to sort by" + }, + "direction": { + "$ref": "#/definitions/SortDirection", + "description": "Direction of sort - ascending or descending." + } + }, + "additionalProperties": false, + "required": [ + "direction", + "field" + ] + }, + "SortDirection": { + "type": "string", + "anyOf": [ + { + "const": "Ascending", + "description": "Sort smallest to biggest." + }, + { + "const": "Descending", + "description": "Sort biggest to smallest." + } + ] + }, + "VisualQueryOptions": { + "type": "object", + "properties": { + "allowBinnedLineSample": { + "description": "A better sampling for line charts.", + "type": "boolean" + }, + "allowOverlappingPointsSample": { + "description": "A better sampling for scatter charts.", + "type": "boolean" + } + }, + "additionalProperties": false + }, + "ProjectionState": { + "type": "object", + "properties": { + "showAll": { + "description": "Show all values for all fields in this projection.", + "type": "boolean" + }, + "projections": { + "description": "Defines the fields and their properties for this visual role.", + "type": "array", + "items": { + "$ref": "#/definitions/RoleProjection" + } + }, + "fieldParameters": { + "description": "Defines any field parameters used as projections.", + "type": "array", + "items": { + "$ref": "#/definitions/RoleFieldParameter" + } + } + }, + "additionalProperties": false, + "required": [ + "projections" + ] + }, + "RoleProjection": { + "type": "object", + "properties": { + "field": { + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer", + "description": "The data field from the semantic model." + }, + "queryRef": { + "description": "A unique name for this field - unique per visual.", + "type": "string" + }, + "nativeQueryRef": { + "description": "Native reference name for this field - unique per visual, used for referencing fields in visual calculations.", + "type": "string" + }, + "displayName": { + "description": "An override for display name - by default it is the field name in the semantic model.", + "type": "string" + }, + "format": { + "description": "format string scoped to the visual.", + "maxLength": 255, + "type": "string" + }, + "active": { + "description": "Is the field currently active in the visual - used as part of drill operations.", + "type": "boolean" + }, + "hidden": { + "description": "Is the field visible in the visual - used as part of visual calculations.", + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "field", + "queryRef" + ] + }, + "RoleFieldParameter": { + "type": "object", + "properties": { + "parameterExpr": { + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer", + "description": "Defines the parameter field.\nThis contains the DAX expression (in semantic model) that defines what fields will be projected in the field well from the parameter." + }, + "index": { + "description": "Index at which parameter fields begin in the projections list.\nThis represents the position in the field well where the field parameter is located.\nA field well can contain either projections or field parameters.\nWhen this index is changed, it affects where the field parameter's projected fields will be inserted\nin the projections list.", + "type": "number" + }, + "length": { + "description": "Number of projections that will be populated starting from the field parameter's index position.\nThis indicates how many fields the parameter will project into when evaluated.\n\nThis value will be re-computed when the parameter is evaluated, which is when the visual is rendered.", + "minLength": 0, + "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:\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": "string", + "anyOf": [ + { + "const": "Ascending", + "description": "Sort smallest to biggest." + }, + { + "const": "Descending", + "description": "Sort biggest to smallest." + } + ] + } + }, + "additionalProperties": false, + "required": [ + "index", + "parameterExpr" + ] + }, + "ExpansionState": { + "type": "object", + "properties": { + "roles": { + "description": "Visual roles (projection names) that have individual points expanded.", + "type": "array", + "items": { + "type": "string" + } + }, + "root": { + "description": "Defines the specific values that are expanded for each field in the hierarchy", + "$ref": "#/definitions/RootExpansionState" + }, + "levels": { + "description": "Describes the fields participating in the expansion", + "type": "array", + "items": { + "$ref": "#/definitions/LevelExpansionState" + } + } + }, + "additionalProperties": false, + "required": [ + "roles" + ] + }, + "RootExpansionState": { + "type": "object", + "properties": { + "identityValues": { + "description": "Describes the instances that are expanded.\nOptional for the root expansion state.\nMust by Literal expressions.", + "type": "array", + "items": { + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer" + } + }, + "isToggled": { + "description": "True if the value is expanded.", + "default": false, + "type": "boolean" + }, + "children": { + "description": "Child values in the hierarchy that are expanded", + "type": "array", + "items": { + "$ref": "#/definitions/NodeExpansionState" + } + } + }, + "additionalProperties": false + }, + "NodeExpansionState": { + "type": "object", + "properties": { + "identityValues": { + "description": "Describes the instances that are expanded.\nMust by Literal expressions.", + "type": "array", + "items": { + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer" + } + }, + "isToggled": { + "description": "True if the value is expanded.", + "default": false, + "type": "boolean" + }, + "children": { + "description": "Child values in the hierarchy that are expanded", + "type": "array", + "items": { + "$ref": "#/definitions/NodeExpansionState" + } + } + }, + "additionalProperties": false, + "required": [ + "identityValues" + ] + }, + "LevelExpansionState": { + "type": "object", + "properties": { + "identityKeys": { + "description": "Describes the fields in the visual.", + "type": "array", + "items": { + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer" + } + }, + "isCollapsed": { + "description": "True if the entire field isn't expanded (i.e. false if only specific instances are expanded).", + "type": "boolean" + }, + "queryRefs": { + "description": "Which fields in the query does this relate to - must match a queryRef in the query.", + "type": "array", + "items": { + "type": "string" + } + }, + "isPinned": { + "description": "Is the field pinned.", + "type": "boolean" + }, + "isLocked": { + "description": "Is the field locked (used for decomposition tree)", + "type": "boolean" + }, + "AIInformation": { + "description": "More information about how the expansion is done (used for decomposition tree)", + "$ref": "#/definitions/AILevelInformation" + } + }, + "additionalProperties": false, + "required": [ + "queryRefs" + ] + }, + "AILevelInformation": { + "type": "object", + "properties": { + "method": { + "$ref": "#/definitions/AIDecompositionMethod", + "description": "Type of expansion." + }, + "disabled": { + "description": "Is the level disabled.", + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "method" + ] + }, + "AIDecompositionMethod": { + "enum": [ + "BestSplit", + "MaxSplit", + "MinSplit" + ], + "type": "string" + }, + "VisualContainerFormattingObjects": { + "type": "object", + "properties": { + "title": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/Title", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "subTitle": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/SubTitle", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "divider": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/Divider", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "spacing": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/Spacing", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/Background", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "padding": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/Padding", + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/VisualContainerGeneralFormattingObjects", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "border": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/Border", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "dropShadow": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/DropShadow", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "visualLink": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/VisualLink", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "visualTooltip": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/VisualTooltip", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "stylePreset": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/StylePreset", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "visualHeader": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/VisualHeader", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "visualHeaderTooltip": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/VisualHeaderTooltip", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + } + }, + "additionalProperties": false + }, + "Title": { + "type": "object", + "properties": { + "show": {}, + "text": {}, + "heading": {}, + "titleWrap": {}, + "fontColor": {}, + "background": {}, + "alignment": {}, + "fontSize": {}, + "bold": {}, + "italic": {}, + "underline": {}, + "fontFamily": {} + }, + "additionalProperties": false + }, + "SubTitle": { + "type": "object", + "properties": { + "show": {}, + "text": {}, + "heading": {}, + "titleWrap": {}, + "fontColor": {}, + "alignment": {}, + "fontSize": {}, + "bold": {}, + "italic": {}, + "underline": {}, + "fontFamily": {} + }, + "additionalProperties": false + }, + "Divider": { + "type": "object", + "properties": { + "ignorePadding": {}, + "show": {}, + "color": {}, + "width": {}, + "style": {} + }, + "additionalProperties": false + }, + "Spacing": { + "type": "object", + "properties": { + "customizeSpacing": {}, + "verticalSpacing": {}, + "spaceBelowTitle": {}, + "spaceBelowSubTitle": {}, + "spaceBelowTitleArea": {} + }, + "additionalProperties": false + }, + "Background": { + "type": "object", + "properties": { + "show": {}, + "color": {}, + "transparency": {} + }, + "additionalProperties": false + }, + "Padding": { + "type": "object", + "properties": { + "top": {}, + "bottom": {}, + "left": {}, + "right": {} + }, + "additionalProperties": false + }, + "LockAspect": { + "type": "object", + "properties": { + "show": {} + }, + "additionalProperties": false + }, + "VisualContainerGeneralFormattingObjects": { + "type": "object", + "properties": { + "x": {}, + "y": {}, + "width": {}, + "height": {}, + "altText": {}, + "allowBinnedLineSample": {}, + "allowOverlappingPointsSample": {}, + "keepLayerOrder": {} + }, + "additionalProperties": false + }, + "Border": { + "type": "object", + "properties": { + "show": {}, + "color": {}, + "radius": {}, + "width": {} + }, + "additionalProperties": false + }, + "DropShadow": { + "type": "object", + "properties": { + "show": {}, + "preset": {}, + "position": {}, + "color": {}, + "transparency": {}, + "shadowSpread": {}, + "shadowBlur": {}, + "angle": {}, + "shadowDistance": {} + }, + "additionalProperties": false + }, + "VisualLink": { + "type": "object", + "properties": { + "show": {}, + "type": {}, + "bookmark": {}, + "disabledTooltip": {}, + "drillthroughSection": {}, + "enabledTooltip": {}, + "qna": {}, + "suppressDefaultTooltip": {}, + "showDefaultTooltip": {}, + "navigationSection": {}, + "tooltip": {}, + "tooltipPlaceholderText": {}, + "webUrl": {}, + "dataFunction": {} + }, + "additionalProperties": false + }, + "VisualTooltip": { + "type": "object", + "properties": { + "show": {}, + "type": {}, + "section": {}, + "titleFontColor": {}, + "valueFontColor": {}, + "fontSize": {}, + "bold": {}, + "italic": {}, + "underline": {}, + "fontFamily": {}, + "background": {}, + "transparency": {}, + "actionFontColor": {}, + "themedTitleFontColor": {}, + "themedBackground": {}, + "themedValueFontColor": {} + }, + "additionalProperties": false + }, + "StylePreset": { + "type": "object", + "properties": { + "name": {} + }, + "additionalProperties": false + }, + "VisualHeader": { + "type": "object", + "properties": { + "show": {}, + "background": {}, + "border": {}, + "transparency": {}, + "foreground": {}, + "showVisualInformationButton": {}, + "showVisualWarningButton": {}, + "showVisualErrorButton": {}, + "showDrillRoleSelector": {}, + "showDrillUpButton": {}, + "showDrillToggleButton": {}, + "showDrillDownLevelButton": {}, + "showDrillDownExpandButton": {}, + "showPinButton": {}, + "showFilterRestatementButton": {}, + "showFocusModeButton": {}, + "showCopyVisualImageButton": {}, + "showSeeDataLayoutToggleButton": {}, + "showOptionsMenu": {}, + "showCommentButton": {}, + "showTooltipButton": {}, + "showPersonalizeVisualButton": {}, + "showSmartNarrativeButton": {}, + "showSetAlertButton": {}, + "showFollowVisualButton": {} + }, + "additionalProperties": false + }, + "VisualHeaderTooltip": { + "type": "object", + "properties": { + "type": {}, + "section": {}, + "text": {}, + "titleFontColor": {}, + "fontSize": {}, + "fontFamily": {}, + "bold": {}, + "italic": {}, + "underline": {}, + "background": {}, + "transparency": {}, + "themedTitleFontColor": {}, + "themedBackground": {} + }, + "additionalProperties": false + }, + "VisualSyncGroup": { + "type": "object", + "properties": { + "groupName": { + "description": "Unique name for the sync group.", + "type": "string" + }, + "fieldChanges": { + "description": "Should synced visuals update when fields change.", + "type": "boolean" + }, + "filterChanges": { + "description": "Should synced visuals update when filters change.", + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "groupName" + ] + } + } +} \ No newline at end of file diff --git a/fabric/item/report/definition/visualConfiguration/2.3.0/schema.json b/fabric/item/report/definition/visualConfiguration/2.3.0/schema.json new file mode 100644 index 00000000..af5ab71f --- /dev/null +++ b/fabric/item/report/definition/visualConfiguration/2.3.0/schema.json @@ -0,0 +1,941 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/visualConfiguration/2.3.0/schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Visual configuration", + "description": "Defines the configuration of visuals.", + "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/visualConfiguration/2.3.0/schema.json" + }, + "visualType": { + "description": "Name of the visual.", + "type": "string" + }, + "autoSelectVisualType": { + "description": "VisualType is automatically picked by the system based on the data used in the visual.", + "type": "boolean" + }, + "query": { + "description": "Defines the data to be plotted in the visual.", + "$ref": "#/definitions/Query" + }, + "expansionStates": { + "description": "Defines the specific data points that are expanded.", + "type": "array", + "items": { + "$ref": "#/definitions/ExpansionState" + } + }, + "objects": { + "description": "Specifies the formatting to be set for different \"objects\" of the visual.", + "$ref": "../../formattingObjectDefinitions/1.5.0/schema.json#/definitions/DataViewObjectDefinitions" + }, + "visualContainerObjects": { + "description": "Specifies the formatting to be set for different \"objects\" of the container.", + "$ref": "#/definitions/VisualContainerFormattingObjects" + }, + "syncGroup": { + "description": "Defines the sync group that this visual is part of.\nOnly applies to slicer visuals.", + "$ref": "#/definitions/VisualSyncGroup" + }, + "drillFilterOtherVisuals": { + "description": "When another visual is drilled, if visual interactions are enabled between the two visuals,\nthen this property specifies if that drill should be applied as a filter to this visual.\nOverrides the default setting of the report.", + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "$schema", + "visualType" + ], + "definitions": { + "Query": { + "type": "object", + "properties": { + "sortDefinition": { + "description": "Defines how the data should be sorted in a visual", + "$ref": "#/definitions/SortDefinition" + }, + "options": { + "description": "Specific options to apply when running the query. Applies to certain visuals only.", + "$ref": "#/definitions/VisualQueryOptions" + }, + "queryState": { + "description": "Describes how the data should be arranged and used in the visual.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ProjectionState" + } + }, + "isDrillDisabled": { + "description": "Should drill be allowed in the visual - only used by specific custom visuals.", + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "queryState" + ] + }, + "SortDefinition": { + "type": "object", + "properties": { + "sort": { + "description": "Defines the fields the data is sorted by.", + "type": "array", + "items": { + "$ref": "#/definitions/QuerySort" + } + }, + "isDefaultSort": { + "description": "If the sort if explicitly set by user, then this will be false, Power BI can update the sort to match\nthe visual in this case.", + "type": "boolean" + } + }, + "additionalProperties": false + }, + "QuerySort": { + "type": "object", + "properties": { + "field": { + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer", + "description": "Field to sort by" + }, + "direction": { + "$ref": "#/definitions/SortDirection", + "description": "Direction of sort - ascending or descending." + } + }, + "additionalProperties": false, + "required": [ + "direction", + "field" + ] + }, + "SortDirection": { + "type": "string", + "anyOf": [ + { + "const": "Ascending", + "description": "Sort smallest to biggest." + }, + { + "const": "Descending", + "description": "Sort biggest to smallest." + } + ] + }, + "VisualQueryOptions": { + "type": "object", + "properties": { + "allowBinnedLineSample": { + "description": "A better sampling for line charts.", + "type": "boolean" + }, + "allowOverlappingPointsSample": { + "description": "A better sampling for scatter charts.", + "type": "boolean" + } + }, + "additionalProperties": false + }, + "ProjectionState": { + "type": "object", + "properties": { + "showAll": { + "description": "Show all values for all fields in this projection.", + "type": "boolean" + }, + "projections": { + "description": "Defines the fields and their properties for this visual role.", + "type": "array", + "items": { + "$ref": "#/definitions/RoleProjection" + } + }, + "fieldParameters": { + "description": "Defines any field parameters used as projections.", + "type": "array", + "items": { + "$ref": "#/definitions/RoleFieldParameter" + } + } + }, + "additionalProperties": false, + "required": [ + "projections" + ] + }, + "RoleProjection": { + "type": "object", + "properties": { + "field": { + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer", + "description": "The data field from the semantic model." + }, + "queryRef": { + "description": "A unique name for this field - unique per visual.", + "type": "string" + }, + "nativeQueryRef": { + "description": "Native reference name for this field - unique per visual, used for referencing fields in visual calculations.", + "type": "string" + }, + "displayName": { + "description": "An override for display name - by default it is the field name in the semantic model.", + "type": "string" + }, + "format": { + "description": "format string scoped to the visual.", + "maxLength": 255, + "type": "string" + }, + "active": { + "description": "Is the field currently active in the visual - used as part of drill operations.", + "type": "boolean" + }, + "hidden": { + "description": "Is the field visible in the visual - used as part of visual calculations.", + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "field", + "queryRef" + ] + }, + "RoleFieldParameter": { + "type": "object", + "properties": { + "parameterExpr": { + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer", + "description": "Defines the parameter field.\nThis contains the DAX expression (in semantic model) that defines what fields will be projected in the field well from the parameter." + }, + "index": { + "description": "Index at which parameter fields begin in the projections list.\nThis represents the position in the field well where the field parameter is located.\nA field well can contain either projections or field parameters.\nWhen this index is changed, it affects where the field parameter's projected fields will be inserted\nin the projections list.", + "type": "number" + }, + "length": { + "description": "Number of projections that will be populated starting from the field parameter's index position.\nThis indicates how many fields the parameter will project into when evaluated.\n\nThis value will be re-computed when the parameter is evaluated, which is when the visual is rendered.", + "minLength": 0, + "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:\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": "string", + "anyOf": [ + { + "const": "Ascending", + "description": "Sort smallest to biggest." + }, + { + "const": "Descending", + "description": "Sort biggest to smallest." + } + ] + } + }, + "additionalProperties": false, + "required": [ + "index", + "parameterExpr" + ] + }, + "ExpansionState": { + "type": "object", + "properties": { + "roles": { + "description": "Visual roles (projection names) that have individual points expanded.", + "type": "array", + "items": { + "type": "string" + } + }, + "root": { + "description": "Defines the specific values that are expanded for each field in the hierarchy", + "$ref": "#/definitions/RootExpansionState" + }, + "levels": { + "description": "Describes the fields participating in the expansion", + "type": "array", + "items": { + "$ref": "#/definitions/LevelExpansionState" + } + } + }, + "additionalProperties": false, + "required": [ + "roles" + ] + }, + "RootExpansionState": { + "type": "object", + "properties": { + "identityValues": { + "description": "Describes the instances that are expanded.\nOptional for the root expansion state.\nMust by Literal expressions.", + "type": "array", + "items": { + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer" + } + }, + "isToggled": { + "description": "True if the value is expanded.", + "default": false, + "type": "boolean" + }, + "children": { + "description": "Child values in the hierarchy that are expanded", + "type": "array", + "items": { + "$ref": "#/definitions/NodeExpansionState" + } + } + }, + "additionalProperties": false + }, + "NodeExpansionState": { + "type": "object", + "properties": { + "identityValues": { + "description": "Describes the instances that are expanded.\nMust by Literal expressions.", + "type": "array", + "items": { + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer" + } + }, + "isToggled": { + "description": "True if the value is expanded.", + "default": false, + "type": "boolean" + }, + "children": { + "description": "Child values in the hierarchy that are expanded", + "type": "array", + "items": { + "$ref": "#/definitions/NodeExpansionState" + } + } + }, + "additionalProperties": false, + "required": [ + "identityValues" + ] + }, + "LevelExpansionState": { + "type": "object", + "properties": { + "identityKeys": { + "description": "Describes the fields in the visual.", + "type": "array", + "items": { + "$ref": "../../semanticQuery/1.4.0/schema.json#/definitions/QueryExpressionContainer" + } + }, + "isCollapsed": { + "description": "True if the entire field isn't expanded (i.e. false if only specific instances are expanded).", + "type": "boolean" + }, + "queryRefs": { + "description": "Which fields in the query does this relate to - must match a queryRef in the query.", + "type": "array", + "items": { + "type": "string" + } + }, + "isPinned": { + "description": "Is the field pinned.", + "type": "boolean" + }, + "isLocked": { + "description": "Is the field locked (used for decomposition tree)", + "type": "boolean" + }, + "AIInformation": { + "description": "More information about how the expansion is done (used for decomposition tree)", + "$ref": "#/definitions/AILevelInformation" + } + }, + "additionalProperties": false, + "required": [ + "queryRefs" + ] + }, + "AILevelInformation": { + "type": "object", + "properties": { + "method": { + "$ref": "#/definitions/AIDecompositionMethod", + "description": "Type of expansion." + }, + "disabled": { + "description": "Is the level disabled.", + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "method" + ] + }, + "AIDecompositionMethod": { + "enum": [ + "BestSplit", + "MaxSplit", + "MinSplit" + ], + "type": "string" + }, + "VisualContainerFormattingObjects": { + "type": "object", + "properties": { + "title": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/Title", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "subTitle": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/SubTitle", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "divider": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/Divider", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "spacing": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/Spacing", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/Background", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "padding": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/Padding", + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/VisualContainerGeneralFormattingObjects", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "border": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/Border", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "dropShadow": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/DropShadow", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "visualLink": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/VisualLink", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "visualTooltip": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/VisualTooltip", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "stylePreset": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/StylePreset", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "visualHeader": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/VisualHeader", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "visualHeaderTooltip": { + "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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/VisualHeaderTooltip", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + } + }, + "additionalProperties": false + }, + "Title": { + "type": "object", + "properties": { + "show": {}, + "text": {}, + "heading": {}, + "titleWrap": {}, + "fontColor": {}, + "background": {}, + "alignment": {}, + "fontSize": {}, + "bold": {}, + "italic": {}, + "underline": {}, + "fontFamily": {} + }, + "additionalProperties": false + }, + "SubTitle": { + "type": "object", + "properties": { + "show": {}, + "text": {}, + "heading": {}, + "titleWrap": {}, + "fontColor": {}, + "alignment": {}, + "fontSize": {}, + "bold": {}, + "italic": {}, + "underline": {}, + "fontFamily": {} + }, + "additionalProperties": false + }, + "Divider": { + "type": "object", + "properties": { + "ignorePadding": {}, + "show": {}, + "color": {}, + "width": {}, + "style": {} + }, + "additionalProperties": false + }, + "Spacing": { + "type": "object", + "properties": { + "customizeSpacing": {}, + "verticalSpacing": {}, + "spaceBelowTitle": {}, + "spaceBelowSubTitle": {}, + "spaceBelowTitleArea": {} + }, + "additionalProperties": false + }, + "Background": { + "type": "object", + "properties": { + "show": {}, + "color": {}, + "transparency": {} + }, + "additionalProperties": false + }, + "Padding": { + "type": "object", + "properties": { + "top": {}, + "bottom": {}, + "left": {}, + "right": {} + }, + "additionalProperties": false + }, + "LockAspect": { + "type": "object", + "properties": { + "show": {} + }, + "additionalProperties": false + }, + "VisualContainerGeneralFormattingObjects": { + "type": "object", + "properties": { + "x": {}, + "y": {}, + "width": {}, + "height": {}, + "altText": {}, + "allowBinnedLineSample": {}, + "allowOverlappingPointsSample": {}, + "keepLayerOrder": {} + }, + "additionalProperties": false + }, + "Border": { + "type": "object", + "properties": { + "show": {}, + "color": {}, + "radius": {}, + "width": {} + }, + "additionalProperties": false + }, + "DropShadow": { + "type": "object", + "properties": { + "show": {}, + "preset": {}, + "position": {}, + "color": {}, + "transparency": {}, + "shadowSpread": {}, + "shadowBlur": {}, + "angle": {}, + "shadowDistance": {} + }, + "additionalProperties": false + }, + "VisualLink": { + "type": "object", + "properties": { + "show": {}, + "type": {}, + "bookmark": {}, + "disabledTooltip": {}, + "drillthroughSection": {}, + "enabledTooltip": {}, + "qna": {}, + "suppressDefaultTooltip": {}, + "showDefaultTooltip": {}, + "navigationSection": {}, + "tooltip": {}, + "tooltipPlaceholderText": {}, + "webUrl": {}, + "dataFunction": {} + }, + "additionalProperties": false + }, + "VisualTooltip": { + "type": "object", + "properties": { + "show": {}, + "type": {}, + "section": {}, + "titleFontColor": {}, + "valueFontColor": {}, + "fontSize": {}, + "bold": {}, + "italic": {}, + "underline": {}, + "fontFamily": {}, + "background": {}, + "transparency": {}, + "actionFontColor": {}, + "themedTitleFontColor": {}, + "themedBackground": {}, + "themedValueFontColor": {} + }, + "additionalProperties": false + }, + "StylePreset": { + "type": "object", + "properties": { + "name": {} + }, + "additionalProperties": false + }, + "VisualHeader": { + "type": "object", + "properties": { + "show": {}, + "background": {}, + "border": {}, + "transparency": {}, + "foreground": {}, + "showVisualInformationButton": {}, + "showVisualWarningButton": {}, + "showVisualErrorButton": {}, + "showDrillRoleSelector": {}, + "showDrillUpButton": {}, + "showDrillToggleButton": {}, + "showDrillDownLevelButton": {}, + "showDrillDownExpandButton": {}, + "showPinButton": {}, + "showFilterRestatementButton": {}, + "showFocusModeButton": {}, + "showCopyVisualImageButton": {}, + "showSeeDataLayoutToggleButton": {}, + "showOptionsMenu": {}, + "showCommentButton": {}, + "showTooltipButton": {}, + "showPersonalizeVisualButton": {}, + "showSmartNarrativeButton": {}, + "showSetAlertButton": {}, + "showFollowVisualButton": {} + }, + "additionalProperties": false + }, + "VisualHeaderTooltip": { + "type": "object", + "properties": { + "type": {}, + "section": {}, + "text": {}, + "titleFontColor": {}, + "fontSize": {}, + "fontFamily": {}, + "bold": {}, + "italic": {}, + "underline": {}, + "background": {}, + "transparency": {}, + "themedTitleFontColor": {}, + "themedBackground": {} + }, + "additionalProperties": false + }, + "VisualSyncGroup": { + "type": "object", + "properties": { + "groupName": { + "description": "Unique name for the sync group.", + "type": "string" + }, + "fieldChanges": { + "description": "Should synced visuals update when fields change.", + "type": "boolean" + }, + "filterChanges": { + "description": "Should synced visuals update when filters change.", + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "groupName" + ] + } + } +} \ No newline at end of file diff --git a/fabric/item/report/definition/visualConfiguration/CHANGELOG.md b/fabric/item/report/definition/visualConfiguration/CHANGELOG.md index 5334e08d..1e3280f5 100644 --- a/fabric/item/report/definition/visualConfiguration/CHANGELOG.md +++ b/fabric/item/report/definition/visualConfiguration/CHANGELOG.md @@ -1,5 +1,12 @@ # Visual Configuration Versions +### 2.3.0 + +Released in: March 2026
+Notes: +- Updates the reference to the `formattingObjectDefinitions` schema from `1.4.0` to `1.5.0` +- Updates the reference to the `semanticQuery` schema from `1.3.0` to `1.4.0` + ### 2.2.0 Released in: August 2025
diff --git a/fabric/item/report/definition/visualContainer/2.6.0/schema.json b/fabric/item/report/definition/visualContainer/2.6.0/schema.json new file mode 100644 index 00000000..b44832ce --- /dev/null +++ b/fabric/item/report/definition/visualContainer/2.6.0/schema.json @@ -0,0 +1,309 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/visualContainer/2.6.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.6.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/2.7.0/schema.json b/fabric/item/report/definition/visualContainer/2.7.0/schema.json new file mode 100644 index 00000000..af50f6e0 --- /dev/null +++ b/fabric/item/report/definition/visualContainer/2.7.0/schema.json @@ -0,0 +1,309 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/visualContainer/2.7.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.7.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.3.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.3.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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "../../visualConfiguration/2.3.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.5.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "../../visualConfiguration/2.3.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.5.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 b4625324..8b4e7d36 100644 --- a/fabric/item/report/definition/visualContainer/CHANGELOG.md +++ b/fabric/item/report/definition/visualContainer/CHANGELOG.md @@ -1,5 +1,20 @@ # Visual Container Versions +### 2.1.0 + +Released in: March 2026
+Notes: +- Updates the reference to the `filterConfiguration` schema from `1.2.0` to `1.3.0` +- Updates the reference to the `formattingObjectDefinitions` schema from `1.4.0` to `1.5.0` +- Updates the reference to the `visualConfiguration` schema from `2.2.0` to `2.3.0` + +### 2.6.0 + +Released in: February 2026
+Notes: +- Input slicer GA +- AI narratives "auto-refresh" formatting option + ### 2.5.0 Released in: January 2026
diff --git a/fabric/item/report/definition/visualContainerMobileState/2.3.0/schema.json b/fabric/item/report/definition/visualContainerMobileState/2.3.0/schema.json new file mode 100644 index 00000000..c07139b4 --- /dev/null +++ b/fabric/item/report/definition/visualContainerMobileState/2.3.0/schema.json @@ -0,0 +1,72 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/visualContainerMobileState/2.3.0/schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Visual container mobile state", + "description": "Defines information about a visual container's mobile layout.", + "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/visualContainerMobileState/2.3.0/schema.json" + }, + "objects": { + "description": "Specifies the mobile specific formatting changes for different \"objects\" of a visual.", + "$ref": "../../formattingObjectDefinitions/1.5.0/schema.json#/definitions/DataViewObjectDefinitions" + }, + "visualContainerObjects": { + "description": "Specifies the mobile specific formatting changes for different \"objects\" of the visual container.", + "$ref": "../../visualConfiguration/2.3.0/schema-embedded.json#/definitions/VisualContainerFormattingObjects" + }, + "position": { + "$ref": "#/definitions/VisualContainerPosition", + "description": "Describes a mobile specific position for this visuals." + } + }, + "additionalProperties": false, + "required": [ + "$schema", + "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" + ] + } + } +} \ No newline at end of file diff --git a/fabric/item/report/definition/visualContainerMobileState/CHANGELOG.md b/fabric/item/report/definition/visualContainerMobileState/CHANGELOG.md index 2a229b00..1b3817a7 100644 --- a/fabric/item/report/definition/visualContainerMobileState/CHANGELOG.md +++ b/fabric/item/report/definition/visualContainerMobileState/CHANGELOG.md @@ -1,5 +1,12 @@ # Visual Container Mobile State Versions +### 2.3.0 + +Released in: March 2026
+Notes: +- Updates the reference to the `formattingObjectDefinitions` schema from `1.4.0` to `1.5.0` +- Updates the reference to the `visualConfiguration` schema from `2.2.0` to `2.3.0` + ### 2.2.0 Released in: August 2025
diff --git a/spfx/adaptive-card-extension-manifest.schema.json b/spfx/adaptive-card-extension-manifest.schema.json index 79ee3c07..76db91a8 100644 --- a/spfx/adaptive-card-extension-manifest.schema.json +++ b/spfx/adaptive-card-extension-manifest.schema.json @@ -1,5 +1,5 @@ { - "id": "adaptive-card-extension-manifest.schema.json", + "$id": "adaptive-card-extension-manifest.schema.json", "title": "Adaptive Card Extension manifest", "description": "All Adaptive Card Extension built on the SharePoint framework need a valid component manifest. This interface represents properties that are required by all types of BaseAdaptiveCardExtension. Adaptive Card Extension specific manifests will extend this interface to add properties required by that component type.", "definitions": { diff --git a/spfx/any-value.schema.json b/spfx/any-value.schema.json index daf98d1d..236c6c85 100644 --- a/spfx/any-value.schema.json +++ b/spfx/any-value.schema.json @@ -1,5 +1,5 @@ { - "id": "any-value.schema.json", + "$id": "any-value.schema.json", "type": ["array", "boolean", "integer", "number", "object", "string"], "items": { diff --git a/spfx/client-side-application-manifest.schema.json b/spfx/client-side-application-manifest.schema.json index 02e46fa3..6186780e 100644 --- a/spfx/client-side-application-manifest.schema.json +++ b/spfx/client-side-application-manifest.schema.json @@ -1,5 +1,5 @@ { - "id": "client-side-application-manifest.schema.json", + "$id": "client-side-application-manifest.schema.json", "title": "Client-side application manifest", "description": "A client-side application is the architectural component that manages the appearance and behavior of an entire web page.", diff --git a/spfx/client-side-assembly-manifest.schema.json b/spfx/client-side-assembly-manifest.schema.json index c2ce1e9c..0598c194 100644 --- a/spfx/client-side-assembly-manifest.schema.json +++ b/spfx/client-side-assembly-manifest.schema.json @@ -1,5 +1,5 @@ { - "id": "client-side-assembly-manifest.schema.json", + "$id": "client-side-assembly-manifest.schema.json", "title": "Client-side assembly manifest", "description": "A client-side assembly is a standalone-executable bundle containing a component, the loader, and all of their dependencies.", diff --git a/spfx/client-side-component-loader-configuration.schema.json b/spfx/client-side-component-loader-configuration.schema.json index c336573e..ef1fc990 100644 --- a/spfx/client-side-component-loader-configuration.schema.json +++ b/spfx/client-side-component-loader-configuration.schema.json @@ -1,5 +1,5 @@ { - "id": "client-side-component-loader-configuration.schema.json", + "$id": "client-side-component-loader-configuration.schema.json", "title": "Client-side component manifest", "description": "All client side components built on the SharePoint framework need a valid component manifest. This interface represents properties that are required by all types of client side components like Applications and Web Parts. Component specific manifests will extend this interface to add properties required by that component type.", diff --git a/spfx/client-side-component-manifest.schema.json b/spfx/client-side-component-manifest.schema.json index 8cb7471b..a26ef18d 100644 --- a/spfx/client-side-component-manifest.schema.json +++ b/spfx/client-side-component-manifest.schema.json @@ -1,5 +1,5 @@ { - "id": "client-side-component-manifest.schema.json", + "$id": "client-side-component-manifest.schema.json", "title": "Client-side component manifest", "description": "All client side components built on the SharePoint framework need a valid component manifest. This interface represents properties that are required by all types of client side components like Applications and Web Parts. Component specific manifests will extend this interface to add properties required by that component type.", "definitions": { diff --git a/spfx/client-side-extension-manifest.schema.json b/spfx/client-side-extension-manifest.schema.json index 8d899875..81194006 100644 --- a/spfx/client-side-extension-manifest.schema.json +++ b/spfx/client-side-extension-manifest.schema.json @@ -1,5 +1,5 @@ { - "id": "client-side-extension-manifest.schema.json", + "$id": "client-side-extension-manifest.schema.json", "title": "Client-side extension manifest", "description": "A client-side extension is a plug-in component that customizes or augments the functionality of a client-side application.", diff --git a/spfx/client-side-library-manifest.schema.json b/spfx/client-side-library-manifest.schema.json index 278b091c..25cd6e76 100644 --- a/spfx/client-side-library-manifest.schema.json +++ b/spfx/client-side-library-manifest.schema.json @@ -1,5 +1,5 @@ { - "id": "client-side-library-manifest.schema.json", + "$id": "client-side-library-manifest.schema.json", "title": "Client-side library manifest", "description": "A client-side library is a library containing reusable JavaScript code and/or resources.", diff --git a/spfx/client-side-manifest-base.schema.json b/spfx/client-side-manifest-base.schema.json index f08c701d..a13c3416 100644 --- a/spfx/client-side-manifest-base.schema.json +++ b/spfx/client-side-manifest-base.schema.json @@ -1,5 +1,5 @@ { - "id": "client-side-manifest-base.schema.json", + "$id": "client-side-manifest-base.schema.json", "title": "Client-side component manifest base", "description": "Properties common to all deployable manifests.", diff --git a/spfx/client-side-multi-version-manifest.schema.json b/spfx/client-side-multi-version-manifest.schema.json index 783dc2b1..658e2ece 100644 --- a/spfx/client-side-multi-version-manifest.schema.json +++ b/spfx/client-side-multi-version-manifest.schema.json @@ -1,5 +1,5 @@ { - "id": "client-side-multi-version-manifest.schema.json", + "$id": "client-side-multi-version-manifest.schema.json", "title": "Client-side multi-version manifest", "description": "Multi-version manifests are defined by this schema.", diff --git a/spfx/client-side-web-part-manifest.schema.json b/spfx/client-side-web-part-manifest.schema.json index 990126a1..e1c9e568 100644 --- a/spfx/client-side-web-part-manifest.schema.json +++ b/spfx/client-side-web-part-manifest.schema.json @@ -1,5 +1,5 @@ { - "id": "client-side-web-part-manifest.schema.json", + "$id": "client-side-web-part-manifest.schema.json", "title": "Client-side webpart manifest", "description": "A client-side webpart is a control that is part of the end user page authoring experience or exposed in Teams as an app.", diff --git a/spfx/command-set-extension-manifest.schema.json b/spfx/command-set-extension-manifest.schema.json index a9871b8e..81aba8cc 100644 --- a/spfx/command-set-extension-manifest.schema.json +++ b/spfx/command-set-extension-manifest.schema.json @@ -1,5 +1,5 @@ { - "id": "command-set-extension-manifest.schema.json", + "$id": "command-set-extension-manifest.schema.json", "title": "Command set extension manifest", "description": "A client-side extension that defines a set of custom commands that can be shown in a menu, tool bar, etc.", @@ -8,7 +8,10 @@ { "type": "object", "properties": { - "$schema": { "type": "string" }, + "$schema": { + "type": "string", + "minLength": 1 + }, "manifestVersion": { "$ref": "any-value.schema.json" }, "id": { "$ref": "any-value.schema.json" }, @@ -55,9 +58,9 @@ }, "type": { "type": "string", - "enum": ["command"], + "enum": ["command", "group"], "title": "Type", - "description": "Type of the item. Currently only \"command\" is allowed." + "description": "Type of the item. Use 'command' for executable commands, or 'group' for containers that organize commands into submenus." }, "ariaLabel": { "title": "ARIA Label", @@ -66,8 +69,15 @@ }, "iconImageUrl": { "type": "string", + "minLength": 1, "title": "Icon Image URL", "description": "An optional URL for an image to be displayed next to the item. The requirements for this image are defined by the type of extension; some extension types may not display the image at all." + }, + "group": { + "type": "string", + "pattern": "^[A-Z0-9_]+$", + "title": "Group", + "description": "Optional ID of a parent group item this command/group belongs to. The parent must be defined in the same manifest with type 'group'. Maximum nesting depth is 2 levels." } }, "additionalProperties": false diff --git a/spfx/guid.schema.json b/spfx/guid.schema.json index 92d7d032..68c18cd0 100644 --- a/spfx/guid.schema.json +++ b/spfx/guid.schema.json @@ -1,5 +1,5 @@ { - "id": "guid.schema.json", + "$id": "guid.schema.json", "type": "string", "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" diff --git a/spfx/localized-string.schema.json b/spfx/localized-string.schema.json index 7ed6ff42..713feaee 100644 --- a/spfx/localized-string.schema.json +++ b/spfx/localized-string.schema.json @@ -1,5 +1,5 @@ { - "id": "localized-string.schema.json", + "$id": "localized-string.schema.json", "type": "object", "oneOf": [ diff --git a/spfx/prefab-app-manifest.schema.json b/spfx/prefab-app-manifest.schema.json index 5aa5b58b..9c8bf7ce 100644 --- a/spfx/prefab-app-manifest.schema.json +++ b/spfx/prefab-app-manifest.schema.json @@ -1,5 +1,5 @@ { - "id": "prefab-app-manifest.schema.json", + "$id": "prefab-app-manifest.schema.json", "title": "PREFAB application manifest", "description": "A PREFAB application is the architectural component that allows developers to declaratively specify behavior of a full page application.", diff --git a/spfx/semver.schema.json b/spfx/semver.schema.json index a2ad984c..bc06ee8c 100644 --- a/spfx/semver.schema.json +++ b/spfx/semver.schema.json @@ -1,5 +1,5 @@ { - "id": "semver.schema.json", + "$id": "semver.schema.json", "type": "string", "minLength": 5, diff --git a/teams/vDevPreview/MicrosoftTeams.schema.json b/teams/vDevPreview/MicrosoftTeams.schema.json index 12b3c960..9dce597b 100644 --- a/teams/vDevPreview/MicrosoftTeams.schema.json +++ b/teams/vDevPreview/MicrosoftTeams.schema.json @@ -11,8 +11,7 @@ "type": "string", "description": "The version of the schema this manifest is using.", "enum": [ - "devPreview", - "m365DevPreview" + "devPreview" ] }, "version": { @@ -1507,11 +1506,10 @@ "type": "string", "enum": [ "agentOnly", - "agenticUserOnly", - "agentOrAgenticUser" + "agenticUserOnly" ], "default": "agentOnly", - "description": "Possible values: 'agenticUserOnly', 'agentOnly', or 'agentOrAgenticUser'. 'agenticUserOnly' means the customEngineAgent must be hired and cannot be installed as a regular agent. 'agentOrAgenticUser' means the customEngineAgent supports both being installed as a regular agent and being hired. 'agentOnly' means it supports being installed as a regular agent only (default)." + "description": "Possible values: 'agenticUserOnly', 'agentOnly'. 'agenticUserOnly' means the customEngineAgent must be hired and cannot be installed as a regular agent. 'agentOnly' means it supports being installed as a regular agent only (default)." }, "agenticUserTemplateId": { "type": "string",