This month it is a major game changer. PowerBI has introduced the ability to change the color theme of your Power BI reports. What does this mean for you? Well, this means hours of time saved. Previously when you needed to style a report you would need to click on every visual and change the colors. This is useful when you have a specific theme or product you want to match colors with. Now all this can be done with a couple clicks for all visuals across the entire report. Wow!!!
Additionally, the ability to generate a theme is awesome but you also will need a tool to help you create a color theme. In response for this need I have created a Color Theme Generator that will aid you in the creation of making color themes. To read the tutorial on color themes visit this link.
For a while now I have been longing to spend more time learning all the ins and out of Power BI embedded. From the line of work that I do, I can see a number of different development applications where an embedded solution would be perfect. Microsoft has been spending more time developing and feature enhancing the embedded experience. The Guy in a Cube (Adam Saxton) has another great video walking through how to embed a dashboard. Great video, and a really good walk through. Thanks Adam.
Power BI Embedded Dashboards:
If you haven’t already make sure you go check out Adam’s site and YouTube Blog for more great information.
For more great videos about Power BI click the image below:
For those of you who are following my tutorials, you are most likely to understand that each tutorial comes with it’s own data source. This has been intentional so we can both walk through the example and learn by doing. Whenever, I am learning new things I find it’s helpful to do two things. First, make examples and demos of what I am trying to learn. Simply reading about a tool such as PowerBI, while engaging, it isn’t how I learn. I learn by getting my hands dirty, opening up PowerBI and creating something. You have to get utterly frustrated and stumped before that light bulb pops on and things become clear. Secondly, after I’ve taken the time to learn a new feature or method I find it extremely helpful to teach someone else what I’ve learned. By doing so, I am able share in the enthusiasm of others who also are learning. Teaching others also makes you remove all the cluttered ideas away from the essential lesson.
This being said, I consume a lot of data. Always finding data sources is difficult. Often I find myself making up my own data sets which takes additional time. At least, it used to take me forever to find data. This past week I was digging around for more data sources and I stumbled upon this gem. It is the data source has been used by many a bloggers for examples. It is Adventure Works sample business database. For this tutorial we will walk through how to load the Adventure Works dataset directly in to PowerBI.
Lets begin by opening Power BI desktop. Once Power BI desktop is open on the Home ribbon click the Get Data button. The Get Data window will open and under the Other section we find an OData Feed. Select the OData Feed and then click Connect to proceed.
The OData Feed window will open. Enter in the following HTML address into the URL field.
Note: In this example we are only using the basic OData Feed connection. Power BI does allow users to build more complex OData feeds which may require multiple parameters. This functionality is included by toggling the OData Feed screen from Basic to Advanced. This would be ideal if you had an OData Feed such as http://myOdataFeed.com/{custom parameter}/OData.
Click OK to proceed
Power Bi will now go to the web address and read the OData Feed. What is returned is a list of tables. The Navigator window shows us previews of each table. Select the CompanySales and TerritorySalesDrillDown by checking the boxes next to each table. Click Load to proceed.
Ta Da!! that was easy. We were able to quickly load the two tables from the Adventure Works database. We can confirm this by looking at all the loaded fields contained in the Fields pane.
Add a couple of visuals with the following fields to pretty up our page.
Pro Tip:notice how the two charts we added have the same color scheme but are different dimensions. The Clustered Column Chart has Years for the Colors, but the Stacked Bar Chart is using product categories. Change the colors on the Stacked Bar Chart by clicking on the Paint Roller on the Visualizations pane. Select the section called Data Colors and modify the colors for each product category.
Note: In order to sort from the largest sales amount to the smallest. Click the Ellipsis (small three dots) on the corner of the visual and select Sort by Sales. This will make the visual sort in order of sales from the highest amount to the smallest amount.
Similarly you can change the colors for the Clustered Column Chart to make the visual more appealing.
Again using the Ellipsis of the visual select Sort by Total to sort the number of sales by each employee from the largest sales amount, Linda to the smallest sales amount Lynn. Also, note that this chart is being built off the second table that we loaded from the OData Feed labeled TerritorySalesDrilldown.
Now, I believe we can say we are officially done. We have loaded data from our OData Feed and created three visuals upon that data. Thanks again for following along.
If you liked this tutorial please be sure to share. Also if you want to know more about me you can visit my About page and follow me on twitter or Linkedin for updates.
Power BI has been an continually evolving tool over the last year. The Matrix visual is powerful and mimics much of the functionality of a Pivot Table within Excel. I will admit, the Matrix visual has some features that are left to be desired. One such feature, the ability to word wrap row headers, has been resolved in the February 2017 update of PowerBI. See the official release notes for details. In my company we have traditionally been an excel driven business. All you other heavy analytics people you know what I’m talking about. Emails upon emails about an excel analysis, then power point presentations of those excel documents. Inevitably a pivot table or table will end up on a power point slide. Icky, if you ask me, especially when you have to “refresh” the data… I digress, Power BI fills a great gap in this area where the Analytics leaders within your company can make reports that easily refresh, and look dang sexy.
The Matrix is one of those visuals that I would say is a comfortable way for non-analytical people to review data. The Pivot Table aka Matrix in Power BI, is how people have been used to looking at data for years. This has been quite a sticking point for many business leaders when reviewing Power BI dashboards. I’ll present some data using a map or bar chart and I’ll usually get the, “Where’s the table of data?” This will prompt an additional tab inside the Power BI document with a large data table. Presenting headers in that large table or matrix has always been a challenge because the headers don’t word wrap. Seeing Microsoft listening to people’s feedback and implementing header word wrap and other features is refreshing.
For this tutorial we will be working with a dataset that I found from the FBI titled Crime in the United States. I chose this data set based on the flurry of media talking about the current President’s comments about crime. Before we move on, let me assure you this will not have any politics in this tutorial. Therefore, it will be safe to read on.
Open up PowerBI Desktop, Click the Get Data button on the Home ribbon and select Blank Query. Click Connect to open the Query Editor. On the View ribbon clickthe AdvancedEditor button. While in the Advanced Editor paste the following code into the editor window, click Done to complete the data load.
Note: If you need some more help loading the data follow this tutorial about loading data using the Advanced Query Editor. This tutorial teaches you how to copy and paste M code into the Advanced Editor.
let
Source = Excel.Workbook(Web.Contents("https://powerbitips03.blob.core.windows.net/blobpowerbitips03/wp-content/uploads/2017/02/US-Crime-Data.xlsx"), null, true),
#"US Crime Data_Sheet" = Source{[Item="US Crime Data",Kind="Sheet"]}[Data],
#"Promoted Headers" = Table.PromoteHeaders(#"US Crime Data_Sheet", [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"State", type text}, {"Area", type text}, {"Violent Crime", Int64.Type}, {"Murder and Non-negligent Manslaughter", Int64.Type}, {"Robbery", Int64.Type}, {"Aggravated Assault", Int64.Type}, {"Property Crime", Int64.Type}, {"Burglary", Int64.Type}, {"Larceny Theft", Int64.Type}, {"Motor Vehicle Theft", Int64.Type}}),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"State", "Area"}, "Attribute", "Value")
in
#"Unpivoted Other Columns"
Before you exit the query editor Rename the query to US Crime. It should look similar to the following:
On the Home ribbon click Close & Apply to load the data into the data model.
Lets add a little color to the Page in the form of a map. Inside the Visualizations pane click on the Shape Map visual. Add the appropriate fields as shown in the image below.
We added this map as to make our page look pretty as well as, we can now click on each state and use this as a filtering mechanism.
Next, add the Matrix visualization which is found on the Visualizations pane. Add the fields shown in the image below.
To illustrate the wrapped row headers as described in the Power BI blog simply hover your mouse over the header until a double arrow appears. Then left click on the mouse to select the edge of the Area column.
Drag the edge of the Area column left until it covers some of the text of the row labels, see below for example.
Next, in the Visualizations pane click on the Paint Roller and expand the section labeled Row headers. In the Row headers section toggle the Word wrap switch to On.
After turning the Word wrap on you’ll notice that row headers did not word wrap. This is because the row headers have a caveat. The word wrap in rows will only work if row grouping is long enough to accommodate the word wrap. To illustrate this, add the State field underneath the Area field in the Rows section in the Visualizations pane.
We can now see by adding the States after the Area field that the Area Cities Outside Metropolitan Areas now has enough room to word wrap. An important observation with the row headers word wrap is that the word wrap will be affected by other filtering selections on the visual page. For example if I only select the state of Texas the row header for Area does not have enough room and therefore it is shortened and the “…” appears.
When I was first exploring the Matrix row Headers Wrap I was quite confused on how I was able to actually make the headers wrap. After playing around with the feature a while I was able to figure out the functionality. Thanks for following along, see that wasn’t so political. Now you can take this wonderful knowledge back to your workplace and make promises you can keep (OK, there it was, insert political jab).
If you liked this tutorial please be sure to share. Also if you want to know more about me you can visit my About page and follow me on twitter or Linkedin for updates.
The long awaited PowerBI Desktop release is here. I’d like to point out a couple of key features that will help you improve your reports. First, the addition of word wrap on row headers. The tutorial for working with row headers is found here. A second feature that will help beginner users is the addition of two new Quick Calcs. The Quick Calcs allow you run calculations within a visual without the need to write a DAX measure. It’s nice to see some of the more common calculations being added as standard features.
For the full release notes from Microsoft follow this link.
Quick Calculations:
For other great Power BI videos click the image below:
This past week I was talking with the big guy up north, jolly old fella, and the discussion came up about his toy production levels. Santa was complaining about how hard it was to measure the performance of all his elves. Naturally I started babbling about how much I enjoy Power BI and that I use it on all kinds of sources of data, google analytics, excel sheets, sharepoint, and SQL data warehouses just to name a few. Now by this point most people would have wandered off looking for another conversation, but I must have struck a chord with Santa. He jumped right in the conversation and told me how he had just moved all his local data centers into Azure and more specifically SQL data warehouses. It was saving him loads of money in addition it has freed up all his I.T. elves to move to more important tasks, building the NES Classic for Nintendo, they are way behind in production. To make a long story longer, I was able to convince Santa to give me a small sample of data so I could show him how to use R to visualize his data in PowerBI. Here is what I came up with:
Needless to say he was very pleased. I explained the chart to Santa, each bar represents the average production volume for each elf. Then the whiskers at the end of the bar represent the +1 and -1 standard deviation away from that mean. It essentially tells you how consistent each elf is able to produce products and what is the average production rate. For example, Buddy the Elf can produce an average 148 items in a day, he has a daily variance of 10 items. Charlie can produce on average more items but has a wider daily variance. Snowflake has the lowest average production level but is one of the more consistent producers. Santa gave me a big smile and said “nice job.”
Let’s walk through how I did this.
Open up PowerBI Desktop, Click the Get Data button on the Home ribbon and select Blank Query. Click Connect to open the Query Editor. ClickAdvancedEditor on the View ribbon. While in the Advanced Editor paste the following code into the editor window, click Done to complete the data load.
Note: If you need some more help loading the data follow this tutorial about loading data using the Advanced Query Editor. This tutorial teaches you how to copy and paste M code into the Advanced Editor.
let
Source = Excel.Workbook(Web.Contents("https://powerbitips03.blob.core.windows.net/blobpowerbitips03/wp-content/uploads/2016/12/Santa-Production.xlsx"), null, true),
Production_Table = Source{[Item="Production",Kind="Table"]}[Data],
#"Changed Type" = Table.TransformColumnTypes(Production_Table,{{"Elf", type text}, {"Toy", type text}, {"Prodution Volume", Int64.Type}})
in
#"Changed Type"
Before you exit the query editor Rename the query to Production. It should look similar to the following:
Click Close & Apply on the home ribbon.
Add the following measures by click on the New Measure button on the Home ribbon.
Avg = AVERAGE(Production[Prodution Volume])
The Avg measure will determine the height of each bar in the bar chart.
StdDev = STDEV.P('Production'[Prodution Volume])
The StdDev will calculate the standard deviation for each elf.
Ymax = [Avg]+ [StdDev]
The Ymax calculation adds the Avg measure value to the standard deviation for production. This produces the upper arm of the whisker.
Ymin = [Avg]-[StdDev]
The Ymin calculation is subtracts the standard deviation from the Avg measure value. This produces the lower arm of the whisker.
Once you have completed making all the measures you should have a Production table with the following fields:
Add the table visual by click on the Table visual in the Visualizations pane. Add the Fields which are shown below. Your table should look identical to this:
Next, add the R Visual from the visualization Pane. When you click on this you will get a message stating “Enable Script Visuals” click Enable to proceed.
Note: If you have not installed R or enabled the preview features of R in Power BI you should follow this tutorial which helps you get everything set up. For this particular visual we are using ggplot2. This is a package for R and should be installed in the R environment. You can follow this tutorial on how to install ggplot2.
Add the following fields into the R visual:
Next in the R Script Editor add the following code to generate the R Script.
library (ggplot2) # Load ggplot to run visuals
# Set up graph
ggplot(dataset, aes(x = Elf, y = Avg) ) +
# Insert the bar chart using acutal values passed to visual
# Stat = “identity” does not count items uses actual values
# set up transparency to 70% with Alpha
geom_bar( stat = “identity”, aes( alpha= 0.7, fill = Elf ) ) +
# draw the error bars, use pass Ymin & Ymax from PBI
geom_errorbar(aes(width = .5, colour = Elf , ymin = Ymin, ymax = Ymax)) +
# Change the Labels
labs(x = “Elf Name”, y = “Production Vol.” ) +
# Make the theme simple and remove gridlines
# Change the font size to 14
theme_classic( base_size = 18 ) +
# Remove the legend
theme( legend.position = “none”) +
Note: This code uses the R package ggplot2. It will error out if you don’t have ggplot2 installed.
Click the run icon to execute the R script.
When the script runs you will have a beautiful production chart.
Thanks for following along. Like always be sure to share if you liked this content. I am always, looking for feedback and possible topics so make sure you leave a comment below.
If you want to download a similar example already completed you can download this example from the R Script Showcase (don’t forget to give me a thumbs up).
This tutorial is a variation on the month to month percent change tutorial. This specific exploration in year over year performance was born out of reviewing my google analytics information. The specific analysis question I am trying to answer is, how did this current month of website visitors compare to the same month last year. For example I want to compare the number of visitors for November 2016 to November 2015. Did I have more users this year in this month or last year? What was my percent changed between the two months?
Here is a sample of the analysis:
let’s begin with loading our data and data transformations. Open up PowerBI Desktop, Click the Get Data button on the Home ribbon and select Blank Query. Click Connect to open the Query Editor. ClickAdvancedEditor on the View ribbon. While in the Advanced Editor paste the following code into the editor window, click Done to complete the data load.
Note: If you need some more help loading the data follow this tutorial about loading data using the Advanced Query Editor. This tutorial teaches you how to copy and paste M code into the Advanced Editor.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("VdDBDcQwCETRXnyOFMAYcC1W+m9jV8BhfH1ygJ9zBr/8CvEaz+DYNL7nDAFjnWkTTNsUbIqnLfyWa56BOXOagy2xtMB5Vjs2mPFOYwIkikIsWd6IKb7qxH5o+bBNwIwIk622OCanTd2YXPNUMNnqFwomp0XvDTAPw+Q2uZL7QL+SC1Wv5Dpx/lO+Hw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [#"Start of Month" = _t, Sales = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Start of Month", type date}, {"Sales", Int64.Type}}),
#"Inserted Month" = Table.AddColumn(#"Changed Type", "Month", each Date.Month([Start of Month]), type number),
#"Inserted Year" = Table.AddColumn(#"Inserted Month", "Year", each Date.Year([Start of Month]), type number)
in
#"Inserted Year"
While still in the Query Editor rename the query to Data. Then click Close & Apply to complete the data load into the data model.
Next, make four measures. On the Home ribbon click the New Measure button. Enter the following to establish a reference date to the subsequent equations:
Date Reference = DATE(2016,12,31)
Enter in the following equation to calculate the last year monthly sales amount.
Note: Using the NOW() function calls the current time when the query was last run. Thus, if you refresh your data next month the NOW() function wrapped in a YEAR() will return the current year from the date-time observed by PowerBI.
Following the same process enter the following additional measures. The ThisYear measure calculates the sales for the current month.
Since the YoY Percent Change is a real percentage we need to change the formatting to a percent. Click on the YoY Percent Change measure then on the Modeling ribbon click the % symbol in the formatting section of the ribbon.
Next, add a Stacked Column Chart with the following columns selected.
OK, we have a chart, but it is kinda awkward looking right now. The x-axis is the month number but we don’t have a month 0. That simply does not make sense. Let’s change some of the chart properties. While having the Stacked Column Chart selected click on the Paint Roller in the Visualizations pane. First, click on the X-Axis and change the Type to Categorical.
Then click on the Data Colors and turn on Diverging. Change the Minimum color to Red and the Maximum color to Green. Set the Center to a value of 0.
Click on the Title change it something meaningful, Center the text and increase the font size.
Our bar chart looks much better. However, the month numbers do not look quite right. Visually the month indicators would be cleaner if we didn’t have any decimals. Click on the Month field and then on the Modeling ribbon change the Data Type to Whole Number. There will be a warning letting you know that you are changing the Data Type of the Whole number. Click OK to proceed with the change.
Another successful percent change tutorial completed. I hope you enjoyed this year over year month comparison example. Make sure you share if you like what you see.
In the October update of PowerBI Desktop we were given a number of really useful features, ranging from a new Date Slicer, Grid lines, Grouping, Binning, Top N Filters, and R-powered custom visuals. For the full release on the October 2016 software release you can read more here.
For those of you who have followed my site you already know that I absolutely love the ability to create R-visuals within PowerBI. If you want to learn more you can read the R script tutorials here.
As I’ve been exploring this October release of Power BI Desktop two features have really stood out. First, the ability to use the Date Slicer and second the new feature of Grouping for Bar Charts. In my daily work flow I have struggled in the past with solutions which are now solved.
Welcome to my love & hate relationship with time bound data sets. Inevitability at some point you will encounter a need to manipulate data over time. Common business questions will come in the form of: What was my percent change compared from this month compared to last month? What is my sales performance for this year? Are we up or down compared to the same period last year? While these questions are simple I have found that calculating measures and subsequently building visuals can get very complex in a hurry. Enter the Date Slicer. Let me be clear, the Date Slicer will not solve all your problems, it does present a very useful interface that will let report users quickly navigate through their time delineated data.
What is the Date Slicer? I’m glad you asked. Behold….
Here are a couple of key items to point out. On the left side of the visual you are given the ability to select the starting date, and ending date.
The bottom of the Date Slicer has an adjustable time bar that allows quick time adjustments.
On the right side of the visual you can toggle between different date selection modes, Between, Before, After, and List.
Ok, enough about the Date Slicer, how about the Groupings feature. Lets say you start off with a bar chart that looks similar to the following:
Well, maybe you’re only interested in Items 9, 10, and 5. Grouping now allows the selection of multiple bars and by right clicking you can Group, Include, or Exclude.
Clicking group creates a new column in the Fields area that groups the items together and adds them to the chart legend.
Let me tell you this is helpful, especially when your bar chart looks like this:
Be honest, you have published a report or two when there were just way to many bars. The different between the largest bar and all the small bars barely tells you any information. This is why grouping is helpful. When you receive data and you need to focus your story to the important pieces then grouping is your friend.
Enough babbling, let’s get to the tutorial.
Open up PowerBI Desktop, Click the Get Data button on the Home ribbon and select Blank Query. Click Connect to open the Query Editor. ClickAdvancedEditor on the View ribbon. While in the Advanced Editor paste the following code into the editor window, click Done to complete the data load.
Note: If you need some more help loading the data follow this tutorial about loading data using the Advanced Query Editor. This tutorial teaches you how to copy and paste M code into the Advanced Editor.
let
Source = Excel.Workbook(Web.Contents("https://powerbitips03.blob.core.windows.net/blobpowerbitips03/wp-content/uploads/2016/11/Sales-Data-Two-Years.xlsx"), null, true),
Sales_Table = Source{[Item="Sales",Kind="Table"]}[Data],
#"Changed Type" = Table.TransformColumnTypes(Sales_Table,{{"Date", type date}, {"Product", type text}, {"Sales", Int64.Type}})
in
#"Changed Type"
Rename the Query to Sales Data. Once you’ve completed the data load your data should look like the following.
On the Home ribbon click Close & Apply to complete the data load.
Great, we are ready to start adding visuals now. Add a Slicer visual from the Visualizations window and populate the visual with the Date field. By default, the slicer will auto recognize that the field being added is a date and will automatically show the Date Slicer.
Next, add a bar chart visualization. The Date field will be the Axis, and the Sales will be the Value.
Again by default the Date filed will be entered as a Hierarchy field. Click the Drill Down button until you see a monthly view of the date. This should require two clicks, the first drills down to quarters, then second click drills down to month level. After doing this your visual should look like the following:
Add a second bar chart with following fields selected.
Sort the Sales by Product bar chart in descending sale order by clicking the Ellipsis and when the drown down menu appears selecting Sort by Sales.
Now that we have built a couple visuals and a Date Slicer, take some time to explore how the Date Slicer interacts with the bar charts. In the example below I modified the starting date to 6/1/205 and the ending date to be 9/30/2015.
To utilize the grouping feature we will group Items 1,2,3 and 4 together. While holding the control button click Items 1,2,3 and 4 on the Sales by Product bar chart.
Right click Item 3 an menu will appear, select Group. Notice once you do this a new Product (Group) field appears in the field menu and the Product (Group) is automatically added to the legend of the bar chart visual.
To edit the grouping you can click on the Field labeled Product (groups) and select Edit Groups. Doing this reveals the grouping dialog box.
You can rename the created group by double clicking the name Item 1 & Item 2 & Item 3 & Item 4.
Change the name of the grouping to be titled Special Items. Click OK to close the Groups dialog box. Notice how the bar chart updates the legend values to renamed grouping.
Well, that wraps up this tutorial. I hope you enjoyed it. Below is a live demo of what we built today.
Make sure you share the content if you liked this tutorial.
The Pareto chart is a handy visual, but is not so easy to build in either excel or PowerBI. In a Pareto chart, information is provided about an individual product or category as a bar, and a cumulative scale as a line which compairs all bars. This type of visual can be extremely helpful when conducting failure mode analysis, causes of a problem, or even product portfolio balances. For some more information on Pareto charts you can learn more here or here. If you’re interested in building a Pareto chart in excel, I have found this post from Excel Easy to be helpful.
To give you a little teaser of what we will be building today, below you will see an image of the final Pareto chart. On the left side we have sales of units, and on the right is the cumulative percent of all sales. Using the Pareto chart a user has the ability to see which products comprise the majority of your sales. For example, the first 4 bars total approximately 50% of all sales.
Alright, let’s get started.
Open up PowerBI Desktop, Click the Get Data button on the Home ribbon and select Blank Query. Click Connect to open the Query Editor. ClickAdvancedEditor on the View ribbon. While in the Advanced Editor paste the following code into the editor window.
Note: If you need some more help loading the data follow this tutorial about loading data using the Advanced Query Editor. This tutorial teaches you how to copy and paste M code into the Advanced Editor.
let
Source = Excel.Workbook(Web.Contents("https://powerbitips03.blob.core.windows.net/blobpowerbitips03/wp-content/uploads/2016/10/Sample-Data.xlsx"), null, true),
Table1_Table = Source{[Item="Table1",Kind="Table"]}[Data],
#"Changed Type" = Table.TransformColumnTypes(Table1_Table,{{"Item", type text}, {"Sales", Int64.Type}, {"Segment", type text}})
in
#"Changed Type"
Rename the Query to Data. Once you’ve completed the data load your data should look like the following.
On the Home ribbon click Close & Apply to complete the data load.
Let’s begin with a little exploration of our data.
Pro Tip: When I am building reports I often load the data and then immediately start building a couple of tables and slicers. It helps me understand how my data reacts to the slicers and helps me determine how to shape the data so that the visuals will work properly. For this example, we only have one table, but when loading data things can get rather complex due to loading multiple tables with multiple relationships.
Add a Slicer for the Segment. Enhance the look of the slicer by changing it from a vertical to a horizontal slicer. While the slicer is highlighted, click the Paint Roller expand the General section and change the orientation from vertical to Horizontal.
Repeat the same process to add a Slicer for the item field.
Next, add a table view of all the fields. Start with Segment, then Item and finally add Sales to the Table Visual.
Notice, now that we added all the Fields, there are a number of repeating values. We have Category 1 and Item 1 repeated 9 times. In some cases, it will be necessary to have this level of data brought into the data model within PowerBI. A common reason is that this level of granularity is required for other report pages, or visuals. It is OK to bring large amounts of data, but as a method of best practice it is recommended that you bring in the data required to support the visuals.
Now, to address these multiple items that we see in our data. In the sample Pareto image provided at the beginning of this Tutorial we only had one bar for Category 2 Item 3. Thus, we need to summarize each grouping of every Category and Item combination. To do this we will construct a summary table.
First, we will create a unique Key that will be used to summarize each combination of Category and Item pair. Click the bottom half of the New Measure button located on the Home ribbon.
Enter the following DAX expression. This new column titled Blend will be the unique Key that is utilized to summarize the data.
Blend = Data[Segment] & "-" & Data[Item]
Select the Modeling ribbon and then click on the New Table button. Enter the following DAX expression.
For more information on the SUMMARIZE function you can visit the Mircosoft Summarize documentation page. In this equation we first select the table and in this case it is ‘Data’. Then the column we want to summarize or group by is the Segment column noted as Data[Blend]. The next field is the title of the summarized field column, noted as “Sum Sales”. Then DAX function that calculates the Sum of the column labeled Data[Sales], noted as SUM(Data[Sales]). It is relevant to point out here that the SUMMARIZE function will only work with building a new table and not as a calculated column or measure.
Add a new Table visual to the report and include the two newly created fields from the Summary table.
We have a field titled Blend which is our Key for all the summarized groupings. Next, we will want to parse out the Segments and Items from this blend column. We will want to use Category 1 & 2 in a slicer and the same for Items 1 to 5. Highlight the summary table by clicking the grey space next to the word Summary. Click the New Column button on the Modeling ribbon and enter the following DAX expression.
In this expression the Substitute function replaced the dash “-” with a “|” character. Then the PATHITEM function can then parse the text into segments. By entering a 1 we select the first item in the sequence. For our example we only have two items, but when you’re working with file paths you can have multiple items in the path such as “\users\mike\my documents\my folder\”, which would equate to users = position 1, mike = position 2, my documents = position 3, etc..
Add another new column with the following DAX expression for the item column.
Note: We changed the PATHITEM position from 1 to 2.
Next add the newly created Segment and Item columns to our summary table visual that we created earlier.
Nice job so far. Now we have to modify our slicers to point to the new Item and Segment fields we created in the Summary table. Select the Segment Slicer Visual and add the Segment Field from the Summary table.
Now that we have updated the slicers, we can now can control the table visual made from the Summary table.
Pro Tip: To select multiple items in a slicer you can hold down the Ctrl button on the key board and click multiple slicer items. This is how I was able to select Items 1 to 3.
Now we are ready to build the measures that will support the Pareto chart. Click on the bottom half of the New Measure button on the Home ribbon and select New Column. Add the following DAX expression to rank all the items in the Summary table.
Ranking = RANKX( 'Summary', 'Summary'[Sum Sales])
Add a measure for the Cumulative total according to the new ranking column we created. Click the top half of the New Measure button on the Home ribbon. Add the following DAX expression.
Repeat the add measure process and add a Total measure which will total only the items from the summary table that have been selected in the report view. Add the following DAX expression.
The Cumulative Percent measure is a calculated as a percentage, thus we need to change this measure’s formatting to percentage. Click the measure labeled Cumulative Percent then change the Format to Percentage which is found on the Modeling ribbon.
Your Summary table should now look like the following.
To see all the calculations that we just created add all the fields from the Summary table to the Summary table visual we created earlier.
At last, we are ready to add the Pareto chart. Add the following fields to the line and stacked column chart.
Order the data in descending order by the number of sales by click the visual’s Ellipsis and selecting Sort By Sum Sales.
This changes the order of the items to make a Pareto chart.
Thanks for following along. Share if you enjoyed this tutorial.
Mapping is one of the better features of PowerBI. It is one of the more distinguishing feature differences between Excel and PowerBI. You can produce a map inside an excel document using Bing maps, however, the experience has always felt a little like an after-thought. Mapping within PowerBI has a planned, and thoughtful integration. While the mapping functionalities within PowerBI Desktop are far improved when compared to excel, there are still some limitations to the mapping visuals. This past week I encountered such an example. We wanted to draw a map of the United States, add state name labels and some dimensional property like year over year percent change.
I started with the standard map visual, but this didn’t work because there is no ability to shade each state individually. This just looked like a bubbled mess.
Next, I tried the Filled Map visual. While this mapping visual provides the colored states it lacks the ability to add data labels onto the map. Clicking on the map would filter down to the selected state, which could show a numerical value. Alternatively, you can place your mouse over a state and the resulting tag will show the details of the state (hovering example provided below).
Still this did not quite meet my visual requirements. I finally decided to build the visual in R which provided the correct amount of flexibility. See below for final result. You can download the pbix file from the Microsoft R Script Showcase.
In this visual, each state is shaded with a gradient color scale. The states with the lowest sales are grey and the states with higher sales numbers transition to dark blue. The darker the blue the more sales the state saw. Each state has an applied label. The color of the label denotes the percent change in sales. If the color is green then the sales this year were higher than last year, red means that the state sales were lower this year. The state name is listed in the label as well as the calculation for the year over year percent change.
Alright, let’s start the tutorial.
First, before we open PowerBI we need to load the appropriate packages for R. For this visual you will need to load both the maps and the ggplot2 packages from Microsoft R Open.
Open the R console and use the following code to install maps.
install.packages('maps')
Repeat this process for installing ggplot2.
install.packages('ggplot2')
After installing the R packages we are ready to work in PowerBI Desktop. First, we need to load our sample data. Open up PowerBI Desktop and start a blank query. On the View ribbon in the query editor open the Advanced Editor and enter the following M code.
Note: If you need some more help loading the data follow this tutorial about loading data using the Advanced Query Editor. This tutorial teaches you how to copy and paste M code into the Advanced Editor.
let
Source = Excel.Workbook(Web.Contents("https://powerbitips03.blob.core.windows.net/blobpowerbitips03/wp-content/uploads/2016/10/State-Data.xlsx"), null, true),
StateData_Table = Source{[Item="StateData",Kind="Table"]}[Data],
#"Changed Type" = Table.TransformColumnTypes(StateData_Table,{{"StateName", type text}, {"Abb", type text}, {"TY Sales", Int64.Type}, {"state", type text}, {"Latitude", type number}, {"Longitude", type number}, {"LY Sales", Int64.Type}, {"Chng", type number}}),
#"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"TY Sales", "Sales"}})
in
#"Renamed Columns"
After pasting the code into the Advanced Editor click Done to load the data. While in the Query Editor, rename the query to be StateData, then click Close& Apply on the Home ribbon.
We still need to prepare the data further by adding two calculated columns. Click the bottom half of the New Measure button on the Home ribbon and select New Column.
Enter the following code into the formula bar that appears after clicking New Column.
Again, click on the New Column button found on the Home ribbon and add the code for a color column.
Color = if(StateData[Chng] > 0 , "Dark Green", "Dark Red")
The Fields list should now look like the following.
Add the R visual with the following fields.
Add the following R script into the R Script Editor.
# Load the ggplot2 and maps packages
library(ggplot2)
library(maps)
# Load the mapping data into a dataframe called states_map
states_map <- map_data("state")
# Start ggplot2 by sending it the dataset and setting the map_id variable to state
ggplot(dataset, aes(map_id = state)) +
# Add the map layer, define the map as our data frame defined earlier
# as states_map, and define the fill for those states as the Sales data
geom_map(map = states_map, aes(fill=Sales)) +
# Add the data for the labels
# the aes defines the x and y cordinates for longitude and latitude
# colour = white defines the text color of the labels
# fill = dataset$Color defines the label color according to the column labeled Color
# label = dataset$Change defines the text wording of the label
# size = 3 defines the size of the label text
geom_label( aes(x=Longitude, y=Latitude),
colour="white",
fill=dataset$Color,
label=dataset$Change, size=3
) +
# define the x and y limits for the map
expand_limits(x = states_map$long, y = states_map$lat) +
# define the color gradient for the state images
scale_fill_gradient( low = "dark grey", high = "#115a9e") +
# remove all x and y axis labels
labs(x=NULL, y=NULL) +
# remove all grid lines
theme_classic() +
# remove other elements of the graph
theme(
panel.border = element_blank(),
panel.background = element_blank(),
axis.ticks = element_blank(),
axis.text = element_blank()
)
After adding the R script press the execute button to reveal the map.
Notice how we have data included for Alaska and Hawaii but those states are not drawn. We want to remove the Alaska and Hawaii data points. Add the StateName field to the Page Level Filters and then click Select All. Now, un-check the boxes next to Alaska and Hawaii. The data is now clean and the map correctly displays only the continental United States.
Here is the filtered final map product.
Thanks for following along. I hope you enjoyed this tutorial. Please share if you liked this content. See you next week.