Welcome to the May 2023 Power BI Report Server release! This release has a number of great new features like the Report Server accessibility tagging for screen-reader report consumers, new accessibility for matrix navigation and selection as well as updates to existing features for Modeling, and Reporting. All of which has been inclusively designed for report authors and consumers to gain valuable insights! Please read on for all the details, and feel free to leave your thoughts in the comments below.
-
- Conditional formatting based on string fields
- Formatting image width in table and matrix
- Customize visible pages in the Page navigator visual
- New accessible report themes
- Matrix accessibility improvements
- Visual container improvements
- Apply all slicers button, Clear all slicers button, and Optimization presets update
- Format Pane โ new styling
- New tooltip auto-scaleย
- Measure driven data labels
- Mobile formatting options
Report Server
Since the announcement of Power BI Report Server for SQL Server 2022, we’ve continued to innovate, create, and design in a way that gives everyone the ability to achieve more. Designing for inclusivity reflects how people adapt to the world around them. In this new release of PBIRS, weโve done more accessibility work to make sure weโre empowering people to achieve more.
When working with Power BI, consider the different types of users who might interact with your reports. You can create reports that are easily navigated and understood by keyboard or screen reader users. Such reports enable users who might have visual or physical impairments to benefit from your reports. That is why we are announcing two new capabilitiesย for paginated reports.
Accessibility options for Row Properties
Accessibility options are new features for report authors. They can be enabled from the Power BI Report Builder authoring tool.
Accessibility options for row properties will allow report authors to tag rows for headers and data cells within a paginated report.
To enable Row properties on a header or data cell, rightโclick on a table row and select Row properties in Power BI Report Builder.
Choose the Accessibility menu and determine which structure type you wish to overwrite.
Accessibility options for Text box Properties
Text box properties works similarly. This will allow report authors to tag heading elements to text boxes within a paginated report.
To enable Text box properties, right-click on a text box to select the Accessibility menu and determine which structure type you wish to overwrite.
You can add Heading tags H1-H6 to give the text box a different semantic meaning in output formats like HTML and Accessible PDF.
Report authors and report consumers can now benefit from having accessibility tagging for tables, matrixes and text box properties for paginated reports in just a few clicks. When you add this tagging to a row property and/or a text box property, you provide a better report navigation user experience for report consumers who use screen-readers.
To learn more about accessibility options, please check out our accessibility guidance documentation on authoring and consuming paginated reports.
Don’t forget to update to the newest Power BI Report Builder to get accessibility options!
Would you like to know whatโs coming in future capabilities to paginated reports which will be more inclusive and accessible, or would you like to contribute by providing feedback to influence paginated reports product roadmap? Please join our user research panel.
Reporting
Conditional formatting based on string fields
This month, you can now set conditional formatting rules based on string fields! We know that many of you have been asking for this feature, so weโre excited to be bringing you this feature and hope you find it a powerful new conditional formatting capability.
You can access this new capability in the same way other conditional formatting: through the dialog which opens up from selecting an option in the formatting pane. For example, in column charts, you can conditionally format column colors by selecting the fx button in the Columns card of the formatting pane.
In the dialog, select โRulesโ through the Format style dropdown, then base these rules on a string field and select a summarization. Before, your summarization options were only numeric โ Count and Count (Distinct). Now youโll see First and Last options as well, which will give you strings to write logic around. In the example below, we add a simple rule to check that the value of the string is Audio, and if it is, we color the column red.
Then we hit OK, and the Audio columns of our visual will now be colored red!
Weโve added a variety of comparator options to the conditional formatting dialog, including โisโ, โstarts withโ, โends withโ, and more. Keep in mind that these comparisons will check your fields against your inputs for exact character matches, including case-sensitivity.
As always, let us know what you think about the feature and ideas you have to improve this or any other aspects of Power BI!
Formatting image width in table and matrix
Image dimensions in table and matrix visuals can now be individually formatted. Prior to this release, there was only one control for image dimensions in table and matrix cells. Despite being labeled as โimage heightโ, this setting in the formatting pane controlled both the width and height of images, causing them to take up square space regardless of their actual dimensions. This caused layout problems, especially when images were wider than they were tall, as rows then took up far more vertical space than necessary.
Now that you can change image height and width separately, you can adjust your cells to give your tables or matrices a lot more room!
Customize visible pages in the Page navigator visual
You can now easily decide which report pages are visible within the Page navigator visual. If you want to exclude specific pages, all you need to do is expand the Show card in the Pages section of the formatting pane. Here youโll see the list of pages that are not already hidden through the โShow hidden pagesโ or โShow tooltip pagesโ options.
All you need to do to hide specific pages is turn the toggle for that page to Off.
If you have many pages in your report that you want to hide within the Page navigator visual, it can be faster to instead just specify which ones you specifically want to show. To do this, turn the Show all by default toggle to Off in the Options card, which will immediately turn all pages within the Show card to Off.
From there, you can then go in and just turn back on the specific pages you want visible.
New accessible report themes
This month, to promote authors creating accessible reports with good contrast across their colors, weโve added some new accessible report themes to the theme dropdown in the View tab of the ribbon:
Youโll find them in a new section labeled Accessible themes.
Matrix accessibility improvements
We are excited to announce several enhancements to the matrix visual for existing and new reports to improve usability and accessibility for all users.
These updates include:
- Improved keyboard navigation and new keyboard shortcuts, including Page Up, Page Down, Home, and End to quickly traverse data in large matrices. More shortcuts are listed here: Keyboard shortcuts in Power BI Desktop – Power BI | Microsoft Learn
- A two-toned focus outline that will always be visible even in darker backgrounds, meeting color contrast requirements.
- New support for screen reader announcements to convey matrix structure and interactions.
- Added screen reader support for conditional formatting icons and data bars.
- Removed browser (default) tooltips for values that arenโt truncated.
- Overall performance improvements for scrolling and rendering, with an updated scrollbar style.
Learn more about consuming Power BI reports using accessibility features.
Visual container improvements
With this release, we are introducing three key features to help you customize your visuals’ container.
Subtitle
You can now turn on a subtitle that can be used to add extra context to your visuals. You’ll find the new “Subtitle” toggle in the Title settings card of the formatting pane.
Divider
To visually separate the visual header from its contents you can add a divider line. You can find the “Divider” option in the Title settings card of the formatting pane, below the new “Subtitle”.
Hereโs the visual container with Subtitle and Divider on:
Spacing
In addition to the Subtitle and Divider on your visual container, you can control the space below each component. You’ll find the “Spacing” setting at the bottom of the Title settings card of the formatting pane.
Padding
You can now control the container’s margin to create a negative space making the visuals look more professional and appealing. You’ll find this new option in the Properties card of the formatting pane
Apply all slicers button, Clear all slicers button, and Optimization presets update
When we released the Public Preview of the Optimize ribbon with Pause visuals for authoring reports, many of you asked for a way to allow your report consumers to make slicer selections and have the report visuals only update when they have finished making all slicer selections. The wait is now over! We are happy to announce the availability of the Apply all slicers button!
The Apply all slicers button can be added in three ways:
- From the Optimize ribbon > Apply all slicers button
- From the Insert ribbon > Buttons > Apply all slicers
- Or, simply by choosing the Apply all slicers action on any existing button in your report.
You can add as many of these buttons as you like to your report page. When at least one of them is visible on the page, all the slicers on your report page will take selection changes but will only apply them to the other report visuals when the button is clicked. If you hide or delete the last Apply all slicers button on a report page, then the slicers simply behave like they did before, generally instantly applying the selections as you make selections.
This Apply all slicers button is like the existing single apply button on slicers in that they both do not apply the slicer selections to other visuals until you click the button. Unlike the single apply button on slicers, the Apply all slicers button will allow you to make selections across multiple slicers and then apply them in one click! For the best query reduction experience with slicers, we recommend you use the Apply all slicers instead of the single apply button for slicers. The single apply button for slicers is still available and will continue to work on existing reports. The Optimization preset for Query reduction has been adjusted to no longer add the single apply button for slicers on slicers, and instead recommends the Apply all slicers button.
Additionally, a popular idea on the Power BI Ideas forum is for a Clear all slicers button, which has been also added with the Apply all slicers button! When there are several slicers on a report page and you want a way to quickly clear all their selections, add the Clear all slicers button and your report consumers can do so in one click!
Finally, the Optimize ribbon with Pause visuals, Optimization presets, and the quick access to Apply all slicers button is on by default as a preview feature starting this release.
Format Pane โ new styling
To address customer feedback on the depth perceived by the white background and drop shadow treatment causing dizziness from the new format pane, weโve darkened the style, and added borders instead of drop shadows when OS setting for reduced motion is enabled.
Current format pane | New format pane style | With reduce motion setting |
New tooltip auto-scale
With this release, we will be adding a user preference setting to allow tooltips to auto-scale based on the canvas’ size underย Optionsย > Report settingsย > Tooltip auto-scale
Measure driven data labels
This release will introduce an exciting new label capability that allows you to easily swap out your default data labels with more meaningful values based on your chosen field or measure.
This measure-driven data label feature is just a taste of the great improvements that await you in the coming months. Get ready!
Mobile formatting options
We’ve now added mobile formatting options that significantly improve the authoring experience for mobile-optimized reports. With these new capabilities, you can style and format visuals in a mobile-optimized layout without affecting their formatting in web layout. This gives you greater flexibility and opens up a world of design possibilities for creating beautiful reports that are truly optimized for phone viewing. For more details about the new capabilities, check out our documentation.
Modeling
New DAX functions: LINEST and LINESTX
This month, we are introducing two new statistical DAX functions: LINEST and LINESTX. These two functions perform linear regression, leveraging the Least Squares method, to calculate a straight line that best fits the given data and return a table describing that line. These functions are especially useful in predicting unknown values (Y) given known values (X).
Both functions return a single-row table describing the line and additional statistics. The resulting table includes columns such as slopes, intercepts, standard errors, and the coefficient of determination. The equation of the fitted line can be constructed: Y = Slope1 * X1 + Slope2 * X2 + โฆ+ Intercept.
The difference between LINEST and LINESTX is that LINEST expects columns of known X and Y values to be provided, whereas LINESTX expects a table and expressions to be evaluated for each row of the table to obtain the X and Y values.
For the following examples, I use the following data, which includes Sales Amount and gross national product (GNP) per capita:
In the example below I use LINESTX to predict total sales based on GNP per capita:
LinestX_example = VAR CountryGNP = SUMMARIZE( Sales, 'GNP_Country'[Country], 'GNP_Country'[GNP_Per_Capita], "Total Sales", SUM(Sales[Sales Amount]) ) VAR SalesPrediction = LINESTX( 'CountryGNP', [Total Sales], [GNP_Per_Capita] ) VAR Example_GNP_Per_Capita = 50000 RETURN SELECTCOLUMNS( SalesPrediction, [Slope1] ) * Example_GNP_Per_Capita + SELECTCOLUMNS( SalesPrediction, [Intercept] )
This expression not only leverages LINESTX but also leverages the result to perform a prediction for a fictious country with gross national product per capita of $50,000. The result is a predicted total sales of $17,426,123.29. Of course this is a fabricated scenario and itโs rare to have a fixed value such as the $50,000 above as part of the expression.
I can do the same using LINEST assuming the required tables are all in the model, for example as calculated tables. In this example, I added the following calculated tables:
-
-
- CountryDetails, defined as:
-
CountryDetails = SUMMARIZECOLUMNS( 'GNP_Country'[Country], 'GNP_Country'[GNP_Per_Capita], "Total Sales", SUM(Sales[Sales Amount]))
-
-
- SalesPredictionLINEST, defined as:
SalesPredictionLINEST = LINEST('CountryDetails'[Total Sales], 'CountryDetails'[GNP_Per_Capita])
- SalesPredictionLINEST, defined as:
-
Now I can use following measure expression to obtain the same result as above:
Linest_example = VAR Example_GNP_Per_Capita = 50000 RETURN MAX ( SalesPredictionLINEST[Slope1] ) * Example_GNP_Per_Capita + MAX ( SalesPredictionLINEST[Intercept] )
To learn more about these functions, see their documentation pages: LINEST and LINESTX.
New DAX functions: RANK and ROWNUMBER
This month we are adding two more functions that will make your life easier, especially when doing rankings: RANK and ROWNUMBER are joining the DAX ranks!
These functions return a number indicating the rank for the current context within the specified partition, sorted by the specified order. The difference between RANK and ROWNUMBER is that if there is a tie (i.e., two rows would get the same rank assigned) ROWNUMBER will return an error, whereas RANK will just assign the same RANK multiple times. Notice returning an error is a last resort; ROWNUMBER will try to avoid doing that by finding the least number of additional columns required to uniquely identify every row and append these new columns to the ORDERBY clause. Only after it is unable to uniquely identify every row, ROWNUMBER will return an error.
These functions rely on the ORDERBY and PARTITIONBY functions.
In the following example, we have a list of customers and their birth dates. I have added the following measures to my model:
RankByBirthDateSkip = RANK(SKIP, ALLSELECTED(DimCustomer), ORDERBY(DimCustomer[BirthDate]))
RankByBirthDateDense = RANK(DENSE,ALLSELECTED(DimCustomer), ORDERBY(DimCustomer[BirthDate]))
RowNumberByBirthDate = ROWNUMBER(ALLSELECTED(DimCustomer), ORDERBY(DimCustomer[BirthDate]))
This is the first part of the output:
All measures here return the same result. However, for customers that share a birthday, the results are different:
Notice how both Donald Garcia and Kayla Garcia are both on the same date. Using RANK with the ties parameter set to SKIP (the default) assigns them a rank of 41. The same happens when using RANK with the ties parameter set to DENSE. However, notice that the next customer receives a different rank (43 when the ties parameter is set to SKIP and 42 when set to DENSE). By contrast, ROWNUMBER gives Donald and Kayla a unique rank (41 and 42) as it expands the ORDERBY clause to try to unique identify these customers and is successful in doing so.
Read more about RANK and ROWNUMBER in our documentation.
This concludes our May release summary. We hope that you have enjoyed reading about some of the new features we are offering! Please submit your comments below to continue the conversation. As always, we would love to hear from you!