tag:blogger.com,1999:blog-86632848497818507462024-03-12T21:37:38.774-07:00Paint By NumbersBlog focusing on my experiments with data visualisation using Tableau Software.PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.comBlogger68125tag:blogger.com,1999:blog-8663284849781850746.post-21016233698376309102017-01-03T17:46:00.000-08:002017-01-06T13:55:59.892-08:00What's Peter been listening to in 2016?<br />
Back at the end of March I published my <a href="http://paintbynumbersblog.blogspot.com/2016/03/whats-peter-been-listening-to-my-first.html">first data viz based on Spotify listening data</a> scrobbled to Last.fm. This also included some how to instructions, check it out.<br />
<br />
Well that data was only for Q1 2016, so I thought I'd revisit my numbers at the end of the year. Here's my 25 most listened to Spotify artists of 2016.<br />
<br />
Can you figure out the night I saw Chris Staples and Car Seat Headrest?<br />
<br />
<div class="tableauPlaceholder" id="viz1483494347713" style="position: relative;">
<noscript><a href='#'><img alt='What's Peter Been Listening To? 2016 ' src='https://public.tableau.com/static/images/Wh/WhatsPeterBeenListeningTo2016/WhatsPeterBeenListeningTo2016/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" style="display: none;"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='WhatsPeterBeenListeningTo2016/WhatsPeterBeenListeningTo2016' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Wh/WhatsPeterBeenListeningTo2016/WhatsPeterBeenListeningTo2016/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /></object><br />
<br />
And below the viz are all the featured tracks in a lovely playlist<br />
<br /></div>
<script type="text/javascript"> var divElement = document.getElementById('viz1483494347713'); var vizElement = divElement.getElementsByTagName('object')[0]; vizElement.style.width='904px';vizElement.style.height='769px'; var scriptElement = document.createElement('script'); scriptElement.src = 'https://public.tableau.com/javascripts/api/viz_v1.js'; vizElement.parentNode.insertBefore(scriptElement, vizElement); </script>
<iframe allowtransparency="true" frameborder="0" height="380" src="https://embed.spotify.com/?uri=spotify%3Auser%3A1299498871%3Aplaylist%3A7liOpGZ0zyAZSa7oNqEnVm" width="300"></iframe>PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com0tag:blogger.com,1999:blog-8663284849781850746.post-14717912330185266782016-09-14T15:47:00.001-07:002016-09-19T13:54:29.841-07:00Iron Viz - Device DesignerTableau Public recently announced the <a href="http://public.tableau.com/en-us/s/blog/2016/09/submit-your-mobile-viz-chance-compete-iron-viz">last of the three entry contest for the 2016 Iron Viz</a>, so I thought I'd have a crack!<br />
<br />
Update: all entries are <a href="https://public.tableau.com/en-us/s/blog/2016/09/time-vote-mobile-edition-entries?utm_source=Hootsuite&utm_medium=Social&utm_campaign=TableauSocial&hootPostID=1de49213314d954fb87c6cabee81063b">now up here</a> and if you like mine you can vote by tweeting #MobileIronVizpgilks<br />
<br />
This contest was a bit different from others because the instruction was not based around a data topic but instead you need to show that you have used the new <a href="https://www.tableau.com/about/blog/2016/6/device-designer-56018">Device Designer feature</a>, and design a single dashboard that work on both mobile and desktop - and the data topic is open ended!<br />
<br />
I found this contest much more of a challenge to get started with than previous contests. One reason was the open ended question of what data set to use - where do I even start and what hasn't been done before? When I enter a contest like this I like to try and do something completely original, but the Tableau Public library is becoming crowded, especially with things like <a href="http://www.vizwiz.com/p/makeover-monday-challenges.html">Make Over Monday</a> happening, and it can feel like the number of unexplored datasets is quickly diminishing.<br />
<br />
After much handwringing I decided to go back to an idea that I had ages ago, back in 2013, just after I made <a href="http://paintbynumbersblog.blogspot.co.uk/2013/09/skyscrapers-in-new-york-viz-for-my-new.html">this viz about the tallest buildings in New York</a>. And that was to do something about the most extreme roller coasters in the world. So I thought I'd revisit this topic, and at the very least if it didn't win it would scratch a long standing itch. I don't have as much time for Tableau Public as I used to and so its nice to use the time for something I have had on the to-do list for a good while.<br />
<br />
The other tough bit about this was using the Device Designer to make a mobile friendly dashboard as I haven't done that before and needed to get used to the new feature. I learned a few things about it which I'll detail below.<br />
<br />
Below is the finished design - you might note that its pretty simple, and this is purposeful. I wanted to challenge myself to see if I could make an engaging dashboard that could <b>fit onto a single phone screen without scrolling. </b>My thinking here was that, to put it bluntly, most people can't be bothered to scroll. And scrolling with interactive dashboards can sometimes cause click confusion. Of course in order to achieve a single screen view, it needs to be very simple and pared back.<br />
<br />
Of here's a screen shot of the mobile version and the desktop version, and an interactive version is below. This will change depending on how you are viewing this blog!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-tM6KGKFqtwU/V9nNQjec2KI/AAAAAAAACFg/5kV9wbEfEUEOLpI6ldIeq9HVRUVmv63iACLcB/s1600/Screen%2BShot%2B2016-09-14%2Bat%2B6.20.12%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-tM6KGKFqtwU/V9nNQjec2KI/AAAAAAAACFg/5kV9wbEfEUEOLpI6ldIeq9HVRUVmv63iACLcB/s320/Screen%2BShot%2B2016-09-14%2Bat%2B6.20.12%2BPM.png" width="221" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-O7FM4aFzKA0/V9nNg1TIZrI/AAAAAAAACFk/VXl-Jiuel-wTq2fk66znKptE_VPDrc9BACLcB/s1600/Screen%2BShot%2B2016-09-14%2Bat%2B6.21.41%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="355" src="https://4.bp.blogspot.com/-O7FM4aFzKA0/V9nNg1TIZrI/AAAAAAAACFk/VXl-Jiuel-wTq2fk66znKptE_VPDrc9BACLcB/s400/Screen%2BShot%2B2016-09-14%2Bat%2B6.21.41%2BPM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Data is sourced from <a href="http://rcdb.com/">rcdb.com</a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
!!! Update: I just tested this blog post on my phone and the viz below looks all screwed up, please c<a href="https://public.tableau.com/views/RecordBreakingCoasters/RecordBreakingCoasters?:embed=y&:display_count=yes&:showVizHome=no">lick this </a>for how it should look if you are browsing my blog on a phone </div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="tableauPlaceholder" id="viz1473891732211" style="position: relative;">
<div style="text-align: center;">
<noscript><a href='#'><img alt='Record Breaking Coasters ' src='https://public.tableau.com/static/images/Re/RecordBreakingCoasters/RecordBreakingCoasters/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" style="display: none;"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='RecordBreakingCoasters/RecordBreakingCoasters' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Re/RecordBreakingCoasters/RecordBreakingCoasters/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /></object></div>
</div>
<script type="text/javascript"> var divElement = document.getElementById('viz1473891732211'); var vizElement = divElement.getElementsByTagName('object')[0]; if ( divElement.offsetWidth > 800 ) { vizElement.style.width='804px';vizElement.style.height='769px';} else if ( divElement.offsetWidth > 500 ) { vizElement.style.width='804px';vizElement.style.height='769px';} else { vizElement.style.width='100%';vizElement.style.height=(divElement.offsetWidth*0.75)+'px';} var scriptElement = document.createElement('script'); scriptElement.src = 'https://public.tableau.com/javascripts/api/viz_v1.js'; vizElement.parentNode.insertBefore(scriptElement, vizElement); </script>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
So what did I learn making this viz?<br />
<br />
<b>1. Keep things (even more) simple</b><br />
<b><br /></b>
I'm a big fan of simple straight forward design in Tableau, but with mobile you have to taker that to another level. A couple of tips that I took from <a href="https://public.tableau.com/en-us/s/blog/2016/08/tips-designing-dashboards-mobile-devices">Dash Davidson's blog post</a> were to ensure I lock my map and to use only actions as filters and avoid quick filters and other drop downs. Drop down menus can obscure everything on mobile so are best avoided. I also tried to keep my sheet arrangement simple so I could be sure it would look consistent across different platforms, and to avoid potential confusion brought in by things like hidden sheets that pop out.<br />
<br />
Tooltips are also hard to use on mobile because of the space constraints and so I limited these to only the bar chart and used highlight labelling instead on the map.<br />
<br />
The challenge of keeping things really simple actually turned out to be quite worthwhile - it's easy to get carried away building fancy things in Tableau almost for the sake of it. The restrictions of designing for mobile focus the mind on what's really useful. I have even more respect for app designers now!<br />
<b><br /></b>
<br />
<b>2. The order that you make things with Device Designer matters, a lot</b><br />
<br />
In my first attempt at this viz, I went straight to the 'Phone' setting on the Device Designer and designed a viz that would look good on a phone. The thinking here was to design 'mobile first' as mobile is these days the primary route to the web, and because the contest was introducing a mobile component.<br />
<br />
The difficult thing about this was what happened when I tried to take this as the basis and go and build out a desktop version.<br />
<br />
The rookie mistake I had made was not to build the 'Default' dashboard first, and so everything I had done on the phone version was not there for other versions and I had to try and build things back up from scratch. I got pretty confused with the workflow and ran myself around in circles.<br />
<br />
Eventually I decided to scrap my efforts and start again. This time I designed 'desktop first' within the Default view, and then adapt to phone. From a practical point of view this proved to be much easier. But it also meant that everything I was doing I was also having to think one step ahead to 'what will this look like when I switch to phone'.<br />
<br />
<b>3. Font sizes are tricky!</b><br />
<b><br /></b>
Even though a desktop screen can be really big, and a phone screen is really small, your fonts used within sheets are not going to automatically re-size. I wanted big fonts on desktop and small fonts on mobile, but this would have meant making multiple versions of the 'Default' view and would have negated the purpose of the Device Designer. So I spent some time trying to pick font sizes that looked reasonable on both devices.<br />
<br />
<b>4. You can't use new sheets, but you can use new objects</b><br />
<b><br /></b>
The way the DD works, only the sheets in your default view are available to you to use in your device specific versions. So you can't have a 'big bold' version and a 'small simple' version of the same sheet. At least I don't think you can without doing something clever with hidden sheets. I didn't want to get involved in that kind of trickery so I worked within the limits most users will experience.<br />
<br />
You can however add new images, text objects and web objects, so this gives you some flexibility with titles and pictures. I tried to utilize this in my viz.<br />
<b><br /></b><b>5. You might have even less space than you think - always test the reality</b><br />
<br />
If you are going to make a mobile dashboard, you absolutely MUST test it on a phone. Looking at the view on Tableau Desktop, or using an emulator on your desktop is not going to do the trick. Your mouse pointer is very different from my fat fingers, and scrolling on your magic mouse is a lot different from scrolling with a thumb. If you don't test properly you might be kidding yourself as to how your viz looks and works.<br />
<br />
When I opened my viz on my phone I noticed that the visible screen was actually much smaller than I expected because of the extra headers that Tableau Public adds by default. You can get rid of these headers by altering the URL to include &:showVizHome=no, check out the difference between these two links on your phone<br />
<a href="https://public.tableau.com/views/RecordBreakingCoasters/RecordBreakingCoasters?:embed=y&:display_count=yes">https://public.tableau.com/views/RecordBreakingCoasters/RecordBreakingCoasters?:embed=y&:display_count=yes</a><br />
<a href="https://public.tableau.com/views/RecordBreakingCoasters/RecordBreakingCoasters?:embed=y&:display_count=yes&:showVizHome=no">https://public.tableau.com/views/RecordBreakingCoasters/RecordBreakingCoasters?:embed=y&:display_count=yes&:showVizHome=no</a><br />
<br />
<br />
Thing is, you can't guarantee that people will see your viz with the URL changes, so design for the worst/smallest possible scenario. Below is a picture of how my viz looked on Tableau Desktop as per iPhone 6, and then for real on my iPhone 6.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-ichLGoDq66I/V9nTL66_iYI/AAAAAAAACF0/k02Ef0IwEcIq2T0es0EosfZahyM7yX4qACLcB/s1600/Screen%2BShot%2B2016-09-14%2Bat%2B6.45.52%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="576" src="https://3.bp.blogspot.com/-ichLGoDq66I/V9nTL66_iYI/AAAAAAAACF0/k02Ef0IwEcIq2T0es0EosfZahyM7yX4qACLcB/s640/Screen%2BShot%2B2016-09-14%2Bat%2B6.45.52%2BPM.png" width="640" /></a></div>
<br />
<br />
<br />
Anyway, I think I finally got the hang of this, I hope my experiences above can help you get a head start on using this new feature. It is pretty cool to finally be able to know that your viz will be able to be viewed on a phone, and the restrictions of size are actually a welcome challenge that focusses your mind on simplicity.<br />
<br />
And I hope you enjoy exploring the worlds fastest, tallest, longest and most upsidedowny roller coasters...<br />
<br />
<br />
<br />
<br />
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com0tag:blogger.com,1999:blog-8663284849781850746.post-41237645230283227762016-07-21T19:09:00.001-07:002016-07-21T19:09:37.850-07:00Olympic MedalsHere's another <a href="http://www.revizproject.com/">ReViz</a>! This time Alex Duke through down the gauntlet of using Olympic medal data and came up with this <a href="https://public.tableau.com/s/gallery/sports-summer-olympics">Viz of the Day</a>. Also Dash Davidson had asked me if I would help Tableau create some Olympic themed vizzes that could be used for an exhibition. I cheated a bit because Alex's data did not have 2012 medals, so I went and found them to be up to date.<br />
<br />
So I decided to go for a pretty simple approach that could be printed out and used as a static image. I've also always been a fan of medal data that takes into account the size of a countries population for context, so I built in a switch to flip between total medals and medals per million people. If you are printing these out, you could place the two versions side by side.<br />
<br />
<br />
<br />
Anyway, here it is:<br />
<br />
<script src="https://public.tableau.com/javascripts/api/viz_v1.js" type="text/javascript"></script><br />
<div class="tableauPlaceholder" style="height: 2869px; width: 904px;">
<noscript><a href='#'><img alt='2012 Olympic Medals ' src='https://public.tableau.com/static/images/Ol/OlympicMedals_70/2012OlympicMedals/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" height="2869" style="display: none;" width="904"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='OlympicMedals_70/2012OlympicMedals' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Ol/OlympicMedals_70/2012OlympicMedals/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showTabs' value='y' /></object></div>
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com1tag:blogger.com,1999:blog-8663284849781850746.post-36124033666556160862016-07-12T16:56:00.001-07:002016-07-14T19:32:13.403-07:00Simple requirements gathering questions for dashboard designToday I gave a bit of a tutorial to my team at work* about how to develop effective dashboards and I included a section on how I like to gather requirements from the people I'm making the dashboard for. I basically have a framework of simple questions, that once complete should give you the bulk of what you need to know to build an effective and useful dashboard.<br />
<br />
I thought I'd share a version of it here. Please bear in mind of course that this is definitely a simplification - good requirements gathering is a conversation and entails a good deal of <b>understanding of the subject and data</b> - what I'm focussing on here is simply the content/structure of the dashboard.<br />
<br />
So here's what I do, I ask questions. I definitely do not ask 'what do you want to see?' or 'what numbers do you need?' as these open ended questions often lead to over loaded monstrosities that somehow don't get to the heart of the matter. And I don't get people to fill out forms, because that's boring.<br />
<br />
Here are some of the questions I ask, and how they can help me design a dashboard. I hope they help you too!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-VCi_ZsAoEKM/V4hLHMbMknI/AAAAAAAACEs/XlcKvCISkuYLYuvjxkOxAAKc7Xg-DXlkwCLcB/s1600/requirements3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://3.bp.blogspot.com/-VCi_ZsAoEKM/V4hLHMbMknI/AAAAAAAACEs/XlcKvCISkuYLYuvjxkOxAAKc7Xg-DXlkwCLcB/s640/requirements3.png" width="632" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
*did I mention I got a new job? I'm now working in Product Insights at Spotify, yay!PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com4tag:blogger.com,1999:blog-8663284849781850746.post-12262323418062150482016-05-25T17:52:00.001-07:002016-05-25T18:50:07.813-07:00ReViz - Tornadoes!I recently joined the wonderful<a href="http://www.revizproject.com/blog"> ReViz project</a> with Matt Chambers and Alex Duke, trying to fill the very large shoes left by Nelson Davis.<br />
<br />
If you're not familiar with the ReViz project I encourage you to check out the page and see the work that's been done so far.<br />
<br />
Matt recently kicked off a new ReViz by taking the Torndao dataset used in the <a href="http://public.tableau.com/profile/anya.#!/vizhome/TornadoAlley_0/TornadoAlley">2012 Iron Viz contest</a>, which was won by Anya A'Hearn and finding a <a href="http://sirvizalot.blogspot.com/2016/05/darkest-days-five-deadliest-tornado.html">new story which showed the five deadliest single days of Tornado outbreaks recorded in the USA</a>.<br />
<br />
When I got a hold of the data, I have to be honest I found it really hard to come up with another engaging story within the dataset that hadn't yet been covered. So instead I've created something that I hope is more of a striking visual. Taking inspiration from the famous US <a href="http://hint.fm/wind/">wind map</a> (see below) I wanted to show visually the volume and power of the tornados and how they are clustered around specific parts of the country.<br />
<br />
Wind Map:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-OAD1DOG_fxY/V0ZHeJ1vr3I/AAAAAAAACDM/7t34NugTZ64sLSIqdLIxStDSSbkvbphEwCLcB/s1600/Screen%2BShot%2B2016-05-25%2Bat%2B20.46.30.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="202" src="https://2.bp.blogspot.com/-OAD1DOG_fxY/V0ZHeJ1vr3I/AAAAAAAACDM/7t34NugTZ64sLSIqdLIxStDSSbkvbphEwCLcB/s320/Screen%2BShot%2B2016-05-25%2Bat%2B20.46.30.png" width="320" /></a></div>
<br />
<br />
I also wanted to show both just how common tornadoes are but also the degree to which fatalities from tornadoes come from a small number of very big instances. I also included some light interaction to let people zoom into their state, or to look at how things change over time.<br />
<br />
Unfortunately the resulting map is pretty slow to load, and so to mitigate that a bit I only included the most recent 10 years of data. The result is below:<br />
<br />
<script src="https://public.tableau.com/javascripts/api/viz_v1.js" type="text/javascript"></script><br />
<div class="tableauPlaceholder" style="height: 819px; width: 904px;">
<noscript><a href='#'><img alt='Tornadoes ' src='https://public.tableau.com/static/images/To/TornadoPG/Tornadoes/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" height="819" style="display: none;" width="904"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='TornadoPG/Tornadoes' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/To/TornadoPG/Tornadoes/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showTabs' value='y' /></object></div>
<br />
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com1tag:blogger.com,1999:blog-8663284849781850746.post-43195454708950267252016-05-12T09:14:00.002-07:002016-05-12T09:18:37.402-07:00The Usefulness of Unions in TableauRecently in some of my projects at work I've been making use of creating data unions before I bring the data into Tableau for ease of use and efficiency. This topic also came up at a recent NY Tableau User Group and seems to be a popular approach, so I thought I'd write up a quick how to on using 'unioned' data to your benefit in Tableau, with a couple of examples.<br />
<br />
Some of this will become less relevant when Tableau introduces cross database joins, and cross data source filters. But none the less it might be helpful for a while longer. It can help a lot getting around issues you may have with data blending, or with one to many joins or with avoiding having to resort to Parameters (which don't update with the data).<br />
<u><br /></u>
<u>Example 1 - Dealing with data at different levels of aggregation</u><br />
<u><br /></u>
Let's say you have two lots of sales data<br />
<br />
A. Sales per day for the last 6 weeks<br />
B. Sales per month for the last 3 years<br />
<br />
And you want to build a dashboard that allows you to switch between the two and/or you want to see data at both levels but have quick filters apply to both sets of data. Well the answer is easy - union that data!<br />
<br />
<br />
So take the data from this:<br />
<br />
A.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-KV3wC6DB_9w/VzNH4wxvZbI/AAAAAAAACAs/IoIcHY0qY0UmeP6UXpDhqHZ-xR1INaeUACLcB/s1600/Screen%2BShot%2B2016-05-11%2Bat%2B15.54.48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://2.bp.blogspot.com/-KV3wC6DB_9w/VzNH4wxvZbI/AAAAAAAACAs/IoIcHY0qY0UmeP6UXpDhqHZ-xR1INaeUACLcB/s200/Screen%2BShot%2B2016-05-11%2Bat%2B15.54.48.png" width="176" /></a></div>
<br />
B.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-4bz4qvg_O3s/VzNJQ0rSdBI/AAAAAAAACBA/PMbXziSlLLM64dl7SF84NjF4ocsvifS9gCLcB/s1600/Screen%2BShot%2B2016-05-11%2Bat%2B16.00.56.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://2.bp.blogspot.com/-4bz4qvg_O3s/VzNJQ0rSdBI/AAAAAAAACBA/PMbXziSlLLM64dl7SF84NjF4ocsvifS9gCLcB/s200/Screen%2BShot%2B2016-05-11%2Bat%2B16.00.56.png" width="174" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
(note American date format mm/dd/yy)<br />
<br />
To something like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-TaKwwtsHjsM/VzSfIa0dIUI/AAAAAAAACBs/cfeGOFmFgUIfO8VLnNkktT5vplNb72wYACLcB/s1600/Screen%2BShot%2B2016-05-12%2Bat%2B16.19.15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/-TaKwwtsHjsM/VzSfIa0dIUI/AAAAAAAACBs/cfeGOFmFgUIfO8VLnNkktT5vplNb72wYACLcB/s320/Screen%2BShot%2B2016-05-12%2Bat%2B16.19.15.png" width="225" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<br />
And then you can use 'Date Type' as a filter that lets you switch between the two:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-K_vwFcRZQT0/VzSd3bt7ZOI/AAAAAAAACBc/1yuhqgSvhZQxmvd9x3ix7cBh_ni7PhBEgCLcB/s1600/Screen%2BShot%2B2016-05-12%2Bat%2B16.13.57.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="188" src="https://2.bp.blogspot.com/-K_vwFcRZQT0/VzSd3bt7ZOI/AAAAAAAACBc/1yuhqgSvhZQxmvd9x3ix7cBh_ni7PhBEgCLcB/s400/Screen%2BShot%2B2016-05-12%2Bat%2B16.13.57.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
And if you use 'exact date' as your date field, you can easily switch between Daily and Monthly views in a time series chart:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-JhDRrCZNuo4/VzSeeWO4ChI/AAAAAAAACBg/cMbBhtQOa4g1UCTYOO1i0hD4Wxhw-H3QgCLcB/s1600/Screen%2BShot%2B2016-05-12%2Bat%2B16.12.58.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-JhDRrCZNuo4/VzSeeWO4ChI/AAAAAAAACBg/cMbBhtQOa4g1UCTYOO1i0hD4Wxhw-H3QgCLcB/s320/Screen%2BShot%2B2016-05-12%2Bat%2B16.12.58.png" width="283" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-ZyVAijGnS0c/VzSfVIFciII/AAAAAAAACB4/DluujRZr6RYbQfRsXGuDXVm6_zMOTZlZACLcB/s1600/Screen%2BShot%2B2016-05-12%2Bat%2B16.19.15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/-ZyVAijGnS0c/VzSfVIFciII/AAAAAAAACB4/DluujRZr6RYbQfRsXGuDXVm6_zMOTZlZACLcB/s320/Screen%2BShot%2B2016-05-12%2Bat%2B16.19.15.png" width="226" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-zprSv_8uEsA/VzSfVIflMLI/AAAAAAAACB0/J54SaUKjlJwOL2CcHcNrb6NfblKwPKThQCLcB/s1600/Screen%2BShot%2B2016-05-12%2Bat%2B16.20.00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="216" src="https://3.bp.blogspot.com/-zprSv_8uEsA/VzSfVIflMLI/AAAAAAAACB0/J54SaUKjlJwOL2CcHcNrb6NfblKwPKThQCLcB/s640/Screen%2BShot%2B2016-05-12%2Bat%2B16.20.00.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-5ChMXy4eaXI/VzSfX9hQnUI/AAAAAAAACB8/o7ypduG0GCEh3v3hs-lH94qT9NeSAdQPACLcB/s1600/Screen%2BShot%2B2016-05-12%2Bat%2B16.17.58.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="219" src="https://4.bp.blogspot.com/-5ChMXy4eaXI/VzSfX9hQnUI/AAAAAAAACB8/o7ypduG0GCEh3v3hs-lH94qT9NeSAdQPACLcB/s640/Screen%2BShot%2B2016-05-12%2Bat%2B16.17.58.png" width="640" /></a></div>
<br />
<br />
The main benefit to this is flexibility to the user, but also as you are using a single data source you don't need to worry about blends or joins, and you know that any filters will work with all charts.<br />
<br />
Another benefit is that this can be a very efficient way of working when you are dealing with very large databases. Joins can be costly from a performance point of view, and blends can be both costly and cause functionality constraints, so using a single table with a filter can speed things up.<br />
<br />
<br />
<u>Example 2 - Dealing with data at different stages or that has some shared fields</u><br />
<br />
In this case imagine you have two sets of data for application for, and sales of, mortgages. The data shares some fields.<br />
<br />
A. Application data<br />
B. Sales data<br />
<br />
A.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-1woAHrU2puU/VzSgoeM9lhI/AAAAAAAACCM/QymLRWG30j4cAa7fnuiglFxHSemtGLr8QCLcB/s1600/Screen%2BShot%2B2016-05-12%2Bat%2B16.25.40.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="https://4.bp.blogspot.com/-1woAHrU2puU/VzSgoeM9lhI/AAAAAAAACCM/QymLRWG30j4cAa7fnuiglFxHSemtGLr8QCLcB/s400/Screen%2BShot%2B2016-05-12%2Bat%2B16.25.40.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
B.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-QonHvoXFhxw/VzSg0nhM6_I/AAAAAAAACCQ/D7o0X6otNuI-lpu9dTAYxvcqVc1xlfztACLcB/s1600/Screen%2BShot%2B2016-05-12%2Bat%2B16.26.32.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="121" src="https://4.bp.blogspot.com/-QonHvoXFhxw/VzSg0nhM6_I/AAAAAAAACCQ/D7o0X6otNuI-lpu9dTAYxvcqVc1xlfztACLcB/s400/Screen%2BShot%2B2016-05-12%2Bat%2B16.26.32.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
Again, there are different ways you could deal with this data to create a dashboard, or series of dashboards. But again using blending or joins might cause some difficulty with data source filters, or if you end up with one to many joins. So a possible approach again is to Union the data and use similar fields together, and just leave blank values that don't apply to that part of the data. The resulting data might look something like this:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-z6C2wTRUMmg/VzSobia2xII/AAAAAAAACCk/G1Qsy5tPhy0L4XLpEY8ohOo4MyztWBZXQCLcB/s1600/Screen%2BShot%2B2016-05-12%2Bat%2B16.58.39.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="202" src="https://4.bp.blogspot.com/-z6C2wTRUMmg/VzSobia2xII/AAAAAAAACCk/G1Qsy5tPhy0L4XLpEY8ohOo4MyztWBZXQCLcB/s400/Screen%2BShot%2B2016-05-12%2Bat%2B16.58.39.png" width="400" /></a></div>
<br />
And again, you can use your Type field to easily switch between views, or to show both views on the same dashboard or view with a single filter for Product that doesn't rely on (undynamic) Parameters.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-F_IHkMEnChY/VzSrDp7xZaI/AAAAAAAACCw/nZGklJHkLYc7_cEZEH97sk3MF3SSsTSxACLcB/s1600/Screen%2BShot%2B2016-05-12%2Bat%2B17.08.36.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="222" src="https://4.bp.blogspot.com/-F_IHkMEnChY/VzSrDp7xZaI/AAAAAAAACCw/nZGklJHkLYc7_cEZEH97sk3MF3SSsTSxACLcB/s640/Screen%2BShot%2B2016-05-12%2Bat%2B17.08.36.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-i0aPT1RlNRQ/VzSrDjjquGI/AAAAAAAACC4/vuvoK4V_CngIZOX4KHt3FrgtIy18nEpgwCLcB/s1600/Screen%2BShot%2B2016-05-12%2Bat%2B17.08.51.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="230" src="https://3.bp.blogspot.com/-i0aPT1RlNRQ/VzSrDjjquGI/AAAAAAAACC4/vuvoK4V_CngIZOX4KHt3FrgtIy18nEpgwCLcB/s640/Screen%2BShot%2B2016-05-12%2Bat%2B17.08.51.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-ZqR-vqJYog8/VzSrDv3f2cI/AAAAAAAACC0/IUghVPY8VoQMwVFcnENY8TtpFeDLGlc2ACLcB/s1600/Screen%2BShot%2B2016-05-12%2Bat%2B17.09.48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="172" src="https://1.bp.blogspot.com/-ZqR-vqJYog8/VzSrDv3f2cI/AAAAAAAACC0/IUghVPY8VoQMwVFcnENY8TtpFeDLGlc2ACLcB/s640/Screen%2BShot%2B2016-05-12%2Bat%2B17.09.48.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-7XYU85qLYN0/VzSrD78HwrI/AAAAAAAACC8/hxW8uqfAjNARhwfAdSKfjvg1dDbf9xrQACLcB/s1600/Screen%2BShot%2B2016-05-12%2Bat%2B17.09.57.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="172" src="https://2.bp.blogspot.com/-7XYU85qLYN0/VzSrD78HwrI/AAAAAAAACC8/hxW8uqfAjNARhwfAdSKfjvg1dDbf9xrQACLcB/s640/Screen%2BShot%2B2016-05-12%2Bat%2B17.09.57.png" width="640" /></a></div>
<br />
<br />
And that's it! You can easily extend the logic here to build out more complex data sets for different scenarios. This approach can also help with performance against 'big' data, especially if you make you Type field numeric and use it as a sorted index in your database.<br />
<br />
Just be careful to make sure you know how you are using the Type, or similar, field in each view so that you don't double count.<br />
<br />
<br />
<br />
<br />
<br />
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com3tag:blogger.com,1999:blog-8663284849781850746.post-77612002648869390872016-04-25T17:42:00.001-07:002016-05-03T10:10:22.998-07:00Iron Viz - Food Fight! Exploring the international trade of fruits and vegetablesThe latest Iron Viz qualifier recently finished with the topic of 'Food Fight!' <a href="https://public.tableau.com/s/blog/2016/04/food-fight-winners-0">The winning design was by Russell Spangler</a> and you can <a href="https://public.tableau.com/s/blog/2016/04/entries-are-vote-your-favorite-food-fight-viz">find all the entries here</a>.<br />
<br />
Unfortunately for me it was another fruitless Tableau Public competition (pun intended) but I'm still very happy with my entry. I try to abide by the 'Keep it Simple Stupid' approach, which <a href="https://sciolisticramblings.wordpress.com/2016/01/31/tableau-keeping-it-simple-stupid/">Chris Love has so nicely vocalised with his #TableauKISS campaign</a>, by combining accessibility and fun with depth and functionality.<br />
<br />
The dashboard is designed to encourage interaction and to let you explore imports and exports by country and by produce type. Please click around the lower half of the viz to see what happens!<br />
<br />
I hope you enjoy navigating the data and find some interesting trade patterns or learn something about where the food on your supermarket shelf comes from. 'Food miles' are a pretty hot topic these days, and I don't think we always appreciate the global network of growers and distributors that bring us our food. And of course feel free to download it to see what's going on under the bonnet.<br />
<br />
The data was sourced from <a href="http://faostat.fao.org/">http://faostat.fao.org/</a> and includes all the latest import and export volumes across some 46 different fruits and vegetables and 211 countries. With all combinations this comes to almost 90,000 separate data points and my intention was to essentially follow the Tableau mission to help people see and understand the data.<br />
<br />
Here's my entry - The Global Grocer<br />
<script src="https://public.tableau.com/javascripts/api/viz_v1.js" type="text/javascript"></script><br />
<div class="tableauPlaceholder" style="height: 1069px; width: 904px;">
<noscript><a href='#'><img alt='The Global Grocer ' src='https://public.tableau.com/static/images/Th/TheGlobalGrocer/TheGlobalGrocer/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" height="1069" style="display: none;" width="904"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='TheGlobalGrocer/TheGlobalGrocer' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Th/TheGlobalGrocer/TheGlobalGrocer/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showTabs' value='y' /></object></div>
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com8tag:blogger.com,1999:blog-8663284849781850746.post-20910673766138343822016-03-30T20:32:00.004-07:002016-04-07T05:21:23.995-07:00What's Peter Been Listening To? My first (mis)adventures with scrobbling<br />
<script src="https://public.tableau.com/javascripts/api/viz_v1.js" type="text/javascript"></script><br />
<div class="tableauPlaceholder" style="height: 669px; width: 904px;">
<noscript><a href='#'><img alt='What's Peter Been Listening To? ' src='https://public.tableau.com/static/images/Q1/Q1Scrobbling/WhatsPeterBeenListeningTo/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" height="669" style="display: none;" width="904"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='Q1Scrobbling/WhatsPeterBeenListeningTo' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Q1/Q1Scrobbling/WhatsPeterBeenListeningTo/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showTabs' value='y' /></object></div>
<div>
<br />
The viz above shows the top 20 artists I've listened to on Spotify so far this year - here's the back story:<br />
<br />
For the last few years I've enjoyed reading Andy Cotgreave's blog posts where he takes a look at his listening habits by using data from Last.fm, <a href="http://gravyanecdote.com/tag/scrobble/">here's a good example</a>. And of course my pal Jewel has also played around with <a href="http://www.jewelloree.com/2014/05/08/pop-viz-beat-connection/">her listening data</a> too. So I finally decided to get myself in on the action.<br />
<br />
I should add also that this last year I've really fallen back in love with listening to music and discovering new bands. I was really into music as a teenager but kind of lost interest. But my Spotify subscription has really helped me get back into it and I probably listen to more new music than ever now - while still listening to all my old favourites.<br />
<br />
So, first of all how to collect the data. Its pretty simple:<br />
<br />
1) Get a Spotify account<br />
2) Get a last.fm account<br />
3) <a href="https://support.spotify.com/ph/using_spotify/search_play/scrobble-to-last-fm/">Link them on ALL your devices</a><br />
4) Download your data here thanks to Andy's friend Ben https://benjaminbenben.com/lastfm-to-csv/<br />
<br />
So to look at my data, first off lets check out the data quality:<br />
<br />
<script src="https://public.tableau.com/javascripts/api/viz_v1.js" type="text/javascript"></script><br />
<div class="tableauPlaceholder" style="height: 741px; width: 981px;">
<noscript><a href='#'><img alt='Data Accuracy ' src='https://public.tableau.com/static/images/Q1/Q1Scrobbling/DataAccuracy/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" height="741" style="display: none;" width="981"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='Q1Scrobbling/DataAccuracy' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Q1/Q1Scrobbling/DataAccuracy/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showTabs' value='y' /></object></div>
<br />
As you can see, I've had a few problems. A couple of times last.fm and Spotify got disconnected. I kept an eye on last.fm and noticed it had stopped Scrobbling (Scrobbling by the way is just keeping a record of your listens). And then very recently I realised that it wasn't picking up my mobile listens - I didn't know I had to change the settings on my devices individually.<br />
<br />
So I've lost quite a bit of data, but oh well. I'm also not 100% convinced its picking up ALL my Spotify plays.<br />
<br />
What else have I seen?<br />
<br />
<a name='more'></a><br />
<br />
<br />
I scrobbled 1,271 Spotify plays, of 887 tracks by 314 artists.<br />
<br />
I bucketed my listening into 5 genres:<br />
<br />
1. Hip-Hop (mostly pretty old-school)<br />
2. New Indie<br />
3. Old Indie and Rock (this is a wide category)<br />
4. Jazz<br />
5. Other<br />
<br />
<script src="https://public.tableau.com/javascripts/api/viz_v1.js" type="text/javascript"></script><br />
<div class="tableauPlaceholder" style="height: 741px; width: 981px;">
<noscript><a href='#'><img alt='Genre ' src='https://public.tableau.com/static/images/Q1/Q1Scrobbling/Genre/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" height="741" style="display: none;" width="981"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='Q1Scrobbling/Genre' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Q1/Q1Scrobbling/Genre/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showTabs' value='y' /></object></div>
<br />
New Indie is winning the day but there's a solid showing across the other genres. I really don't listen to other types of music much - but my Old Indie and Rock list is quite diverse.<br />
<br />
Looking at how my listening changes by day of the week and hour the day is quite interesting. Jazz is purely an evening and weekend thing - which makes sense as its usually on during dinner, or while I'm sat in my comfy chair reading a book.<br />
<br />
You can also see that after I switched on recording from my phone there is a lot more listening in the morning as I am walking into work. A lot of that is hip-hop as my downloaded songs include a few hip-hop focussed playlists I created. As my mobile numbers increase I expect to see a greater contribution coming from my saved songs.<br />
<br />
<script src="https://public.tableau.com/javascripts/api/viz_v1.js" type="text/javascript"></script><br />
<div class="tableauPlaceholder" style="height: 741px; width: 981px;">
<noscript><a href='#'><img alt='Day of the Week ' src='https://public.tableau.com/static/images/Q1/Q1Scrobbling/DayoftheWeek/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" height="741" style="display: none;" width="981"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='Q1Scrobbling/DayoftheWeek' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Q1/Q1Scrobbling/DayoftheWeek/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showTabs' value='y' /></object></div>
<br />
<script src="https://public.tableau.com/javascripts/api/viz_v1.js" type="text/javascript"></script><br />
<div class="tableauPlaceholder" style="height: 741px; width: 981px;">
<noscript><a href='#'><img alt='Time of Day ' src='https://public.tableau.com/static/images/Q1/Q1Scrobbling/TimeofDay/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" height="741" style="display: none;" width="981"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='Q1Scrobbling/TimeofDay' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Q1/Q1Scrobbling/TimeofDay/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showTabs' value='y' /></object></div>
<br />
I also went to a few concerts this year so I thought it would be interesting to see how my listening was affected by those.<br />
<br />
<script src="https://public.tableau.com/javascripts/api/viz_v1.js" type="text/javascript"></script><br />
<div class="tableauPlaceholder" style="height: 741px; width: 981px;">
<noscript><a href='#'><img alt='Concerts ' src='https://public.tableau.com/static/images/Q1/Q1Scrobbling/Concerts/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" height="741" style="display: none;" width="981"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='Q1Scrobbling/Concerts' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Q1/Q1Scrobbling/Concerts/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showTabs' value='y' /></object></div>
<br />
I definitely seem to listen just before and after a concert.<br />
<br />
Last but not least - what artists and tracks have I been listening to the most? Well its a tie between The War on Drugs, whom I have long liked, and Diet Cig who are a newish Brooklyn band I'm currently obsessed with. The top 20 includes some new bands like Tacocat (shout out to Jewel for the intro), some nostalgic choices like Bis and Idlewild, and a couple I just left on play for an afternoon or evening like Gruff Rhys and the Nat King Cole Trio. In fact there's a pretty even split between bands I listen to regularly, and ones I binge on once and them I'm done.<br />
<br />
I've also started using a service called <a href="http://theyams.com/">theyams.com</a> which is a group of folks who build playlists for you. This has had an influence on my listening habits and introduced me to Shunkan who made my top 20. I've been using Spotify playlists like Discover Weekly too. I discovered Diet Cig there but mostly its one and done and it makes up a good proportion of the long tail in my data.<br />
<br />
In all the top 20 artists account for 49% of plays.<br />
<br />
<script src="https://public.tableau.com/javascripts/api/viz_v1.js" type="text/javascript"></script><br />
<div class="tableauPlaceholder" style="height: 669px; width: 904px;">
<noscript><a href='#'><img alt='Dashboard 1 ' src='https://public.tableau.com/static/images/Q1/Q1Scrobbling/Dashboard1/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" height="669" style="display: none;" width="904"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='Q1Scrobbling/Dashboard1' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Q1/Q1Scrobbling/Dashboard1/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showTabs' value='y' /></object></div>
<br />
<script src="https://public.tableau.com/javascripts/api/viz_v1.js" type="text/javascript"></script><br />
<div class="tableauPlaceholder" style="height: 741px; width: 981px;">
<noscript><a href='#'><img alt='Pareto ' src='https://public.tableau.com/static/images/Q1/Q1Scrobbling/Pareto/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" height="741" style="display: none;" width="981"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='Q1Scrobbling/Pareto' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Q1/Q1Scrobbling/Pareto/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showTabs' value='y' /></object></div>
<br />
<i><span style="font-size: xx-small;">(I hope you enjoyed that but you can file this blog entry under <strike>data narcissism</strike> quantified self, so don't worry if it wasn't interesting to you) </span></i><br />
<br />
<br /></div>
PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com4tag:blogger.com,1999:blog-8663284849781850746.post-16815740437751605052016-03-19T06:20:00.000-07:002016-03-19T06:44:52.250-07:006 Simple Formatting Tricks to Tableau Like a BossLet's admit it right now, formatting in Tableau can be reeeaaalllllllyy tedious. BUT some time spent on formatting is what can turn just another dashboard into something that looks super slick. When I'm working with people who are new to Tableau they often show me their dashboard and ask why it doesn't look like mine - it's all in the details I explain, get the formatting right and your viz will look better immediately.<br />
<br />
So here are a few of my top tips for making simple but effective formatting changes in Tableau. Of course you might disagree with these, and that's also fine :-)<br />
<br />
<br />
<b><span style="font-size: x-large;">1. Lose the lines</span></b><br />
<b><br /></b>
By default, most chart types in Tableau come with axis lines, borders and reference lines. I like to get rid of almost all of these. Say we have this view below:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-8wf4j0S0lvk/Vu1AXbQv_MI/AAAAAAAAB9c/BDJRuCMZEwcYuXepb1TlawM6tAjObqhXg/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B08.04.13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="428" src="https://1.bp.blogspot.com/-8wf4j0S0lvk/Vu1AXbQv_MI/AAAAAAAAB9c/BDJRuCMZEwcYuXepb1TlawM6tAjObqhXg/s640/Screen%2BShot%2B2016-03-19%2Bat%2B08.04.13.png" width="640" /></a></div>
<br />
First I'm going to get rid of the borders by turning off row and column lines:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-RcKytAu2AyU/Vu1A2P9O9FI/AAAAAAAAB9o/GOCsSAfPBwATdG7ptnV8gBT30hnjH7v8A/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B08.05.56.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/-RcKytAu2AyU/Vu1A2P9O9FI/AAAAAAAAB9o/GOCsSAfPBwATdG7ptnV8gBT30hnjH7v8A/s320/Screen%2BShot%2B2016-03-19%2Bat%2B08.05.56.png" width="110" /></a><a href="https://3.bp.blogspot.com/--LabuGJHU54/Vu1A2KvwVxI/AAAAAAAAB9k/MFQtxCFIKj0On7su-uRSxd-fRPNxcDj3g/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B08.06.16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/--LabuGJHU54/Vu1A2KvwVxI/AAAAAAAAB9k/MFQtxCFIKj0On7su-uRSxd-fRPNxcDj3g/s320/Screen%2BShot%2B2016-03-19%2Bat%2B08.06.16.png" width="115" /></a><a href="https://4.bp.blogspot.com/-jiG9dnIuvTY/Vu1A2HFkr_I/AAAAAAAAB9g/VRMjamBpgMIO2V4Eghsmu_8PzKbPVAy2Q/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B08.06.25.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://4.bp.blogspot.com/-jiG9dnIuvTY/Vu1A2HFkr_I/AAAAAAAAB9g/VRMjamBpgMIO2V4Eghsmu_8PzKbPVAy2Q/s320/Screen%2BShot%2B2016-03-19%2Bat%2B08.06.25.png" width="105" /></a></div>
<br />
and do this for all of the sheets. But I am going to keep some row lines for the table, to differentiate between the departments.<br />
<br />
Then I also like to turn off the grid lines on scatter plots, most of the time these are completely unnecessary (IMO). To do this you use the paintbrush icon in formatting. I sometimes like to turn the zero lines off too, but not always, that really depends on how important being above or below zero is. In the example below, I'm going to keep the zero lines but make them a lighter tone of grey.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-1OP-MJEtR9M/Vu1CKDqavoI/AAAAAAAAB94/x_l1KWosvyEGX8sKgfpZE7wOoZKqHnwiQ/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B08.11.05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://1.bp.blogspot.com/-1OP-MJEtR9M/Vu1CKDqavoI/AAAAAAAAB94/x_l1KWosvyEGX8sKgfpZE7wOoZKqHnwiQ/s200/Screen%2BShot%2B2016-03-19%2Bat%2B08.11.05.png" width="116" /></a><a href="https://4.bp.blogspot.com/-OtDhKx2vulo/Vu1CKMfDaTI/AAAAAAAAB98/BB-bYze6oygDUzX2iiXpdXLX7t5gLY1Ag/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B08.11.26.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://4.bp.blogspot.com/-OtDhKx2vulo/Vu1CKMfDaTI/AAAAAAAAB98/BB-bYze6oygDUzX2iiXpdXLX7t5gLY1Ag/s200/Screen%2BShot%2B2016-03-19%2Bat%2B08.11.26.png" width="95" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
And finally I'm going to lose the row shading from the table by just moving the row banding to zero:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-bUt6an3uR_k/Vu1CneTXPoI/AAAAAAAAB-E/LuZry6ft1gA1bpzUM51JvDPgy--UtUKwA/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B08.13.38.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://4.bp.blogspot.com/-bUt6an3uR_k/Vu1CneTXPoI/AAAAAAAAB-E/LuZry6ft1gA1bpzUM51JvDPgy--UtUKwA/s200/Screen%2BShot%2B2016-03-19%2Bat%2B08.13.38.png" width="69" /></a><a href="https://2.bp.blogspot.com/-PIOM1jkEgGU/Vu1CnENb1jI/AAAAAAAAB-A/vMsn92VXicggmlje0MCREyDnr5eolACdg/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B08.13.51.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="182" src="https://2.bp.blogspot.com/-PIOM1jkEgGU/Vu1CnENb1jI/AAAAAAAAB-A/vMsn92VXicggmlje0MCREyDnr5eolACdg/s200/Screen%2BShot%2B2016-03-19%2Bat%2B08.13.51.png" width="200" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
And from just making those simple changes, our dashboard is already looking a lot cleaner....</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-YJNUm8nbOC8/Vu1DEZF7jDI/AAAAAAAAB-M/mE70rFFDq9gsLloJn1r6bTs1O0IXxXesg/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B08.15.59.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="427" src="https://4.bp.blogspot.com/-YJNUm8nbOC8/Vu1DEZF7jDI/AAAAAAAAB-M/mE70rFFDq9gsLloJn1r6bTs1O0IXxXesg/s640/Screen%2BShot%2B2016-03-19%2Bat%2B08.15.59.png" width="640" /></a></div>
<br />
<br />
<b><span style="font-size: x-large;">2. Sweat the fonts</span></b><br />
<br />
Font consistency is a very important part of giving a dashboard a overall look and feel. Often font choice is limited because of the server you will be publishing to, for example Tableau Public has <a href="http://kb.tableau.com/articles/knowledgebase/resolving-font-discrepancy">these fonts available</a>. However that's never an excuse for inconsistency, even if you have to use Arial everywhere. Font consistency does not mean that every word has to be written in the same size or color, but there should not be too much variety - I try to stick to a maximum of three different sizes and two different colors per dashboard. Often those colors will be a black or dark grey, and a color relevant to the topic or company.<br />
<br />
BUT here's one thing you absolutely must do with every dashboard!!!!!<br />
<br />
For some unknown reason Tableau defaults all fonts to Arial except titles, which it sets to Trebuchet MS. Please, please, please change this when you are changing your titles.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-aVJEdXUdqvQ/Vu1FfWZ9HzI/AAAAAAAAB-c/VQCgTWDPa9IueuwSLZcvidLGnvPn2a9qg/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B08.24.16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="110" src="https://4.bp.blogspot.com/-aVJEdXUdqvQ/Vu1FfWZ9HzI/AAAAAAAAB-c/VQCgTWDPa9IueuwSLZcvidLGnvPn2a9qg/s320/Screen%2BShot%2B2016-03-19%2Bat%2B08.24.16.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-6u1wtaEo84w/Vu1FiCkEawI/AAAAAAAAB-g/xYiJ2UutIkEUBka5XzTtvPr487s2Jdpgw/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B08.26.33.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="94" src="https://1.bp.blogspot.com/-6u1wtaEo84w/Vu1FiCkEawI/AAAAAAAAB-g/xYiJ2UutIkEUBka5XzTtvPr487s2Jdpgw/s320/Screen%2BShot%2B2016-03-19%2Bat%2B08.26.33.png" width="320" /></a></div>
<br />
<br />
<b><span style="font-size: x-large;">3. Be significant with your figures</span></b><br />
<br />
Number formatting is a detail that's more important than you might think and should not be overlooked. Always consider "at what level are these numbers significant?" and work from there. For example, if we are looking at the salaries of NBA players, do we need to see the cents? Definitely not. Do we need to see even the dollars or the thousands of dollars? Most likely we don't need to see those either. Which of these do you think offers the best comparison for ease of understanding?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-R062b-u2s_8/Vu1KH4as26I/AAAAAAAAB-w/AB8gQiG4ys8byjPFt3iwU5AqJkEZvRlyg/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B08.46.01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://2.bp.blogspot.com/-R062b-u2s_8/Vu1KH4as26I/AAAAAAAAB-w/AB8gQiG4ys8byjPFt3iwU5AqJkEZvRlyg/s400/Screen%2BShot%2B2016-03-19%2Bat%2B08.46.01.png" width="400" /></a></div>
<br />
Personally, I would go with Option 4. NBA players are paid in the millions, so who cares about the last dollar? BUT the single decimal place still lets me see that Dwight Howard is paid more than Chris Bosh.<br />
<br />
When working with number formats, also consider using different units and decimal places for the axis and the pane. The Axis probably needs less detail than a label or a tooltip.<br />
<br />
And don't forget to always include a $,£,€ etc... sign if you are dealing with currency.<br />
<br />
<br />
<b><span style="font-size: x-large;">4. Create space</span></b><br />
<br />
Sometimes Tableau dashboards can seem a bit cramped, don't be afraid to use white space, or dividing lines to create separation and breathing room for your charts.<br />
<br />
If you are building on completely floating objects, you can obviously control exactly where you want things to go. But I like to use tiles (much to the chagrin of some of my colleagues) because I find it faster to iterate the placement and design and the published version is more likely to look like the desktop version. If you are a tile fan like me, try adding blank tiles between sheets:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-GpP2zd37h0s/Vu1MTF5fzNI/AAAAAAAAB-8/5iDIPXTLPW40pUHym0hgBo4v3JO72g7Tg/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B08.54.20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="105" src="https://4.bp.blogspot.com/-GpP2zd37h0s/Vu1MTF5fzNI/AAAAAAAAB-8/5iDIPXTLPW40pUHym0hgBo4v3JO72g7Tg/s200/Screen%2BShot%2B2016-03-19%2Bat%2B08.54.20.png" width="200" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-FmwJzmV8M4E/Vu1MguQFKxI/AAAAAAAAB_A/q6zRBU3XkWQ8QsnqUl_GSWvwanHQnAyXg/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B08.55.22.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://3.bp.blogspot.com/-FmwJzmV8M4E/Vu1MguQFKxI/AAAAAAAAB_A/q6zRBU3XkWQ8QsnqUl_GSWvwanHQnAyXg/s640/Screen%2BShot%2B2016-03-19%2Bat%2B08.55.22.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Or.... bring in a picture of a line as an image. I simply create lines in powerpoint and save them as .png files. If you are using floating objects, you can bring in a single shaded text box and make it very thin.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-50da_SaiRQc/Vu1NVsd112I/AAAAAAAAB_I/dS3OqCsSPdIU5UnhtsMu3qSk6LmcJea_w/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B08.58.16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="80" src="https://4.bp.blogspot.com/-50da_SaiRQc/Vu1NVsd112I/AAAAAAAAB_I/dS3OqCsSPdIU5UnhtsMu3qSk6LmcJea_w/s200/Screen%2BShot%2B2016-03-19%2Bat%2B08.58.16.png" width="200" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-Zljzl3RH2Q0/Vu1NVoyGtuI/AAAAAAAAB_M/GOnOz8FQUigvj98KCkIYjKwKsHFITZ9Pw/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B08.59.47.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="https://4.bp.blogspot.com/-Zljzl3RH2Q0/Vu1NVoyGtuI/AAAAAAAAB_M/GOnOz8FQUigvj98KCkIYjKwKsHFITZ9Pw/s640/Screen%2BShot%2B2016-03-19%2Bat%2B08.59.47.png" width="640" /></a></div>
<br />
<br />
<br />
<b><span style="font-size: x-large;">5. Hide field labels for rows (and other unnecessary labels)</span></b><br />
<br />
In the picture directly above you see the title 'Sales by Container', and then also on the chart a field label telling us that we are looking at the Container field. This is completely redundant. Your audience aren't stupid, they know if the title says 'Sales by Container' that they are looking at containers, so hide that field label!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-MWmdywpKA6s/Vu1OgQqCB4I/AAAAAAAAB_Y/7K11w7xhDXsIXo79dUsQWDnxDukrF7cug/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B09.04.52.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="177" src="https://3.bp.blogspot.com/-MWmdywpKA6s/Vu1OgQqCB4I/AAAAAAAAB_Y/7K11w7xhDXsIXo79dUsQWDnxDukrF7cug/s200/Screen%2BShot%2B2016-03-19%2Bat%2B09.04.52.png" width="200" /></a></div>
<br />
Also, do your audience need to be told that Jan, Feb, Mar etc... are months? That 2014, 2015, 2016 are years? Or that New Jersey, New York and California are States? I doubt it, so save the space and get rid of any and all redundant labels.<br />
<br />
BUT that's not to say all labels are bad - you might have two fields in play that are not so obviously distinguishable. And always consider your audience....<br />
<br />
<br />
<b><span style="font-size: x-large;">6. Labels beat axes</span></b><br />
<br />
Some might find this tip a little controversial, but I am nearly always a bigger fan of labels than axes, especially for bar charts. There are two reasons for this:<br />
<br />
1) If you do want/need to know the number as well as the relative size, its a lot easier to read it at the end of the bar than keep scanning your eyes up and down to the axis.<br />
<br />
2) Axes look kinda ugly<br />
<br />
So get rid of the header and add some nice labels instead :-)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-T86ZFBp5L2U/Vu1QA5N2fhI/AAAAAAAAB_k/4DUqfDL8Rw85s2nobI5vGDOLXJ_r_uZHA/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B09.11.04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://1.bp.blogspot.com/-T86ZFBp5L2U/Vu1QA5N2fhI/AAAAAAAAB_k/4DUqfDL8Rw85s2nobI5vGDOLXJ_r_uZHA/s320/Screen%2BShot%2B2016-03-19%2Bat%2B09.11.04.png" width="320" /></a></div>
<br />
<br />
<br />
<br />
And there are your 6 simple tricks! Of course there are many more design elements to consider, like <i>color, story, actions, filters, text, pictures, sizing, tooltips, layout</i> etc.... But even with these easy and quick changes we've managed to make our dashboard look a lot more professional than the default view we started with. Don't you think?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-zxb2pNSb1bo/Vu1RK38BusI/AAAAAAAAB_s/X0FZ61D54b4ED8pKgZfo4S07zozj3rioQ/s1600/Screen%2BShot%2B2016-03-19%2Bat%2B09.16.09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="428" src="https://2.bp.blogspot.com/-zxb2pNSb1bo/Vu1RK38BusI/AAAAAAAAB_s/X0FZ61D54b4ED8pKgZfo4S07zozj3rioQ/s640/Screen%2BShot%2B2016-03-19%2Bat%2B09.16.09.png" width="640" /></a></div>
<br />
<br />
PS - apologies to BuzzFeed<br />
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com1tag:blogger.com,1999:blog-8663284849781850746.post-57183520265031543392016-03-05T15:17:00.000-08:002016-03-19T06:44:25.798-07:00Real Estate of Mind - againA simpler version of <a href="http://paintbynumbersblog.blogspot.com/2016/01/real-estate-of-mind-all-city-edition.html">this viz of all New York City real estate sales in 2015</a>, with no story points, no parameters and no quick filters, only actions. Try clicking things....<br />
<script type='text/javascript' src='https://public.tableau.com/javascripts/api/viz_v1.js'></script><div class='tableauPlaceholder' style='width: 904px; height: 769px;'><noscript><a href='#'><img alt='Real Estate of Mind Comic Style ' src='https://public.tableau.com/static/images/Re/RealEstateofMind-ComicBookEdition/RealEstateofMindComicStyle/1_rss.png' style='border: none' /></a></noscript><object class='tableauViz' width='904' height='769' style='display:none;'><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='RealEstateofMind-ComicBookEdition/RealEstateofMindComicStyle' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Re/RealEstateofMind-ComicBookEdition/RealEstateofMindComicStyle/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showVizHome' value='no' /><param name='showTabs' value='y' /><param name='bootstrapWhenNotified' value='true' /></object></div>
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com4tag:blogger.com,1999:blog-8663284849781850746.post-58004616984249057942016-02-01T16:34:00.005-08:002016-03-19T06:44:25.802-07:00A few notes on building Real Estate of Mind - All City Edition<a href="http://paintbynumbersblog.blogspot.com/2016/01/real-estate-of-mind-all-city-edition.html">In case you missed it here's the viz</a><br />
<u><br /></u>
<u>Data</u><br />
<u><br /></u>
I sourced the data for this viz from <a href="http://www1.nyc.gov/site/finance/taxes/property-rolling-sales-data.page">http://www1.nyc.gov/site/finance/taxes/property-rolling-sales-data.page</a> which gives the latest rolling 12 months. This is a really great source for NYC property data, in fact I think nyc.gov have done a pretty fantastic job all around of making city data public. For historic data back to 2003 you can go here <a href="http://www1.nyc.gov/site/finance/taxes/property-annualized-sales-update.page">http://www1.nyc.gov/site/finance/taxes/property-annualized-sales-update.page</a>, that might be my next task!<br />
<br />
The data comes separately for each borough, so I just downloaded them all and stuck them all into a single Excel sheet, noting the various borough codes (1=Manhattan, 2=Bronx, 3=Brooklyn, 4=Queens and 5=Staten Island).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-HZ8YPSdVnzw/Vq_topzriHI/AAAAAAAAB7w/Nk982adfsJg/s1600/Screen%2BShot%2B2016-02-01%2Bat%2B18.41.51.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="226" src="http://1.bp.blogspot.com/-HZ8YPSdVnzw/Vq_topzriHI/AAAAAAAAB7w/Nk982adfsJg/s320/Screen%2BShot%2B2016-02-01%2Bat%2B18.41.51.png" width="320" /></a></div>
<br />
This dataset includes ALL property sales, including commercial property and entire buildings. So to try and identify which sales were single residential units I filtered to the building categories below and then applied an extra filter to try and pick out apartments versus whole buildings:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-cieYXSUDU7A/Vq_vA0ColWI/AAAAAAAAB78/uuH9X32vGjA/s1600/Screen%2BShot%2B2016-02-01%2Bat%2B18.49.02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="171" src="http://3.bp.blogspot.com/-cieYXSUDU7A/Vq_vA0ColWI/AAAAAAAAB78/uuH9X32vGjA/s200/Screen%2BShot%2B2016-02-01%2Bat%2B18.49.02.png" width="200" /></a><a href="http://4.bp.blogspot.com/-_95kObzbMR0/Vq_vI8Qu9LI/AAAAAAAAB8E/9Df-ZbYf83E/s1600/Screen%2BShot%2B2016-02-01%2Bat%2B18.49.41.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="98" src="http://4.bp.blogspot.com/-_95kObzbMR0/Vq_vI8Qu9LI/AAAAAAAAB8E/9Df-ZbYf83E/s320/Screen%2BShot%2B2016-02-01%2Bat%2B18.49.41.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I know for a fact that this wasn't 100% successful, but I think it was a pretty good way to filter. I also filtered out the 17,000 sales less than $50,000, because I just don't believe that could ever be real.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
One wish I have for this dataset would be better sq ft data, its currently listed for less than half of properties, and bedrom counts.</div>
<br />
<u>Geocoding</u><br />
<br />
The data provided by nyc.gov gives street addresses and zip codes, but I wanted to be able to map the building points exactly. <a href="http://paintbynumbersblog.blogspot.com/2015/04/real-estate-of-mind-exploring-new-york.html">Last time</a> I used a geocoding tool by Texas A&M University. This time I searched around again and found a site called <a href="http://geocod.io/">geocod.io</a> which seemed to offer a combination of very reasonable pricing with a friendly user interface.<br />
<br />
To do the geocoding I simply uploaded a csv file including the street addresses and the zip code. In fact the first time I did it I also included the city name of New York for all points but this put everything in Manhattan. The folks at geocod.io were kind enough to help me out quickly and return my credits, I was very impressed with the customer service they provided.<br />
<br />
Now let's talk about accuracy of geocoding. For the most part it was pretty good, but there were some weird results too, for example check out this map showing all points I geocoded:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-t2MIxt_JDsk/Vq_y4v43tdI/AAAAAAAAB8Q/aWZUlRhdOKk/s1600/Screen%2BShot%2B2016-02-01%2Bat%2B19.05.36.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="369" src="http://1.bp.blogspot.com/-t2MIxt_JDsk/Vq_y4v43tdI/AAAAAAAAB8Q/aWZUlRhdOKk/s640/Screen%2BShot%2B2016-02-01%2Bat%2B19.05.36.png" width="640" /></a></div>
<br />
The zip code 11363 is in Queens, so I'm not sure how this point ended up in Arkansas. Fortunately the few big mistakes are easy to get rid of using the Tableau lasso tool.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-smkQSY_Fg-o/Vq_zh7CHL8I/AAAAAAAAB8Y/31VTAFSwO4E/s1600/Screen%2BShot%2B2016-02-01%2Bat%2B19.08.23.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="203" src="http://4.bp.blogspot.com/-smkQSY_Fg-o/Vq_zh7CHL8I/AAAAAAAAB8Y/31VTAFSwO4E/s320/Screen%2BShot%2B2016-02-01%2Bat%2B19.08.23.png" width="320" /></a></div>
<br />
More frustrating are the near misses, for example some points ended up in the wrong borough:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-OkzH3Zv84IU/Vq_0C1bikpI/AAAAAAAAB8g/4KNaLhIyA8M/s1600/Screen%2BShot%2B2016-02-01%2Bat%2B19.10.32.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="http://3.bp.blogspot.com/-OkzH3Zv84IU/Vq_0C1bikpI/AAAAAAAAB8g/4KNaLhIyA8M/s320/Screen%2BShot%2B2016-02-01%2Bat%2B19.10.32.png" width="320" /></a></div>
<br />
and some of the 'famous' high end buildings in Manhattan were in the wrong spot. For example:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-4_ZtdWFoPXQ/Vq_1v2WQWuI/AAAAAAAAB8s/vsNmwlGr4J4/s1600/buildingdiff.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="http://1.bp.blogspot.com/-4_ZtdWFoPXQ/Vq_1v2WQWuI/AAAAAAAAB8s/vsNmwlGr4J4/s400/buildingdiff.png" width="295" /></a></div>
<br />
I realize this might seem picky, but when you are looking at NYC real estate the $ difference between the top and the bottom of Central Park, for example, is HUGE. I'd say 95% of the data points are pretty spot on, but unfortunately the mistakes do cause some problems, particularly when trying to zoom to a particular neighborhood.<br />
<br />
Geocod.io do provide accuracy scores, but sometimes clearly wrong locations (like the wrong state) are scored 100%. Having said that, I would use the service again as I don't think any service has mastered batch geocoding perfectly.<br />
<br />
<u>Color</u><br />
<br />
For the design of this viz I wanted to create a unique look and a nice color palette. I searched around for NYC graphics and found this apple, and from here I built out the palette.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-iL-bBjj0Fuo/Vq_2pqWStmI/AAAAAAAAB80/_1NvuWpRPiI/s1600/Apple.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://2.bp.blogspot.com/-iL-bBjj0Fuo/Vq_2pqWStmI/AAAAAAAAB80/_1NvuWpRPiI/s200/Apple.png" width="190" /></a></div>
To do this I used a site called <a href="http://coolors.co/">coolors.co</a>. Its a really nice system for building 5-color palettes. I locked in the yellow, red green and grey from the apple and then hit the space bar to generate the fifth color until I was happy, easy peasy!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-kHGYEwQYKRs/Vq_30gydSdI/AAAAAAAAB88/9KYGilzvdzQ/s1600/Screen%2BShot%2B2016-02-01%2Bat%2B19.25.37.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://1.bp.blogspot.com/-kHGYEwQYKRs/Vq_30gydSdI/AAAAAAAAB88/9KYGilzvdzQ/s200/Screen%2BShot%2B2016-02-01%2Bat%2B19.25.37.png" width="186" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-c8HUI2ZhRQM/Vq_35Gtn6MI/AAAAAAAAB9E/rPz642sIOIw/s1600/Screen%2BShot%2B2016-02-01%2Bat%2B19.26.11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="201" src="http://3.bp.blogspot.com/-c8HUI2ZhRQM/Vq_35Gtn6MI/AAAAAAAAB9E/rPz642sIOIw/s320/Screen%2BShot%2B2016-02-01%2Bat%2B19.26.11.png" width="320" /></a></div>
<br />
<u>Performance</u><br />
<br />
To be honest, the viz loads more slowly than I would like. At first I was using data blending to bring in the latitudes and longitudes, so I switched this to joins to try and speed things up. Unfortunately this didn't work, so I think the slowness is down to the number of mapped points, the use of medians and the high res images. I don't really want to lose any of these, so please be patient :-)<br />
<br />
I hope you enjoy the viz, I like doing work with real estate data and will probably do some more in future.<br />
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com10tag:blogger.com,1999:blog-8663284849781850746.post-67113801043741329272016-01-25T18:39:00.002-08:002016-03-19T06:44:25.809-07:00Real Estate of Mind - All City EditionIn April 2015 I made a viz called <a href="http://paintbynumbersblog.blogspot.com/2015/04/real-estate-of-mind-exploring-new-york.html">Real Estate of Mind</a> which looked at residential property sales in Manhattan. Well I decided to come back to that data-set but this time I wanted to expand out to the whole of New York City. And I also wanted to present some of the analysis that's possible when digging into this dataset. So I present Real Estate of Mind - All City Edition!<br />
<br />
<script type='text/javascript' src='https://public.tableau.com/javascripts/api/viz_v1.js'></script><div class='tableauPlaceholder' style='width: 960px; height: 909px;'><noscript><a href='#'><img alt='Story Title ' src='https://public.tableau.com/static/images/Re/RealEstateofMind-ACE/RealEstateofMind-AllCityEdition/1_rss.png' style='border: none' /></a></noscript><object class='tableauViz' width='960' height='909' style='display:none;'><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='RealEstateofMind-ACE/RealEstateofMind-AllCityEdition' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Re/RealEstateofMind-ACE/RealEstateofMind-AllCityEdition/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showVizHome' value='no' /><param name='showTabs' value='y' /><param name='bootstrapWhenNotified' value='true' /></object></div>
<br />
<br />
And here's a dashboard only view for digging right in:<br />
<br />
<script type='text/javascript' src='https://public.tableau.com/javascripts/api/viz_v1.js'></script><div class='tableauPlaceholder' style='width: 904px; height: 769px;'><noscript><a href='#'><img alt='Real Estate of Mind 2.0 ' src='https://public.tableau.com/static/images/Re/RealEstateofMind-ACE/RealEstateofMind2_0/1_rss.png' style='border: none' /></a></noscript><object class='tableauViz' width='904' height='769' style='display:none;'><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='RealEstateofMind-ACE/RealEstateofMind2_0' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Re/RealEstateofMind-ACE/RealEstateofMind2_0/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showVizHome' value='no' /><param name='showTabs' value='y' /><param name='bootstrapWhenNotified' value='true' /></object></div>
<br />
Next time I'll write up a blog post about making this viz and do some analysis of the accuracy of the geocoding (which I'm not that happy with), but right now though I'm exhausted. The data is taken from <a href="http://www1.nyc.gov/site/finance/taxes/property-rolling-sales-data.page" style="background-color: white; color: #33aaff; font-family: 'Josefin Sans'; font-size: 15.4px; line-height: 23.9556px;">http://www1.nyc.gov/site/finance/taxes/property-rolling-sales-data.page</a> and the geocoding was done with <a href="http://geocod.io/">geocod.io</a>PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com8tag:blogger.com,1999:blog-8663284849781850746.post-13923372355250203772016-01-09T15:45:00.000-08:002016-03-19T06:44:25.752-07:00BALLCODE 2.0<br />
<script src="https://public.tableau.com/javascripts/api/viz_v1.js" type="text/javascript"></script><br />
<div class="tableauPlaceholder" style="height: 1069px; width: 704px;">
<noscript><a href='#'><img alt='Ballcode 2..0 ' src='https://public.tableau.com/static/images/Ba/Ballcode2_0/Ballcode2__0/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" height="1069" style="display: none;" width="704"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='Ballcode2_0/Ballcode2__0' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Ba/Ballcode2_0/Ballcode2__0/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showVizHome' value='no' /><param name='showTabs' value='y' /><param name='bootstrapWhenNotified' value='true' /></object></div>
<br />
<br />
UPDATE Jan 30 2016: The Kimono Labs scrape stopped working and Kimono provided no support. So I've had to ditch that, and my buddy Andreas helped me out with a Python script for pulling down the data. Thanks Andreas!<br />
<br />
If you are a regular and long time reader of my blog (there must be at least 3 of you out there) you may remember a viz I made a few years a go called <a href="http://paintbynumbersblog.blogspot.com/2014/04/ballcode-scanning-2013-14-nba-season.html">BALLCODE</a>. It looked like the picture below and was a summary of the whole NBA 2013/14 season. At the time I thought I had come up with an original concept, but it turned out <a href="http://paintbynumbersblog.blogspot.com/2014/04/how-i-built-ballcode.html">that wasn't the case</a>. None the less I was very proud of this viz and it was even awarded<a href="https://public.tableau.com/s/blog/2014/04/award-winning-tips"> 'most beautiful' tip from Tableau Public</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-RB3rY5F5Lh4/VpGS1J57HGI/AAAAAAAAB3A/E-5Mp0_Q4F0/s1600/ballcodehowto9.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="563" src="http://2.bp.blogspot.com/-RB3rY5F5Lh4/VpGS1J57HGI/AAAAAAAAB3A/E-5Mp0_Q4F0/s640/ballcodehowto9.PNG" width="640" /></a></div>
<br />
It also proved to be a very popular viz among other Tableau Public authors and has been the inspiration of a few great vizzes out there (and the lovely authors were kind enough to reference me). See in order of when they came out work by <a href="http://vizraider.blogspot.com/2015/02/mlb-franchise-performance.html">Chris Jones</a>, <a href="http://sirvizalot.blogspot.com/2015/10/sports-abstract-art.html">Matt Chambers</a> and <a href="http://www.dataplusscience.com/MLBbarcode.html">Craig Wortman</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-aMUj7-c_ftw/VpGVqT8w7XI/AAAAAAAAB3M/YEPtxvNSNAA/s1600/ballcodess.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="http://1.bp.blogspot.com/-aMUj7-c_ftw/VpGVqT8w7XI/AAAAAAAAB3M/YEPtxvNSNAA/s640/ballcodess.png" width="600" /></a></div>
<br />
I'm very flattered that these guys enjoyed my viz and wanted to experiment with using the idea and take it in different directions and for different sports. If there's any other examples out there, please let me know.<br />
<br />
Now the MLB and NFL are all very good, but they aren't a real sport like basketball, so I wanted to do my Ballcode viz again. In fact I intended to do it again at the end of last season but forgot. And now with the Golden State Warriors tearing up the league in an historic way, I didn't want to wait to the end of the season to start showing their streak.<br />
<br />
So..... for Ballcode 2.0 I am going to be updating the viz as the season goes on. BUT there is quite a bit of data manipulation required and I didn't want to be copying and pasting data every week and pratting about in Excel, so I decided to create an automated data prep process. To do this I finally pulled my finger out and had a proper go with Alteryx.<br />
<br />
The first thing I needed to do was to set up a connection to grab my data from the web. To do this I found the following very helpful - <a href="http://www.theinformationlab.co.uk/29/01/2014/WebScrapingwithAlteryx">this blog post from Chris Love</a> and<a href="https://www.youtube.com/watch?v=cB_5bCLQrZU"> this video from Alteryx</a>.<br />
<br />
I first used <a href="https://www.kimonolabs.com/">Kimono Labs</a> to build an API that scrapes the data from <a href="http://www.basketball-reference.com/leagues/NBA_2016_games.html?lid=header_seasons">basketballreference.com</a> and turns it into a CSV. This was pretty easy to do, and is the first time I've actually managed to make a web scraper do what I want in a reasonable amount of time (but it is a very simple task). It looks like this when in action:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-iq1oMk8R8GY/VpGaPnvjGrI/AAAAAAAAB3k/gQK8szI8gkU/s1600/kimonocapture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="316" src="http://4.bp.blogspot.com/-iq1oMk8R8GY/VpGaPnvjGrI/AAAAAAAAB3k/gQK8szI8gkU/s640/kimonocapture.PNG" width="640" /></a></div>
<br />
<br />
I then built out my Alteryx module to parse the data, tidy it and transform it to get two rows of data per game, one from the perspective of the winning team and one from the perspective of the losing team. Here's a screenshot of my module. I'm sure Alteryx experts will probably laugh at it, but I'm pretty chuffed. (Aside - I'm ill today and this is basically keeping me occupied while I sit on the sofa drinking orange juice).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-el4yGRCAEzs/VpGYuYH-0dI/AAAAAAAAB3Y/QwpnM9cfvGk/s1600/Alteryxgrab.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="259" src="http://2.bp.blogspot.com/-el4yGRCAEzs/VpGYuYH-0dI/AAAAAAAAB3Y/QwpnM9cfvGk/s640/Alteryxgrab.PNG" width="640" /></a></div>
It spits out a TDE, so hopefully I should have no trouble running this every week and keeping the viz up to date. We'll see how that goes.<br />
<br />
This time I also went to the effort of getting the official colours for each team <a href="http://teamcolors.arc90.com/">from this great website</a>, and <a href="http://kb.tableau.com/articles/knowledgebase/creating-custom-color-palettes">created a new color palette</a>.<br />
<br />
<br />
BTW - I'm pretty confident in GSW breaking 72 wins.<br />
<br />
<br />
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com0tag:blogger.com,1999:blog-8663284849781850746.post-3558123721579052762015-12-15T16:35:00.000-08:002016-03-19T06:44:25.770-07:00OK ChewieTableau recently put out a Star Wars web-data connector and asked people to see what they could come up with <a href="http://www.tableau.com/about/blog/2015/12/when-star-wars-meets-data-geekdom-47549?es_p=1088362">http://www.tableau.com/about/blog/2015/12/when-star-wars-meets-data-geekdom-47549?es_p=1088362</a>. Well, I came up with this......<br />
<br />
<script type='text/javascript' src='https://public.tableau.com/javascripts/api/viz_v1.js'></script><div class='tableauPlaceholder' style='width: 804px; height: 969px;'><noscript><a href='#'><img alt='OKChewie ' src='https://public.tableau.com/static/images/OK/OKStarWars/OKChewie/1_rss.png' style='border: none' /></a></noscript><object class='tableauViz' width='804' height='969' style='display:none;'><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='OKStarWars/OKChewie' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/OK/OKStarWars/OKChewie/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showVizHome' value='no' /><param name='showTabs' value='y' /><param name='bootstrapWhenNotified' value='true' /></object></div>
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com8tag:blogger.com,1999:blog-8663284849781850746.post-89105238024712742462015-11-25T12:29:00.001-08:002016-03-19T06:44:25.853-07:00Approval Ratings of US Senators<i>Quick political disclaimer - I think Bernie Sanders should be the next US President, even though I don't get a vote....</i><br />
<br />
I recently came across <a href="http://morningconsult.com/2015/11/bernie-sanders-is-the-most-popular-senator-in-america/">this article</a> on Morning Consult showing the results of a recent poll that placed Bernie Sanders as the US Senator with highest within State approval rating. I wanted to skim the results of the survey, but unfortunately they were presented in a pretty boring way that made it hard to quickly navigate and explore. I thought I could probably do a better job.<br />
<br />
And so I came up with this<br />
<br />
<script src="https://public.tableau.com/javascripts/api/viz_v1.js" type="text/javascript"></script><br />
<div class="tableauPlaceholder" style="height: 1069px; width: 904px;">
<noscript><a href='#'><img alt='Senator Approval ' src='https://public.tableau.com/static/images/Be/Bernie/SenatorApproval/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" height="1069" style="display: none;" width="904"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='Bernie/SenatorApproval' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Be/Bernie/SenatorApproval/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showVizHome' value='no' /><param name='showTabs' value='y' /><param name='bootstrapWhenNotified' value='true' /></object></div>
<br />
<br />
Now the hex-bin map is something I've been wanting to try, and thanks to both <a href="http://sirvizalot.blogspot.com/2015/11/hex-tile-maps-in-tableau.html">Matt Chambers</a> and <a href="http://www.bfongdata.com/2015/11/periodic-table-map.html">Brittany Fong</a> for their recent instructional blog posts on how to do this. I wanted to use Matt's technique, and he kindly provides some clear instructions and base data to copy. Definitely <a href="http://sirvizalot.blogspot.com/2015/11/hex-tile-maps-in-tableau.html">read his post</a> to understand what I'm doing below.<br />
<br />
But because there are two senators per state, I needed to split up the hexagons. To do this I created both a left and a right half-hexagon, using powerpoint as my tool, and placed each in the <a href="https://public.tableau.com/s/blog/2013/10/creating-and-utilizing-custom-shapes">Tableau Shape File repository</a>. I was going to re-color the shapes in Tableau anyway so don't worry about the shades below.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-XGoP3pb_GGo/VlYY6kndOsI/AAAAAAAAB2Y/eG3nYQh3RRs/s1600/Screen%2BShot%2B2015-11-25%2Bat%2B15.23.41.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="236" src="http://2.bp.blogspot.com/-XGoP3pb_GGo/VlYY6kndOsI/AAAAAAAAB2Y/eG3nYQh3RRs/s320/Screen%2BShot%2B2015-11-25%2Bat%2B15.23.41.png" width="320" /></a><a href="http://3.bp.blogspot.com/-7GT_oqHCD6Q/VlYYmKkI80I/AAAAAAAAB2Q/t7x-7hyUFIU/s1600/Screen%2BShot%2B2015-11-25%2Bat%2B15.21.58.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="http://3.bp.blogspot.com/-7GT_oqHCD6Q/VlYYmKkI80I/AAAAAAAAB2Q/t7x-7hyUFIU/s200/Screen%2BShot%2B2015-11-25%2Bat%2B15.21.58.png" width="196" /></a></div>
<br />
And I needed to adjust the positioning of each half of the state, so I nudged one half left and one half right a bit.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-gXY8UD201-A/VlYZhcb31MI/AAAAAAAAB2g/I5CZnhX0ZzY/s1600/Screen%2BShot%2B2015-11-25%2Bat%2B15.26.15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="193" src="http://2.bp.blogspot.com/-gXY8UD201-A/VlYZhcb31MI/AAAAAAAAB2g/I5CZnhX0ZzY/s640/Screen%2BShot%2B2015-11-25%2Bat%2B15.26.15.png" width="640" /></a></div>
<br />
See how my column field includes values 0.25 away from the centre of where the hex's will be placed?<br />
<br />
Lastly, I wanted to use Net Promoter Score because I didn't think the straight approval rating tells the whole story. And as you know I can't resist throwing in a URL picture.<br />
<br />
Feedback welcome, and feel free to use this technique for any Senate related vizzes in future!<br />
<br />
<br />
<br />
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com3tag:blogger.com,1999:blog-8663284849781850746.post-75283068163793726042015-11-09T15:31:00.001-08:002016-03-19T06:43:45.825-07:00Let's put some things into context - a practical introduction to Context Filters in TableauOne piece of functionality in <a href="http://www.tableau.com/">Tableau</a> that I've been using a lot recently, and that people have been asking me about are CONTEXT FILTERS. They seem to cause quite a bit of confusion for new Tableau users so I thought I'd try and write a blog post showing some of the ways in which they can be utilized. This should also help me get a firmer grip on them myself, as I too find knowing when to use them isn't always straight forward.<br />
<br />
Now what I'm <u>not</u> going to do here is talk about Context Filters in terms of <u>performance</u>. My experience with using context filters to improve performance is very hit and miss, sometimes it works, sometimes it slows things down and sometimes there is no difference. This all depends on your data connection type, the size and width of your data and what you are trying to achieve with the filter. For improving performance with context filters I suggest you utilise the ever popular 'try it and see' approach. I <u>am</u> going to talk about Context Filters in terms of <u>functionality</u> and give some examples.<br />
<b><br /></b>
<b><br /></b><br />
<b>First up, how do I make a regular filter a Context Filter?</b><br />
<b><br /></b>
This one's easy - you simply right click on your filter pill (or click the drop down arrow) and select 'Add to Context'.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-ZigkxCV5-YM/Vj5YjN7qJUI/AAAAAAAABwQ/MG89hquT6pA/s1600/Screen%2BShot%2B2015-11-07%2Bat%2B15.00.43.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://2.bp.blogspot.com/-ZigkxCV5-YM/Vj5YjN7qJUI/AAAAAAAABwQ/MG89hquT6pA/s200/Screen%2BShot%2B2015-11-07%2Bat%2B15.00.43.png" width="174" /></a><a href="http://4.bp.blogspot.com/-0gR_Mc5oWqk/Vj5Ykj1nhtI/AAAAAAAABwY/hr5ZhpWVkIM/s1600/Screen%2BShot%2B2015-11-07%2Bat%2B15.00.51.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="96" src="http://4.bp.blogspot.com/-0gR_Mc5oWqk/Vj5Ykj1nhtI/AAAAAAAABwY/hr5ZhpWVkIM/s200/Screen%2BShot%2B2015-11-07%2Bat%2B15.00.51.png" width="200" /></a></div>
<br />
You will notice that the filter pill turns grey. This is, in classic subtle Tableau style, your clue that the filter is 'in context.<br />
<br />
Also worth noting is that context filters can be for single sheets, multiple sheets or all sheets. But it will be in or out of context for all sheets, you can't apply to many sheets and then switch in and out of context on different sheets.<br />
<br />
Aggregation based filters (e.g. sum(sales)) cannot be added to context.<br />
<br />
<br />
<b>What does a Context Filter actually do?</b><br />
<br />
In simple terms, putting a filter in context ensures that all other filters are dependent on that Context Filter. Tableau filters otherwise act independently and this is a useful feature, but may sometimes mean that filtering doesn't do what you might first expect it to do.<br />
<br />
<br />
<a name='more'></a><br />
<br />
<br />
Also worth understanding is the order of operations that Tableau uses for applying filters. Unfortunately Tableau's own documentation for this is fairly thin on the ground, but various bloggers and folks on the Tableau forum have provided insight. Here's the view I refer to these days, provided by<a href="http://vizdiff.blogspot.com/2015/12/the-order-of-operations-diagram-update.html"> Alexander Mou on his excellent blog</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-hJY7KT0iI3E/VnGOV9bsuRI/AAAAAAAAB2w/CoLryXL59wY/s1600/orderops1216.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="482" src="http://4.bp.blogspot.com/-hJY7KT0iI3E/VnGOV9bsuRI/AAAAAAAAB2w/CoLryXL59wY/s640/orderops1216.PNG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
For now, don't worry about the Secondary Data Source line, just concentrate on the Primary Source.<br />
<br />
Note here that 'Set Filters' don't just include things you've put specifically into a Set, but also include Top N and conditional filters. The fact that these occur before Dimension Filters is one of the things that make Context Filters so important, as we'll see later.<br />
<br />
The key thing here is to notice that Context Filters will also logically apply before any other filters you add.<br />
<br />
By the way, the knowledge base on the order of operations is always growing and changing as the product develops, and many smart Tableau community folks have added to it. See work here by <a href="http://community.tableau.com/thread/122852?start=45&tstart=0">Jonathan Drummey</a> and <a href="http://community.tableau.com/message/139603#139603">Joe Mako</a> for example. The Tableau forums have lots of content on this subject.<br />
<br />
<br />
<b>What is happening behind the scenes?</b><br />
<b><br /></b>
Utilizing a Context Filter does one of three things behind the scenes, depending on the type of data source you are using:<br />
<br />
1) For flat tables like Excel and some databases like MySQL it creates a temporary table in which all context filters have been applied as 'WHERE' clauses. This temporary table is then used for further queries.<br />
<br />
2) For some databases it forces each query to also utilize a sub-query which selects the items in context. It does this in Amazon Redshift. I'll show how this works in my second example so keep reading.<br />
<br />
3) Nothing. By that I mean that the filter will behave the same way whether you placed in context or not.<br />
<br />
<br />
The fact that it can actually execute one of three different things behind the scenes adds to the mystery of whether or not using a context filter will actually improve performance. Take it case by case and experiment.<br />
<br />
Ok now time for some concrete examples:<br />
<br />
<b>Example 1: Generating Top N Lists</b><br />
<br />
Let's say you are using the Superstore sales data set and you want to identify the top 10 selling product items in the Furniture Department. Well how might you do that? Let's first set up a list showing all items, sorted by total sales, and their accompanying department.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-3qKUOenyDPk/Vj5mq5yGJsI/AAAAAAAABw4/S-1xADh2m68/s1600/Screen%2BShot%2B2015-11-07%2Bat%2B16.01.17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="408" src="http://1.bp.blogspot.com/-3qKUOenyDPk/Vj5mq5yGJsI/AAAAAAAABw4/S-1xADh2m68/s640/Screen%2BShot%2B2015-11-07%2Bat%2B16.01.17.png" width="640" /></a></div>
<br />
<br />
Now I want to filter to the top 10, so I'm going to place 'Item' onto the filters shelf and do a Top N filter.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-t1oSLCyfSaI/Vj5m-Ua3QVI/AAAAAAAABxA/rWfh7iybPZ4/s1600/Screen%2BShot%2B2015-11-07%2Bat%2B16.02.40.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="173" src="http://3.bp.blogspot.com/-t1oSLCyfSaI/Vj5m-Ua3QVI/AAAAAAAABxA/rWfh7iybPZ4/s200/Screen%2BShot%2B2015-11-07%2Bat%2B16.02.40.png" width="200" /></a></div>
<br />
And then I'm going to add Department to the filter shelf as well and select 'Furniture'. Makes sense right?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-bHbLe3gXGk4/Vj5nWRcbDHI/AAAAAAAABxI/sUe7C_hk8x0/s1600/Screen%2BShot%2B2015-11-07%2Bat%2B16.04.15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="170" src="http://1.bp.blogspot.com/-bHbLe3gXGk4/Vj5nWRcbDHI/AAAAAAAABxI/sUe7C_hk8x0/s640/Screen%2BShot%2B2015-11-07%2Bat%2B16.04.15.png" width="640" /></a></div>
<br />
<b><i>Oh crap! What happened?!?! Why do I only have a top 3 and not a top 10?</i></b><br />
<br />
Well that's because the top 10 filter is applied by Tableau BEFORE the Department filter. It just so happened that 3 items from the Furniture Department were in the overall top 10 selling items.<br />
<br />
If I want to get the top 10 Furniture items, I need to add Department to context, so that its the first filter applied.....<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-HqkDDSW6MZ8/Vj5oBWtr1SI/AAAAAAAABxU/Ru97GbUxmdw/s1600/Screen%2BShot%2B2015-11-07%2Bat%2B16.06.47.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="189" src="http://4.bp.blogspot.com/-HqkDDSW6MZ8/Vj5oBWtr1SI/AAAAAAAABxU/Ru97GbUxmdw/s200/Screen%2BShot%2B2015-11-07%2Bat%2B16.06.47.png" width="200" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-KpYr-MVCm8o/Vj5oBeVCmdI/AAAAAAAABxY/GSnTHWndoAA/s1600/Screen%2BShot%2B2015-11-07%2Bat%2B16.06.56.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="http://3.bp.blogspot.com/-KpYr-MVCm8o/Vj5oBeVCmdI/AAAAAAAABxY/GSnTHWndoAA/s640/Screen%2BShot%2B2015-11-07%2Bat%2B16.06.56.png" width="640" /></a></div>
<br />
Bingo!<br />
<br />
Now if I add a date filter into the mix, note that the order of the top 10 items changes, but the item names do not.....<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-juwQuBE_yPE/Vj5oobvuWLI/AAAAAAAABxk/JbmJWqPTz9g/s1600/Screen%2BShot%2B2015-11-07%2Bat%2B16.09.46.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="304" src="http://1.bp.blogspot.com/-juwQuBE_yPE/Vj5oobvuWLI/AAAAAAAABxk/JbmJWqPTz9g/s640/Screen%2BShot%2B2015-11-07%2Bat%2B16.09.46.png" width="640" /></a></div>
<br />
<br />
I'm now showing the sales within a selected time period per item, for the top 10 items from the entire dataset time period. See the logical mismatch? Again, If I want to show the top 10 items in the time period selected I need to add this to context. The tricky thing here is that its not as immediately obvious that you aren't returning what you want in the same way as when we noticed only 3 items. So be careful!<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-EKAVefwmgug/Vj5pNwoNoRI/AAAAAAAABxs/euY1cg9x-JM/s1600/Screen%2BShot%2B2015-11-07%2Bat%2B16.12.14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="332" src="http://2.bp.blogspot.com/-EKAVefwmgug/Vj5pNwoNoRI/AAAAAAAABxs/euY1cg9x-JM/s640/Screen%2BShot%2B2015-11-07%2Bat%2B16.12.14.png" width="640" /></a></div>
<br />
<br />
Notice that the items in the list have now changed? 'Office Star...' wasn't there until we added Order Date to context.<br />
<br />
<b>Example 2: Conditional Filters (and Sets)</b><br />
<b><br /></b>
The concept here is very similar the one above. Consider a conditional filter such as 'show me items that have at least $30,000 of sales in Europe'.<br />
<br />
So lets first bring in all our items again and apply a conditional filter.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-sBnTc2ZTzwQ/Vj9c4rUlfgI/AAAAAAAAByA/b8KEtUjDM6M/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B09.31.48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://1.bp.blogspot.com/-sBnTc2ZTzwQ/Vj9c4rUlfgI/AAAAAAAAByA/b8KEtUjDM6M/s320/Screen%2BShot%2B2015-11-08%2Bat%2B09.31.48.png" width="320" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-1sqGtO9CUsE/Vj9deEVJFYI/AAAAAAAAByU/HwQFA7uSq6Y/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B09.34.28.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="274" src="http://3.bp.blogspot.com/-1sqGtO9CUsE/Vj9deEVJFYI/AAAAAAAAByU/HwQFA7uSq6Y/s640/Screen%2BShot%2B2015-11-08%2Bat%2B09.34.28.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
and if we scroll down we see that the list cuts off just above a sum of sales value of $30,000. Excellent. Now I'm going to throw in a filter for the Continent of Europe.......<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-XO7zeQzSfiw/Vj9d8L0rNPI/AAAAAAAAByc/WGcuy8qQoys/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B09.36.24.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="274" src="http://1.bp.blogspot.com/-XO7zeQzSfiw/Vj9d8L0rNPI/AAAAAAAAByc/WGcuy8qQoys/s640/Screen%2BShot%2B2015-11-08%2Bat%2B09.36.24.png" width="640" /></a></div>
<br />
<b><i>WTF! I thought I filtered out everything under $30,000!?!?!</i></b><br />
<br />
Yet again, the conditional filter is applied BEFORE the Continent filter, and so what I'm actually displaying is the sum of sales in Europe for those Items that have at least $30,000 of sales globally. Not really what I wanted. You know the solution by now, add that filter to context!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-7iwyIC6ZFkw/Vj9eu_XyM1I/AAAAAAAAByk/sQ2wWG70JWo/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B09.39.49.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="272" src="http://4.bp.blogspot.com/-7iwyIC6ZFkw/Vj9eu_XyM1I/AAAAAAAAByk/sQ2wWG70JWo/s640/Screen%2BShot%2B2015-11-08%2Bat%2B09.39.49.png" width="640" /></a></div>
<br />
and if you are working with a conditional Set, exactly the same rules apply<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="http://3.bp.blogspot.com/-VffhAqSku7k/Vj9fVcWWMDI/AAAAAAAABy0/FpCcGkX_E94/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B09.42.03.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="212" src="http://3.bp.blogspot.com/-VffhAqSku7k/Vj9fVcWWMDI/AAAAAAAABy0/FpCcGkX_E94/s400/Screen%2BShot%2B2015-11-08%2Bat%2B09.42.03.png" width="400" /></a><a href="http://2.bp.blogspot.com/-OiT8DEFhlP8/Vj9fVQzoCQI/AAAAAAAAByw/lYu9aVVPkS8/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B09.41.54.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="132" src="http://2.bp.blogspot.com/-OiT8DEFhlP8/Vj9fVQzoCQI/AAAAAAAAByw/lYu9aVVPkS8/s200/Screen%2BShot%2B2015-11-08%2Bat%2B09.41.54.png" width="200" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
For you SQL heads, here's what's going on in the back, in the case where you are using a dimensional database that writes a sub-query.<br />
<br />
Without the context filters, the SQL will look something like this (remember to imagine this is a dimensional data model):<br />
<br />
<div class="yiv2458717103MsoNormal" style="background-color: white; font-size: 13px; padding: 0px; text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;">SELECT Item,</span></div>
<div class="yiv2458717103MsoNormal" style="background-color: white; font-size: 13px; padding: 0px; text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;"> SUM(Sales) AS Sales</span></div>
<div class="yiv2458717103MsoNormal" style="background-color: white; font-size: 13px; padding: 0px; text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;">FROM salestable</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2248" style="background-color: white; font-size: 13px; padding: 0px; text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;"> INNER JOIN countrytable ON (salestable.countrykey = countrytable.countrykey)</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2247" style="background-color: white; font-size: 13px; padding: 0px; text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;"> INNER JOIN (</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2244" style="background-color: white; font-size: 13px; padding: 0px; text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;"> SELECT Item</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2243" style="background-color: white; font-size: 13px; padding: 0px; text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;"> FROM salestable</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2241" style="background-color: white; font-size: 13px; padding: 0px; text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;"> GROUP BY 1</span></div>
<div class="yiv2458717103MsoNormal" style="background-color: white; font-size: 13px; padding: 0px; text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;"> HAVING (SUM(Sales) > 30,000)</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2236" style="background-color: white; font-size: 13px; padding: 0px; text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;">) "jointable" ON salestable.Item = jointable.Item</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2237" style="background-color: white; font-size: 13px; padding: 0px; text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;">WHERE countrytable.continent='Europe'</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2238" style="background-color: white; font-size: 13px; padding: 0px; text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;">GROUP BY 1</span></div>
<br />
Where as with the context filter it will look something like this:<br />
<br />
<div class="yiv2458717103MsoNormal" style="background-color: white; font-size: 13px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace;">SELECT Item,</span></div>
<div class="yiv2458717103MsoNormal" style="background-color: white; font-size: 13px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace;"> SUM(Sales) AS Sales</span></div>
<div class="yiv2458717103MsoNormal" style="background-color: white; font-size: 13px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace;">FROM salestable</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2248" style="background-color: white; font-size: 13px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace;"> INNER JOIN countrytable ON (salestable.countrykey = countrytable.countrykey)</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2247" style="background-color: white; font-size: 13px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace;"> INNER JOIN (</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2244" style="background-color: white; font-size: 13px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace;"> SELECT Item</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2243" style="background-color: white; font-size: 13px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace;"> FROM salestable</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2243" style="background-color: white; font-size: 13px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace;"> INNER JOIN countrytable ON (salestable.countrykey = countrytable.countrykey</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2243" style="background-color: white; font-size: 13px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace;">where </span><span style="font-family: "courier new" , "courier" , monospace;">countrytable.continent='Europe'</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2241" style="background-color: white; font-size: 13px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace;"> GROUP BY 1</span></div>
<div class="yiv2458717103MsoNormal" style="background-color: white; font-size: 13px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace;"> HAVING (SUM(Sales) > 30,000)</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2236" style="background-color: white; font-size: 13px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace;">) "jointable" ON salestable.Item = jointable.Item</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2237" style="background-color: white; font-size: 13px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace;">WHERE countrytable.continent='Europe'</span></div>
<div class="yiv2458717103MsoNormal" id="yui_3_16_0_1_1447109876186_2238" style="background-color: white; font-size: 13px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace;">GROUP BY 1</span></div>
<br />
Notice how the 'Europe' clause is now in both the sub-query and the main query? (please excuse me if that SQL isn't perfect, but I think you'll see what I mean)<br />
<br />
<br />
<b>Example 3: Action Filters as Context Filters</b><br />
<b><br /></b>
Lets swing back to Example 1, displaying the top 10 products in the Furniture Department. Well what if this was in a dashboard that allowed users to use an action to drive the top 10? Sounds like a nice little dashboard, and you know <a href="http://paintbynumbersblog.blogspot.com/2014/10/a-rough-guide-to-tableau-dashboard.html">I love using dashboard actions</a>!<br />
<b><br /></b>
Here's what the dashboard looks like, plus the filter action:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-Fx9nE4JbkLs/Vj9oa7zx7XI/AAAAAAAABzY/msVNvrK-Qc0/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B10.20.14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="198" src="http://3.bp.blogspot.com/-Fx9nE4JbkLs/Vj9oa7zx7XI/AAAAAAAABzY/msVNvrK-Qc0/s400/Screen%2BShot%2B2015-11-08%2Bat%2B10.20.14.png" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-CKZjDtl1R9w/Vj9oa6njx3I/AAAAAAAABzU/NBfbnl5ruEs/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B10.20.48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://2.bp.blogspot.com/-CKZjDtl1R9w/Vj9oa6njx3I/AAAAAAAABzU/NBfbnl5ruEs/s320/Screen%2BShot%2B2015-11-08%2Bat%2B10.20.48.png" width="238" /></a></div>
<br />
I suspect you've already figured out what's going to happen when I click on Furniture....<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-iKGX95adpEk/Vj9osFvY3vI/AAAAAAAABzk/vZHaijabNLI/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B10.22.17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://4.bp.blogspot.com/-iKGX95adpEk/Vj9osFvY3vI/AAAAAAAABzk/vZHaijabNLI/s400/Screen%2BShot%2B2015-11-08%2Bat%2B10.22.17.png" width="400" /></a></div>
<br />
yep I only see the 3 Furniture items that just happen to be in the top 10 overall. So how do I put this action filter into context? Well the first thing to realize is that you can't do this while setting up the dashboard, because you can't actually see an action filter on the filters shelf until it has been 'activated' or clicked. So in this instance you need to go to the dashboard, click the part of the screen that activates the action filter and then go into the sheet (or sheets) that have been filtered:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-vzi0TZ4_m2U/Vj9pjcftuYI/AAAAAAAABzs/CvB9unykRw8/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B10.25.31.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="95" src="http://2.bp.blogspot.com/-vzi0TZ4_m2U/Vj9pjcftuYI/AAAAAAAABzs/CvB9unykRw8/s320/Screen%2BShot%2B2015-11-08%2Bat%2B10.25.31.png" width="320" /></a></div>
<br />
Spot the action filter on the Filters shelf, and add it to context:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-1_K7F4xt2wY/Vj9pjaPdNQI/AAAAAAAABzw/pHXLZulCxN0/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B10.25.45.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="198" src="http://2.bp.blogspot.com/-1_K7F4xt2wY/Vj9pjaPdNQI/AAAAAAAABzw/pHXLZulCxN0/s400/Screen%2BShot%2B2015-11-08%2Bat%2B10.25.45.png" width="400" /></a></div>
<br />
And then when its turned grey you will notice that we now see the top 10 Furniture Items:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-zhrveVDh2Is/Vj9pjZ228RI/AAAAAAAABz0/_CqCvk1J0oo/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B10.25.54.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="173" src="http://2.bp.blogspot.com/-zhrveVDh2Is/Vj9pjZ228RI/AAAAAAAABz0/_CqCvk1J0oo/s400/Screen%2BShot%2B2015-11-08%2Bat%2B10.25.54.png" width="400" /></a></div>
<br />
And the dashboard is ready to use.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-UzWArf99mIQ/Vj9qy2NkJXI/AAAAAAAAB0E/If8gQxiZ7AA/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B10.31.16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="197" src="http://1.bp.blogspot.com/-UzWArf99mIQ/Vj9qy2NkJXI/AAAAAAAAB0E/If8gQxiZ7AA/s400/Screen%2BShot%2B2015-11-08%2Bat%2B10.31.16.png" width="400" /></a></div>
<br />
<br />
Note that if your dashboard action affects more than 1 sheet, then <b>you do have to go into each affected sheet</b> and one by one add that action filter to context, it <b>does not automatically apply to all sheets</b>.<br />
<br />
Remember again that it might not be immediately obvious that your action filter isn't doing what you expect it to, the results might look reasonable at first glance. So be very careful. Sometimes if you are not sure its worth just trying putting your filter into context to see what changes.<br />
<br />
Shout out to the Information Lab here, they have some nice tutorials on using action filters in context <a href="http://www.theinformationlab.co.uk/2014/06/12/dynamic-sets/">like this one</a> and <a href="http://www.theinformationlab.co.uk/2015/07/02/tableau-good-to-great-extending-action-filters/">this one</a>.<br />
<b><br /></b>
<br />
<b>Example 4: Level of Detail Calculations</b><br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<i>NOTE 16 Nov 2015 - This section only applies to FIXED calculations and not EXCLUDE or INCLUDE. See comments by Jonathan Drummey in the comments section below.</i></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<a href="http://www.tableau.com/learn/whitepapers/understanding-lod-expressions">Level of detail calculations</a> are great! Sure they suck from a performance perspective, but they enable you to do so many things that were near impossible before Tableau 9. Context Filters and LOD calcs work hand in hand and if you want to get the most out of LOD, then you need to be using Context Filters.<br />
<br />
Simple example again here, I'm going to use an LOD calc in order to calculate the % of total sales that come from each product category within each department. For something like this, even if I want to end up with a chart, I like to start with a table so I can see clearly the calculations happening.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-Haf8kGqSG8g/Vj9vttbapCI/AAAAAAAAB0U/0mjq5ejTAGc/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B10.52.14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="368" src="http://4.bp.blogspot.com/-Haf8kGqSG8g/Vj9vttbapCI/AAAAAAAAB0U/0mjq5ejTAGc/s640/Screen%2BShot%2B2015-11-08%2Bat%2B10.52.14.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-flMVpBLUd-Q/Vj9wH2ygj2I/AAAAAAAAB0c/FBEtUXynk-s/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B10.53.50.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="70" src="http://4.bp.blogspot.com/-flMVpBLUd-Q/Vj9wH2ygj2I/AAAAAAAAB0c/FBEtUXynk-s/s200/Screen%2BShot%2B2015-11-08%2Bat%2B10.53.50.png" width="200" /></a><a href="http://1.bp.blogspot.com/-Om-v3DA650M/Vj9wHzspscI/AAAAAAAAB0g/IfeZ469WolA/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B10.54.01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: right;"><img border="0" height="60" src="http://1.bp.blogspot.com/-Om-v3DA650M/Vj9wHzspscI/AAAAAAAAB0g/IfeZ469WolA/s200/Screen%2BShot%2B2015-11-08%2Bat%2B10.54.01.png" width="200" /></a></div>
<br />
Now lets say I decide to no longer stock 'Chairs & Chairmats' and so for my analysis I want to exclude them. Well if I filter them out, my LOD calc for Department Total doesn't change and so my % no longer adds up to 100% for the Furniture Department.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-JxS55LzhNic/Vj9wywIDXnI/AAAAAAAAB0s/lcqAw9RLqyQ/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B10.56.51.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="153" src="http://4.bp.blogspot.com/-JxS55LzhNic/Vj9wywIDXnI/AAAAAAAAB0s/lcqAw9RLqyQ/s640/Screen%2BShot%2B2015-11-08%2Bat%2B10.56.51.png" width="640" /></a></div>
<br />
Unless of course I add that filter to context:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-NRD3zl3M_4I/Vj9w-faJ5-I/AAAAAAAAB00/J52Hqjv2rkk/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B10.57.39.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="136" src="http://3.bp.blogspot.com/-NRD3zl3M_4I/Vj9w-faJ5-I/AAAAAAAAB00/J52Hqjv2rkk/s640/Screen%2BShot%2B2015-11-08%2Bat%2B10.57.39.png" width="640" /></a></div>
<br />
Similarly I could add a field that isn't in the view as a filter, and watch how the LOD driven totals don't change, throwing off my calculation, until I add it into context:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-0buW1iNDaM0/Vj9xdMsMS5I/AAAAAAAAB08/kjtKdMrr-nE/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B10.59.16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="148" src="http://2.bp.blogspot.com/-0buW1iNDaM0/Vj9xdMsMS5I/AAAAAAAAB08/kjtKdMrr-nE/s640/Screen%2BShot%2B2015-11-08%2Bat%2B10.59.16.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-8bJa-eXjgoA/Vj9xdMgV3hI/AAAAAAAAB1A/3sNNIBrEqK8/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B10.59.40.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="154" src="http://4.bp.blogspot.com/-8bJa-eXjgoA/Vj9xdMgV3hI/AAAAAAAAB1A/3sNNIBrEqK8/s640/Screen%2BShot%2B2015-11-08%2Bat%2B10.59.40.png" width="640" /></a></div>
<br />
<br />
BUT there are times with LOD calcs that you don't want to add a filter to context. Lets say I want to see ONLY Furniture categories, but I want to know their % of the TOTAL sales. I would use these calcs to get the total and the new %:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-V1YUOk_sU6c/Vj9ySHkxeYI/AAAAAAAAB1Q/R2t2RKfor7Y/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B11.02.09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="66" src="http://3.bp.blogspot.com/-V1YUOk_sU6c/Vj9ySHkxeYI/AAAAAAAAB1Q/R2t2RKfor7Y/s200/Screen%2BShot%2B2015-11-08%2Bat%2B11.02.09.png" width="200" /></a><a href="http://3.bp.blogspot.com/-zcd4nGRaBfc/Vj9ySCMel5I/AAAAAAAAB1U/SPWKTZ_tndU/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B11.02.55.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="58" src="http://3.bp.blogspot.com/-zcd4nGRaBfc/Vj9ySCMel5I/AAAAAAAAB1U/SPWKTZ_tndU/s200/Screen%2BShot%2B2015-11-08%2Bat%2B11.02.55.png" width="200" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-l3HgalZL6LI/Vj9yl1SUUJI/AAAAAAAAB1g/X7fbkumhnck/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B11.04.32.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="280" src="http://4.bp.blogspot.com/-l3HgalZL6LI/Vj9yl1SUUJI/AAAAAAAAB1g/X7fbkumhnck/s640/Screen%2BShot%2B2015-11-08%2Bat%2B11.04.32.png" width="640" /></a></div>
<br />
and then see what happens when I add Department as a regular filter:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-Nh3BR0IzTwM/Vj9y1geezyI/AAAAAAAAB1k/gQClH36EFLY/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B11.05.28.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="140" src="http://1.bp.blogspot.com/-Nh3BR0IzTwM/Vj9y1geezyI/AAAAAAAAB1k/gQClH36EFLY/s640/Screen%2BShot%2B2015-11-08%2Bat%2B11.05.28.png" width="640" /></a></div>
<br />
which is what I wanted, versus using Department as a Context Filter:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-_-YsSkv4d1I/Vj9zAFAlDxI/AAAAAAAAB1w/j1hjzMuyTLY/s1600/Screen%2BShot%2B2015-11-08%2Bat%2B11.05.38.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="138" src="http://1.bp.blogspot.com/-_-YsSkv4d1I/Vj9zAFAlDxI/AAAAAAAAB1w/j1hjzMuyTLY/s640/Screen%2BShot%2B2015-11-08%2Bat%2B11.05.38.png" width="640" /></a></div>
<br />
which gives me redundant numbers. So as you can see, when you are using LOD calculations, think carefully about which filters you want to be visual only (regular filters) and which filters you want to apply to the calculation itself (Context Filters)<br />
<br />
<br />
<br />
<b>Wrapping up</b><br />
<b><br /></b>
I hope you found that intro to Context Filters and the examples helpful, if you have any other good examples please feel free to mention them in the comments section and as usual all comments and corrections are welcome!<br />
<br />
<br />
<br />
<br />
<br />
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com11tag:blogger.com,1999:blog-8663284849781850746.post-37837606288835185012015-10-29T22:18:00.000-07:002016-03-19T06:44:25.776-07:00Sunshine on my ShouldersI don't know about you, but I'm already bored of this autumnal verging on wintery weather. As I was walking home from work tonight (in the dark and cold), feeling pretty glum and a bit <a href="https://en.wikipedia.org/wiki/Seasonal_affective_disorder">SAD</a> I thought "I know what would cheer me up, some sunshine and a nice viz". And so I've finally gone ahead and made the more up beat counterpart to my <a href="http://paintbynumbersblog.blogspot.com/2014/08/why-does-it-always-rain-on-me.html">rain viz</a>.<br />
<br />
<script src="https://public.tableau.com/javascripts/api/viz_v1.js" type="text/javascript"></script><br />
<div class="tableauPlaceholder" style="height: 769px; width: 904px;">
<noscript><a href='#'><img alt='Sunshine ' src='https://public.tableau.com/static/images/Su/Sunshine_0/Sunshine/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" height="769" style="display: none;" width="904"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='Sunshine_0/Sunshine' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Su/Sunshine_0/Sunshine/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showVizHome' value='no' /><param name='showTabs' value='y' /><param name='bootstrapWhenNotified' value='true' /></object></div>
<br />
<br />
A couple of notes:<br />
- Sunshine hours are not the same as daylight hours, they are also affected by cloud cover, rain etc... see <a href="https://en.wikipedia.org/wiki/Sunshine_duration">this explanation</a><br />
- When publishing this viz, I overwrote my original rain viz on Tableau Public by mistake by doing 'Save to Tableau Public' and not 'Save as to Tableau Public'. Be careful! If you are working from a previously published workbook, as I was here, then saving to Tableau Public will overwrite with no warning! I've lost that lovely counter which showed it had over 20,000 views..... :-(PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com4tag:blogger.com,1999:blog-8663284849781850746.post-34594951371233419072015-10-26T17:54:00.001-07:002016-03-19T06:44:25.766-07:00Rain clouds - now with animation!Remember that rain viz? Well here it is again, only this time with extra bonus feature animation. Click the green button once to start and once to stop.<br />
<br />
Want to know how its made? Then <a href="http://www.jewelloree.com/2015/10/26/data15-pimp-my-viz-2-electric-boogaloo-follow-up/">look here</a><br />
<br />
<script type='text/javascript' src='https://public.tableau.com/javascripts/api/viz_v1.js'></script><div class='tableauPlaceholder' style='width: 904px; height: 769px;'><noscript><a href='#'><img alt='Rain ' src='https://public.tableau.com/static/images/We/Weather2_0/Rain/1_rss.png' style='border: none' /></a></noscript><object class='tableauViz' width='904' height='769' style='display:none;'><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='Weather2_0/Rain' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/We/Weather2_0/Rain/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showVizHome' value='no' /><param name='showTabs' value='y' /><param name='bootstrapWhenNotified' value='true' /></object></div>
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com0tag:blogger.com,1999:blog-8663284849781850746.post-37874359276415668742015-10-24T15:10:00.000-07:002016-03-19T06:44:25.780-07:00Tableau Conference 2015 - My thoughtsSo today is recovery day - recovery from the epic week in Vegas that was Tableau Conference 2015. For various reasons this was probably my favourite conference yet, which is saying something, so I thought I'd use this sofa day to get some thoughts down before I forget (<a href="http://paintbynumbersblog.blogspot.com/2013/09/my-tableau-customer-conference-takeaways.html">I did this in 2013</a> too, but forgot last year). Ok here goes.....<br />
<br />
<b>1. Tableau has gotten to be freaking huge!</b><br />
Do you know how big the MGM Grand is? Its really <a href="http://paintbynumbersblog.blogspot.com/2015/09/room-service-worlds-biggest-hotels.html">really big</a>. And Tableau is now a big enough company, with a big enough community to fill it with no problem. The first US Tableau Conference I went to was San Diego in 2012 - it was awesome and I thought at the time it was a very big event. Looking back it seems teeny tiny.<br />
<br />
I was an early-ish adopter of Tableau, not one of the true renegades but I got into it in 2010 around version 5.2. Back then every time I talked about Tableau with someone, they had never heard of it and I got to introduce them to it. Between then and now Tableau has gone (sort of) mainstream and is a publicly listed company. Now I over hear people talking about Tableau on the street, in coffee shops and on the subway (seriously, these three things have happened). I also met someone at a meet-up who said he was looking for alternatives to traditional BI tools like Tableau - oh how times have changed!<br />
<br />
Three really important things haven't changed about Tableau and the conference though, despite the increase in scale:<br />
i) The excitement among the attendees and the community is genuine - hearing people scream and applaud the announcement of new features like 'viz within tooltip' warms my nerdy heart.<br />
ii) The company still cares - I got to meet many people from the Dev team and they really want to hear customer feedback and find ways to make things even better<br />
iii) I still get to hang out with some of my best friends in the world, and from all over the world, in one place for a short but magical week.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-0c5vhwP4J54/VivxMr_x6oI/AAAAAAAABuc/oKhY2MmRdkM/s1600/IMG_0329.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://1.bp.blogspot.com/-0c5vhwP4J54/VivxMr_x6oI/AAAAAAAABuc/oKhY2MmRdkM/s200/IMG_0329.jpg" width="200" /></a></div>
<br />
<br />
<b>2. My thoughts on new features</b><br />
Devs on stage, introducing new features during the opening keynote was one the highlights of the conference, as really it should be. All the devs did an amazing job presenting, half of them could quit Tableau for a career in stand-up comedy if they wanted. Anyway, features that caught my eye included:<br />
<br />
<ul>
<li>Vizzes in tooltips - This is going to have a BIG impact on the way we design things. This should be called the 'Andy Cotgreave Tooltip' in <a href="http://kb.tableau.com/articles/knowledgebase/barsintooltips">memoriam of this hack</a></li>
<li>Cross data source joins - lets face it, data blending can be a pain in the neck</li>
<li>Quick filters that work across data sources - this is going to be a big big benefit in dashboards that take data from different places, and will get around some of the problems that exist with parameters</li>
<li>Quick highlighting - or whatever its called is going to make scatter plots untouchable on my list of favourite chart types</li>
<li>Device specific dashboards - I'm still not sure that this is the 100% best answer, but mobile is a big problem for Tableau right now and this is definitely a step in the right direction.</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-6YNJgaKvquU/Vivw7Np38eI/AAAAAAAABuU/DmjmHw5OtwY/s1600/IMG_0340.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://4.bp.blogspot.com/-6YNJgaKvquU/Vivw7Np38eI/AAAAAAAABuU/DmjmHw5OtwY/s320/IMG_0340.jpg" width="320" /></a></div>
<div>
<br /></div>
<div>
<i>Device specific dashboards being presented - recognise the viz? More on that later :-)</i></div>
<div>
<br /></div>
<div>
Some things I would have liked to have seen but didn't:</div>
<div>
<ul>
<li>Dynamic parameters - simply as in parameters that update from a field. Seriously, another year with no solution??</li>
<li>Auto Save - as above, why not?</li>
<li>Easier formatting - global formatting is coming (yay!) but I don't think this includes things like customizing tooltips which is my major bugbear.</li>
</ul>
<div>
<br /></div>
</div>
<div>
<b>3. Shine Pulikathara rocked it at Iron Viz</b></div>
<div>
The fact that some people go to the Tableau Conference but don't go to see Iron Viz baffles me. Its the GUARANTEED BEST SESSION every year. This year's data set (<a href="http://www.gdeltproject.org/">GDELT</a>) looked really difficult to work with but each contestant pulled something out. My Slalom colleague <a href="http://sirvizalot.blogspot.com/">Matt Chambers</a> (more on Matt later) came up with some really clever calculations around media bias - but ran into some trouble making them work in the 20 minutes. And Skyler's viz was wonderfully colorful. But there was no dispute about the winner. I mean check this thing out, 20 minutes??!</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-iFgOJ5YEslo/Viv0TFvFJII/AAAAAAAABuo/lFU0ULMZK9o/s1600/Screen%2BShot%2B2015-10-24%2Bat%2B17.12.41.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="241" src="http://4.bp.blogspot.com/-iFgOJ5YEslo/Viv0TFvFJII/AAAAAAAABuo/lFU0ULMZK9o/s320/Screen%2BShot%2B2015-10-24%2Bat%2B17.12.41.png" width="320" /></a></div>
<div>
<br /></div>
<div>
And there were some lovely finishing touches like this:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-ywapWVVxiYY/Viv0yArvP9I/AAAAAAAABuw/YRXjsb6bN7g/s1600/IMG_0381.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://1.bp.blogspot.com/-ywapWVVxiYY/Viv0yArvP9I/AAAAAAAABuw/YRXjsb6bN7g/s200/IMG_0381.jpg" width="200" /></a></div>
<div>
<br /></div>
<div>
Shine did a great job presenting what is really a wonderful viz in terms of both design and storytelling. The black and white newspaper theme reminded me of my own <a href="http://paintbynumbersblog.blogspot.co.uk/2013/09/read-all-about-it-special-tcc13-viz.html">newspaper themed viz</a> I did a few years ago, which now looks a bit amateur in comparison! You can also see Shine's work on <a href="https://public.tableau.com/profile/shine.pulikathara#!/vizhome/TheWeeklyNews-IronVizChampion/WeeklyNews">Tableau Public</a> here, note that Shine didn't have to worry about font compatibility. I've been a fan of Shine's work since he started posting this year - I think this kid is going places.</div>
<div>
<br /></div>
<div>
And as for next year's Iron Viz, maybe I'll give entering it one last shot....</div>
<div>
<br /></div>
<div>
<b>4. I work with some really great people</b></div>
<br />
Slalom were out in force at this conference, there were something like 50 of us there and I got to meet colleagues from around the country. I also got to present with <a href="http://thevizioneer.blogspot.com/">Nelson Davis</a> and <a href="http://datographer.blogspot.com/">John Mathis</a> on the <a href="http://paintbynumbersblog.blogspot.com/2015/07/fighting-ebola-with-tableau.html">Ebola project</a> we've been working on for the <a href="http://www.tableaufoundation.org/">Tableau Foundation</a>. John and Nelson have poured serious amounts of effort into this project and I was so happy to be able to present it with them.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-zKHm8UxvUl4/Viv33m_L_TI/AAAAAAAABvA/PUvZZDyjyvg/s1600/IMG_0344.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://2.bp.blogspot.com/-zKHm8UxvUl4/Viv33m_L_TI/AAAAAAAABvA/PUvZZDyjyvg/s200/IMG_0344.jpg" width="200" /></a><a href="http://2.bp.blogspot.com/-GCNepaQzbuU/Viv33pOCNsI/AAAAAAAABu8/t6D6j0dtvCM/s1600/IMG_0343.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://2.bp.blogspot.com/-GCNepaQzbuU/Viv33pOCNsI/AAAAAAAABu8/t6D6j0dtvCM/s200/IMG_0343.jpg" width="200" /></a></div>
<br />
Also a big shout out to my great boss from the New York office Jim Gurney and my NY colleague Steven Carter who have both been incredibly supportive to me (pic below of us at the keynote). And thanks to James Young and Allan Walker for organising a <u>killer</u> party for the Zen Masters and Tableau Devs, what a view!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-W1uEN9inTME/Viv4uMk9mCI/AAAAAAAABvM/4A7tbedT9cA/s1600/IMG_0335.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://3.bp.blogspot.com/-W1uEN9inTME/Viv4uMk9mCI/AAAAAAAABvM/4A7tbedT9cA/s200/IMG_0335.jpg" width="200" /></a><a href="http://1.bp.blogspot.com/-YLM2O7YP9qU/Viv4uC58UaI/AAAAAAAABvQ/UdyV5R5kP7M/s1600/IMG_0384.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://1.bp.blogspot.com/-YLM2O7YP9qU/Viv4uC58UaI/AAAAAAAABvQ/UdyV5R5kP7M/s320/IMG_0384.JPG" width="320" /></a></div>
<br />
<br />
<b>5. Seeing the impact of last years blogging session</b><br />
At the 2014 conference in Seattle, <a href="http://www.jewelloree.com/">Jewel Loree</a> organised a panel on Tableau blogging with both myself and <a href="http://vizwiz.blogspot.com/">Andy Kriebel</a>. The session was REALLY well attended and was a lot of fun, you can still <a href="http://vizwiz.blogspot.com/2014/09/blogger-panel.html">watch it here</a>. Well after that, tweets started pouring in from people who attended and had set up their own blog because of it. Fast forward a year, and one of those people who was inspired to start a blog is an Iron Viz contestant and is featured on this years blogging panel. Oh and I'm pleased to say he's now a colleague of mine too - that's <a href="http://sirvizalot.blogspot.com/">Matt Chambers</a>.<br />
<br />
Another person who attended that panel session in 2014 was <a href="http://vizraider.blogspot.com/">Chris Jones</a>. Chris introduced himself to me at the conference and I was really inspired by his journey with Tableau in the last year - he's even been teaching it to kids at his son's school. Check out this <a href="https://prezi.com/sjfkempuk35p/data/?utm_campaign=share&utm_medium=copy">presentation</a> he gave to them, the bit about teaching dimensions, measures, continuous and discrete with a dog is pure genius.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-2suZPXjy2yM/Viv8em-kCxI/AAAAAAAABvg/KKWNu_UNT5E/s1600/Screen%2BShot%2B2015-10-24%2Bat%2B17.47.23.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="216" src="http://4.bp.blogspot.com/-2suZPXjy2yM/Viv8em-kCxI/AAAAAAAABvg/KKWNu_UNT5E/s320/Screen%2BShot%2B2015-10-24%2Bat%2B17.47.23.png" width="320" /></a></div>
<br />
I'd love to hear the 'one year on' stories from other people who attended that session.<br />
<br />
<br />
<b>6. Personal highlights</b><br />
Ok now its time to show off and brag for a second. But did you see my rain viz on that really big screen being used to demo new features to 11,000 people in a fricking arena?!?! Man that felt good. Shame they took away the clouds though. Compare and contrast with <a href="http://paintbynumbersblog.blogspot.com/2014/08/why-does-it-always-rain-on-me.html">the original</a> below.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-c9xLlVkvvtY/Viv9wgzoH2I/AAAAAAAABvs/XphppJevSMo/s1600/IMG_0339.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://3.bp.blogspot.com/-c9xLlVkvvtY/Viv9wgzoH2I/AAAAAAAABvs/XphppJevSMo/s320/IMG_0339.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-3mJwB5Ooh3I/Viv9-M169bI/AAAAAAAABv0/drEsHaS-UP4/s1600/Screen%2BShot%2B2015-10-24%2Bat%2B17.52.43.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="241" src="http://4.bp.blogspot.com/-3mJwB5Ooh3I/Viv9-M169bI/AAAAAAAABv0/drEsHaS-UP4/s320/Screen%2BShot%2B2015-10-24%2Bat%2B17.52.43.png" width="320" /></a></div>
<br />
Other highlights included the Zen Master presentation, being a Tableau Doctor for an hour, <a href="http://thatdatavizguy.com/">Paul Chapman's</a> EasyJet talk, the New York New York roller coaster, <a href="http://www.haydenplanetarium.org/tyson/">Neil DeGrasse Tyson</a> happy hour, meeting up with Slalom clients, receiving smuggled <a href="http://www.eat17baconjam.co.uk/">Bacon Jam</a> from <a href="http://datajedininja.blogspot.com/">Carl Allchin</a> and tweeting it to the big screen, but most of all just hanging out and having fun with everyone, especially these two<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-noCPmIXFHtM/ViwARu2P_kI/AAAAAAAABwA/T1UeeCU4--g/s1600/Screen%2BShot%2B2015-10-24%2Bat%2B18.03.45.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="297" src="http://3.bp.blogspot.com/-noCPmIXFHtM/ViwARu2P_kI/AAAAAAAABwA/T1UeeCU4--g/s320/Screen%2BShot%2B2015-10-24%2Bat%2B18.03.45.png" width="320" /></a></div>
<br />
<div style="text-align: center;">
<i>photo credit: Jewel</i></div>
<br />
<br />
<br />
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com5tag:blogger.com,1999:blog-8663284849781850746.post-70428809571397850532015-10-18T13:08:00.000-07:002016-03-19T06:44:25.817-07:00Fantasy Hoops Draft AssistantThe NBA season is almost upon us once again, and that also means that Fantasy Basketball will be starting up soon too. Last year I was in the league managed by Ben Jones of Tableau and <a href="http://dataremixed.com/">http://dataremixed.com/</a> fame. I did pretty well, but I was really scrambling on draft night.<br />
<br />
One thing I didn't really appreciate last year was how important winning the different categories is, especially the ones that don't get so much attention. For example in fantasy hoops blocks have as much clout as points, and so choosing less well known players who are strong blockers can be as legitimate a strategy as going for the big scorers.<br />
<br />
This year, to try and help my draft approach I have come up with my Fantasy Hoops Draft Assistant in Tableau. This takes last years data and compares each player to the league average across all the categories, individually and combined to a total. Here it is:<br />
<br />
<script type='text/javascript' src='https://public.tableau.com/javascripts/api/viz_v1.js'></script><div class='tableauPlaceholder' style='width: 904px; height: 769px;'><noscript><a href='#'><img alt='Fantasy Hoops Draft Assistant ' src='https://public.tableau.com/static/images/Fa/FantasyNBADraftAssistant/FantasyHoopsDraftAssistant/1_rss.png' style='border: none' /></a></noscript><object class='tableauViz' width='904' height='769' style='display:none;'><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='FantasyNBADraftAssistant/FantasyHoopsDraftAssistant' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Fa/FantasyNBADraftAssistant/FantasyHoopsDraftAssistant/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showVizHome' value='no' /><param name='showTabs' value='y' /><param name='bootstrapWhenNotified' value='true' /></object></div>
<br />
Whatever your strategy - whether selecting all-rounders or targeting specific categories, this tool should help you prepare for the draft and respond as picks are made.<br />
<br />
The scores work like this, using points as the example:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-yrk2WjO9wLQ/ViP7vPnrzGI/AAAAAAAABts/jiyxX3rGmoY/s1600/Screen%2BShot%2B2015-10-18%2Bat%2B16.02.30.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="121" src="http://3.bp.blogspot.com/-yrk2WjO9wLQ/ViP7vPnrzGI/AAAAAAAABts/jiyxX3rGmoY/s400/Screen%2BShot%2B2015-10-18%2Bat%2B16.02.30.png" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-fMx0X8q0Zt0/ViP7vGgV5DI/AAAAAAAABto/udgHLYawkdg/s1600/Screen%2BShot%2B2015-10-18%2Bat%2B16.02.44.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="110" src="http://3.bp.blogspot.com/-fMx0X8q0Zt0/ViP7vGgV5DI/AAAAAAAABto/udgHLYawkdg/s400/Screen%2BShot%2B2015-10-18%2Bat%2B16.02.44.png" width="400" /></a></div>
<br />
As you can see, Level of Detail calculations come in handy here!<br />
<br />
The FT% and FG% are slightly different. I weighted them by the number of shots taken adjusted the scores by a factor of 100 to fit along with the rest:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-FVpUfoEgGGY/ViP7vZkdwNI/AAAAAAAABuA/rkVZkhHPWBw/s1600/Screen%2BShot%2B2015-10-18%2Bat%2B16.04.23.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="147" src="http://2.bp.blogspot.com/-FVpUfoEgGGY/ViP7vZkdwNI/AAAAAAAABuA/rkVZkhHPWBw/s400/Screen%2BShot%2B2015-10-18%2Bat%2B16.04.23.png" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-TMvjGwMJCqE/ViP7v68_cDI/AAAAAAAABuE/WfgZYEmG3qk/s1600/Screen%2BShot%2B2015-10-18%2Bat%2B16.04.35.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="77" src="http://4.bp.blogspot.com/-TMvjGwMJCqE/ViP7v68_cDI/AAAAAAAABuE/WfgZYEmG3qk/s400/Screen%2BShot%2B2015-10-18%2Bat%2B16.04.35.png" width="400" /></a></div>
<br />
<br />
I also added a minimum requirement of 500 minutes played as a context filter.<br />
<br />
Waiver: Last seasons performance is no guarantee of success this year - so please don't blame me if you use this tool and lose your league.....<br />
<br />
<br />
<br />
<br />
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com2tag:blogger.com,1999:blog-8663284849781850746.post-7251353027642871712015-10-10T16:49:00.001-07:002016-03-19T06:44:25.822-07:00Tableau Tip - Comparing a custom date range with the prior yearHere's a quick tip based on a problem that I solved with a colleague this week. Take the following scenario:<br />
<br />
You want to see sales for a date range which you can select as you like, and compare that with the same date range one year earlier. And here's the catch - the date range you pick can be over a year. So for example you might select Feb 2015 to Aug 2015 and compare that with Feb 2014 to Aug 2014 OR you might select Jan 2014 to Apr 2015 and compare that with Jan 2013 to Apr 2014. So the periods can overlap.<br />
<br />
Here's how we solved it:<br />
<br />
To see the sum of sales for the current custom period, use parameters - one for start date and one for end date. In our case all data was registered at month start and we were doing months only. Because of this we didn't want to see the calendar appear so we used a list of dates created in Excel and copy and pasted in to the parameter. Example using Superstore Sales below, note US date format:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-anakAibIZEs/Vhmd-d6-9rI/AAAAAAAABsQ/tzONjXUHP5c/s1600/Screen%2BShot%2B2015-10-10%2Bat%2B19.21.37.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="400" src="http://2.bp.blogspot.com/-anakAibIZEs/Vhmd-d6-9rI/AAAAAAAABsQ/tzONjXUHP5c/s400/Screen%2BShot%2B2015-10-10%2Bat%2B19.21.37.png" width="187" /></a></div>
<a href="http://3.bp.blogspot.com/-FJIlr_ZdA2c/Vhmkm304cwI/AAAAAAAABtU/26vE-9RFLLg/s1600/Screen%2BShot%2B2015-10-10%2Bat%2B19.51.41.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;"><img border="0" height="398" src="http://3.bp.blogspot.com/-FJIlr_ZdA2c/Vhmkm304cwI/AAAAAAAABtU/26vE-9RFLLg/s400/Screen%2BShot%2B2015-10-10%2Bat%2B19.51.41.png" width="400" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
And then duplicate the 'Start Date' parameter and name it 'End Date'.<br />
<br />
Now what I often like to do when I want to bring back data that meets a certain criteria (in this case fit a date range, but could be 'is within a region' etc...) is create a calculated field that returns the value if the criteria is met and 0 if its not met. This means it can still be aggregated however you like and you don't have to worry about the potential conflict or impact of filtering. So in this case we wrote the following calculated field for the current period sales<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-8N7lKVGfeRU/Vhmfd2jsi1I/AAAAAAAABsk/Jy5uHtgi-jU/s1600/Screen%2BShot%2B2015-10-10%2Bat%2B19.29.43.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="91" src="http://1.bp.blogspot.com/-8N7lKVGfeRU/Vhmfd2jsi1I/AAAAAAAABsk/Jy5uHtgi-jU/s640/Screen%2BShot%2B2015-10-10%2Bat%2B19.29.43.png" width="640" /></a></div>
<br />
<br />
Notice how the IF statement is completely inside the aggregation - that's something you can use in many situations including much more complicated calculations. And again in our example, all data was at month level.<br />
<br />
Now how about the prior period, one year back? Well because the periods can overlap and can be any period we can't use one of the standard table calculations, at least I don't think so. So we made use of the DATEADD function with a value of 1 to offset the order date by a year, so that we pick up prior data. Like so<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-zkpYW-3jPlw/VhmhhMGVWcI/AAAAAAAABs0/3_W1VMLF8-o/s1600/Screen%2BShot%2B2015-10-10%2Bat%2B19.38.34.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="134" src="http://2.bp.blogspot.com/-zkpYW-3jPlw/VhmhhMGVWcI/AAAAAAAABs0/3_W1VMLF8-o/s640/Screen%2BShot%2B2015-10-10%2Bat%2B19.38.34.png" width="640" /></a></div>
A quick line plot shows that the calculations are doing what we expect<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-l9A_2LjbUvg/VhmjHdfRnUI/AAAAAAAABtA/BqKncQx4JYk/s1600/Screen%2BShot%2B2015-10-10%2Bat%2B19.45.10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="307" src="http://3.bp.blogspot.com/-l9A_2LjbUvg/VhmjHdfRnUI/AAAAAAAABtA/BqKncQx4JYk/s400/Screen%2BShot%2B2015-10-10%2Bat%2B19.45.10.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
And now we can very easily do comparative calculations of current period versus prior period, for example to see % growth across categories</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-xbgZh2SNkIc/Vhmj2w3gs_I/AAAAAAAABtI/JApNzj8LVdQ/s1600/Screen%2BShot%2B2015-10-10%2Bat%2B19.48.15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="499" src="http://3.bp.blogspot.com/-xbgZh2SNkIc/Vhmj2w3gs_I/AAAAAAAABtI/JApNzj8LVdQ/s640/Screen%2BShot%2B2015-10-10%2Bat%2B19.48.15.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
hope you find that useful.</div>
<br />
<br />
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com4tag:blogger.com,1999:blog-8663284849781850746.post-77040104106962920102015-10-04T11:05:00.002-07:002016-03-19T06:44:25.835-07:002015-16 Tableau Zen MasterI'm very honoured to have been named a Tableau Zen Master again this year and be among such an <a href="https://www.tableau.com/ZenMasters">impressive group of people</a> - thank you Tableau!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-xLlYQh9ETa8/VhFqawMVewI/AAAAAAAABr4/d_oSvePYyzE/s1600/croc.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://3.bp.blogspot.com/-xLlYQh9ETa8/VhFqawMVewI/AAAAAAAABr4/d_oSvePYyzE/s320/croc.JPG" width="320" /></a></div>
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com7tag:blogger.com,1999:blog-8663284849781850746.post-88816340240720306452015-09-20T08:09:00.001-07:002016-03-19T06:44:25.850-07:00Room Service - The World's Biggest HotelsWell the Tableau Conference is right around the corner, so its time for another conference themed viz. This year the conference is in Las Vegas, and one thing Vegas is known for is its massive hotels. So here's a view of how they sit among the world's biggest - turns out they do pretty well and TC15 will be held in the world number 3, the MGM Grand. See you there!<br />
<br />
<script type='text/javascript' src='https://public.tableau.com/javascripts/api/viz_v1.js'></script><div class='tableauPlaceholder' style='width: 904px; height: 769px;'><noscript><a href='#'><img alt='Room Service ' src='https://public.tableau.com/static/images/Ho/HotelsTableau/RoomService/1_rss.png' style='border: none' /></a></noscript><object class='tableauViz' width='904' height='769' style='display:none;'><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='HotelsTableau/RoomService' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/Ho/HotelsTableau/RoomService/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showVizHome' value='no' /><param name='showTabs' value='y' /><param name='bootstrapWhenNotified' value='true' /></object></div>
<br />
<br />
<br />
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com11tag:blogger.com,1999:blog-8663284849781850746.post-18580975059583398192015-07-16T18:56:00.001-07:002016-03-19T06:44:25.759-07:00Fighting Ebola with Tableau<span style="font-family: inherit;">In October of last year <a href="http://datablick.com/blog/">Anya A’Hearn</a> sent an email around to the rest of the Tableau Zen Masters to let us know about upcoming projects sponsored by the <a href="http://www.tableaufoundation.org/">Tableau Foundation</a>, which had recently been set up. </span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Tableau was going to provide free software and financial support to a few select charitable projects aiming to use data to tackle problems. Tableau wanted to know if the Zens was would we be willing to volunteer our time and skills to help the project teams fully utilize their Tableau resources.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Because of my brief background working in Infectious Disease Epidemiology, and because it made sense geographically, I put myself forward to assist with a collaboration between the <a href="http://www.earthinstitute.columbia.edu/">Columbia University Earth Institute</a> and a company called <a href="http://www.dimagi.com/">Dimagi</a>. The goal of the project was to utilize mobile phone technology and teams of contact tracers to conduct contact tracing to combat the spread of Ebola in Guinea, West Africa. </span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Contact tracing works more or less like this: After a patient is diagnosed with Ebola, the people who had been in contact with that patient (the "source case") are identified and monitored each day for 21 days, which is the incubation period for Ebola. Contact tracing is an established method for controlling the spread of a disease.</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-UIgp1rOpl-0/Vahac3M2meI/AAAAAAAABqU/sI159t3EzQ4/s1600/contactdiagram.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="http://2.bp.blogspot.com/-UIgp1rOpl-0/Vahac3M2meI/AAAAAAAABqU/sI159t3EzQ4/s400/contactdiagram.png" width="400" /></a></div>
<br />
<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]-->
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>JA</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
<w:UseFELayout/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="276">
<w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" Priority="39" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" Name="toc 9"/>
<w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
</w:LatentStyles>
</xml><![endif]-->
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:Cambria;
mso-ascii-font-family:Cambria;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Cambria;
mso-hansi-theme-font:minor-latin;
mso-ansi-language:EN-US;}
</style>
<![endif]-->
<!--StartFragment-->
<!--EndFragment--><br />
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><span lang="EN-US"><span style="font-family: inherit;">Understanding
the project<o:p></o:p></span></span></b></div>
<span style="font-family: inherit;"><br /></span>
<div class="MsoNormal">
<span style="font-family: inherit;">I met up with Dr Jilian Sacks, part of the team from Columbia who were spearheading the project. Jilian explained to me how in this situation the contact tracers would be paid volunteers from the communities in Guinea, and the recording of information would be captured on basic smart phones via a questionnaire app created by Dimagi, called CommCare. The app would lead the contact tracers through a series of questions designed to capture information about the contact and record signs of symptoms. The app also provides prompts for health information or advice messages to be delivered. That data is then submitted from the phone and loaded onto a database. And that’s where Tableau comes in.</span></div>
<div class="MsoNormal">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-N9l4nubjWjY/VahaqVnnPfI/AAAAAAAABqc/ceC-F7Rvyyk/s1600/phones.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="308" src="http://4.bp.blogspot.com/-N9l4nubjWjY/VahaqVnnPfI/AAAAAAAABqc/ceC-F7Rvyyk/s640/phones.png" width="640" /></a></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-l-Ljcj1_cTg/Vahaybrk37I/AAAAAAAABqk/V7IuYjPdJqE/s1600/phoneaction.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="http://2.bp.blogspot.com/-l-Ljcj1_cTg/Vahaybrk37I/AAAAAAAABqk/V7IuYjPdJqE/s400/phoneaction.png" width="356" /></a></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<i><span style="color: blue; font-family: inherit;">(Aboubacar Diallo, mHealth Country Coordinator of the Program, leading a training on CommCare for Contact Tracers in one of the communes of Conakry).</span></i></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: inherit;">Given that all this information about Ebola contacts was being captured, the goal was to utilize Tableau to visualize the information to better understand the overall picture, and more importantly to help manage the operation on a day-to-day basis.</span></div>
<div class="MsoNormal">
<span style="font-family: inherit;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: inherit;">I created a few dashboards which captured information about the contact registrations, follow up visits and closures. Creating these dashboards was in many ways different from what I normally do as a consultant and presented some specific challenges:</span></div>
<br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">-<span class="Apple-tab-span" style="white-space: pre;"> </span><b>We had to get up and running very quickly: </b>People working on the ground needed to see information immediately and so there was little time for extensive requirements gathering, wire framing and design phases.</span><br />
<span style="font-family: inherit;">-<span class="Apple-tab-span" style="white-space: pre;"> </span><b>Survey data can be tricky to work with:</b> The data design had been set up to service Dimagi’s systems, and the translation to Tableau was quite tricky.</span><br />
<span style="font-family: inherit;">-<span class="Apple-tab-span" style="white-space: pre;"> </span><b>I had a lack of familiarity with the topic:</b> I had to learn about what was and wasn’t important as we progressed. For example, one element that turned out to be of importance was measuring the amount of resistance (even violence) the contact tracers faced when carrying out their work.</span><br />
<span style="font-family: inherit;">-<span class="Apple-tab-span" style="white-space: pre;"> </span><b>The dataset was continually evolving: </b>As the work progressed, new fields were added to the survey data, or changes were made to existing data to address data quality issues.</span><br />
<span style="font-family: inherit;">-<span class="Apple-tab-span" style="white-space: pre;"> </span><b>There were language barriers: </b>The database was in English (and English is the only language I really know) but the dashboards needed to be in French.</span><br />
<span style="font-family: inherit;">-<span class="Apple-tab-span" style="white-space: pre;"> </span><b>Time was in short supply: </b>I still had to hold down a very demanding day job and do this in the evenings and weekends.</span><br />
<div>
<br /></div>
<div>
<span style="font-family: inherit;">However, working with Jilian Sacks and Elizabeth Zehe from the Columbia team on the requirements and with Tyler Sheffels at Dimagi on the database and Tableau Server, we managed to get some dashboards off the ground and into the hands of healthcare workers and officials in Guinea.</span></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-wUoSXOJrR38/VahbYBKjSTI/AAAAAAAABqs/QOCdP0oIGBw/s1600/womanshead.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="http://4.bp.blogspot.com/-wUoSXOJrR38/VahbYBKjSTI/AAAAAAAABqs/QOCdP0oIGBw/s400/womanshead.png" width="356" /></a></div>
<div>
<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]-->
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>JA</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
<w:UseFELayout/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="276">
<w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" Priority="39" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" Name="toc 9"/>
<w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
</w:LatentStyles>
</xml><![endif]-->
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:Cambria;
mso-ascii-font-family:Cambria;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Cambria;
mso-hansi-theme-font:minor-latin;
mso-ansi-language:EN-US;}
</style>
<![endif]-->
<!--StartFragment--><span style="color: blue; font-family: inherit;"><span lang="EN-US" style="font-size: 12pt;">(<i>A doctor
in charge of health for one of the communes in Conakry, the Capital of Guinea,
at a training.)</i></span><!--EndFragment-->
</span></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<span style="font-family: inherit;">These dashboards covered summary views of the situation on the ground, but it quickly emerged that some views giving more detailed analysis of the activity of the contact tracers was required to really add value to the management of the operation. </span></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<div>
<b><span style="font-family: inherit;">Enter the cavalry</span></b></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;">Fortunately for me, I have some great colleagues at <a href="https://www.slalom.com/">Slalom</a> and they came in to really drive these new dashboards forward.</span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;">Firstly John Mathis (of Iron Viz fame) not only helped to refine and organize the existing dashboards, but also created a couple of brilliant views that would enable daily management of the operations and the activities of the contact tracers. The views that John created proved to be extremely helpful to the project teams and are viewed every day. John also worked very closely with Tyler to get the database into the best shape possible for use within Tableau.</span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;">Next up we needed someone to help create a single overall KPI view, and for this fellow Zen Master Nelson Davis stepped up to the plate. Nelson put his Tableau skills to work to merge multiple datasets into a single page view of what had happened in the last 7 days.</span></div>
</div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<span style="font-family: inherit;">John and Nelson both managed to not only show what did happen but also show what didn’t happen—a skill that anyone who has worked with data knows to be extremely difficult. </span><br />
<span style="font-family: inherit;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-VevCryD1ngI/Vahdp_1gPtI/AAAAAAAABrI/s0QsUiLVQhU/s1600/dashboards.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="136" src="http://3.bp.blogspot.com/-VevCryD1ngI/Vahdp_1gPtI/AAAAAAAABrI/s0QsUiLVQhU/s640/dashboards.png" width="640" /></a></div>
<span style="color: blue; font-size: 16px;">(</span><i style="color: blue; font-size: 16px;">Some of the dashboards.)</i><br />
<br />
<span style="font-family: inherit;"><br /></span>
<b><span style="font-family: inherit;">The results</span></b><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">I’m very pleased to say that our hard work has been well-received, not just by the immediate project teams but also by the health management teams and frontline contact tracing supervisors in Guinea and even the government's National Ebola Response Committee. The most rewarding part of this process has been to see pictures like those below and know that we did something that is really being put to use.</span><br />
<div>
<span style="font-family: inherit;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/--Ws9zY-iCuE/VahbrOGnJuI/AAAAAAAABq0/531lXzvV6b0/s1600/Pepe.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="315" src="http://2.bp.blogspot.com/--Ws9zY-iCuE/VahbrOGnJuI/AAAAAAAABq0/531lXzvV6b0/s400/Pepe.png" width="400" /></a></div>
<div>
<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]-->
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>JA</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
<w:UseFELayout/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="276">
<w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" Priority="39" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" Name="toc 9"/>
<w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
</w:LatentStyles>
</xml><![endif]-->
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:Cambria;
mso-ascii-font-family:Cambria;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Cambria;
mso-hansi-theme-font:minor-latin;
mso-ansi-language:EN-US;}
</style>
<![endif]-->
<!--StartFragment-->
<div class="MsoNormal">
<span lang="EN-US"><span style="color: blue; font-family: inherit;">(</span><i><span style="color: blue; font-family: inherit;">Dr.
Pépé Bilivogui, Lead of the Surveillance Pillar of the National Ebola Response Committee
in Guinea.)</span><o:p></o:p></i></span></div>
<!--EndFragment--></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-yMg6bFnZ7ic/Vahb54N2PBI/AAAAAAAABq8/tpFiii5yi7w/s1600/Alain.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="http://4.bp.blogspot.com/-yMg6bFnZ7ic/Vahb54N2PBI/AAAAAAAABq8/tpFiii5yi7w/s400/Alain.png" width="400" /></a></div>
<div>
<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]-->
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>JA</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
<w:UseFELayout/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="276">
<w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" Priority="39" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" Name="toc 9"/>
<w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
</w:LatentStyles>
</xml><![endif]-->
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:Cambria;
mso-ascii-font-family:Cambria;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Cambria;
mso-hansi-theme-font:minor-latin;
mso-ansi-language:EN-US;}
</style>
<![endif]-->
<!--StartFragment-->
<div class="MsoNormal">
<i><span lang="EN-US"><span style="color: blue; font-family: inherit;">(Dr.
Alain Achi, one of the Guinea-based project staff, leading a training on
CommCare and Tableau for Contact Tracers in one of the Communes of Conakry.)</span><o:p></o:p></span></i></div>
<!--EndFragment--></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<div>
<span style="font-family: inherit;">We also received this email from Neal Myrick, who heads up the Tableau Foundation:</span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;">“Was at the Ebola Innovation Summit in SFO yesterday. Randomly met an advisor to the President of Guinea. He saw my name tag, swung his computer around and showed me the live Tableau visualizations from the project with Dimagi and Columbia University. Really stellar!”</span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;">It doesn’t get much better than that.</span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;">I presented our work along with Jilian and Beth from the Columbia team and Tyler from Dimagi at the <a href="http://dogooddata.com/">Do Good Data</a> conference in Chicago, which was a great experience.</span></div>
</div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<b><span style="font-family: inherit;"><br /></span></b></div>
<div>
<div>
<b><span style="font-family: inherit;">What’s next?</span></b></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;">Unfortunately the work is not done as Ebola is still present in Guinea (as well as in neighboring Sierra Leone and Liberia). Despite the fact that the world’s tv cameras have stopped filming it, the epidemic is still going and we need to keep supporting efforts to slow it. We’ll continue to do our small part by improving the information flow and hope that that makes a difference.</span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;">I’m pleased to say that we will be presenting this story at the <a href="http://tc15.tableau.com/">Tableau Conference</a> in October, so come and find out more.</span></div>
</div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;"><b>The team</b></span></div>
<div>
<span style="font-family: inherit;"><b><br /></b></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-naQiypvdLUM/Vahf7ZNjvsI/AAAAAAAABrU/Nnzc4ayVw60/s1600/team.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="http://1.bp.blogspot.com/-naQiypvdLUM/Vahf7ZNjvsI/AAAAAAAABrU/Nnzc4ayVw60/s400/team.png" width="293" /></a></div>
<div>
<span style="font-family: inherit;"><b><br /></b></span></div>
<div>
<span style="font-family: inherit;"><b><br /></b></span></div>
<div>
<span style="font-family: inherit;"><b><br /></b></span></div>
<div>
<span style="font-family: inherit;"><b><br /></b></span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<br /></div>
PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com3tag:blogger.com,1999:blog-8663284849781850746.post-24568642040363580552015-04-20T21:30:00.001-07:002016-03-19T06:44:25.763-07:00Real Estate of Mind: Exploring New York City real estate data<br />
<script src="https://public.tableau.com/javascripts/api/viz_v1.js" type="text/javascript"></script><br />
<div class="tableauPlaceholder" style="height: 769px; width: 904px;">
<noscript><a href='#'><img alt='Real Estate of Mind ' src='https://public.tableau.com/static/images/re/real_estate_of_mind/RealEstateofMind/1_rss.png' style='border: none' /></a></noscript><object class="tableauViz" height="769" style="display: none;" width="904"><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='site_root' value='' /><param name='name' value='real_estate_of_mind/RealEstateofMind' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https://public.tableau.com/static/images/re/real_estate_of_mind/RealEstateofMind/1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='showVizHome' value='no' /><param name='showTabs' value='y' /><param name='bootstrapWhenNotified' value='true' /></object></div>
<br />
What's this all about?<br />
<br />
We've recently bought an apartment here in New York, and it got me thinking a bit about the property market. There are lots of websites like <a href="http://streeteasy.com/">http://streeteasy.com/</a> for finding properties, and there are of course resources like <a href="http://www.nytimes.com/pages/realestate/index.html">http://www.nytimes.com/pages/realestate/index.html</a> for reading about the market, but you never really get the full picture all at once.<br />
<br />
I was interested in seeing what an entire years worth of residential property sales looks like In New York, and so I went in search of a data source. Fortunaltey New York City is actually really good at making data publicly available through the its open data initiative <a href="https://data.cityofnewyork.us/">https://data.cityofnewyork.us/</a>. And I specifically found this site <a href="http://www1.nyc.gov/site/finance/taxes/property-rolling-sales-data.page">http://www1.nyc.gov/site/finance/taxes/property-rolling-sales-data.page</a> which provides data for EVERY SINGLE PROPERTY SALE in New York City for the last 12 months.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-cgjZgWPUqcQ/VTWQ8iXMeMI/AAAAAAAABmY/nMTnNqIomwo/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B19.50.48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-cgjZgWPUqcQ/VTWQ8iXMeMI/AAAAAAAABmY/nMTnNqIomwo/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B19.50.48.png" height="244" width="320" /></a></div>
<br />
<br />
<br />
I decided to start with just Manhattan and downloaded the Excel. And it looks like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-qmxx9g7nmr8/VTWRZ8BRmTI/AAAAAAAABmg/vtTtvT8eyYw/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B19.52.38.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-qmxx9g7nmr8/VTWRZ8BRmTI/AAAAAAAABmg/vtTtvT8eyYw/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B19.52.38.png" height="360" width="640" /></a></div>
<br />
Oh no, stupid Excel format - guess I'll have to edit it before loading into Tableau.....<br />
<br />
<br />
<a name='more'></a><br />
<br />
...... nope! Tableau 9 to the rescue:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-FAtHo0uvpWw/VTWT-lu_M-I/AAAAAAAABmo/BP-tWD6kKUs/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B20.03.46.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-FAtHo0uvpWw/VTWT-lu_M-I/AAAAAAAABmo/BP-tWD6kKUs/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B20.03.46.png" height="225" width="640" /></a></div>
<br />
BOOM! What a cool new feature.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-NEWOAXjQqJY/VTWUMLAMsfI/AAAAAAAABmw/BnFTAfE19ns/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B20.04.47.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-NEWOAXjQqJY/VTWUMLAMsfI/AAAAAAAABmw/BnFTAfE19ns/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B20.04.47.png" height="196" width="640" /></a></div>
<br />
<br />
Step one complete (I did add a unique ID field as well). Next up I wanted to be able to map all the addresses. The file includes the address, sometimes with apartment number sometimes without, and zipcode but I'd like to be able to plot each address exactly. This can be done relatively easily. First I had to create a standard format for the addresses:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/--DrZgaiL6Co/VTWZRuxrDrI/AAAAAAAABnA/p54mhB9I9Pw/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B20.26.31.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/--DrZgaiL6Co/VTWZRuxrDrI/AAAAAAAABnA/p54mhB9I9Pw/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B20.26.31.png" height="135" width="320" /></a></div>
<br />
And then I copied the resulting table of addresses out of Tableau and into a batch geocoder. There area number available on-line, many of them free, but they were taking forever so I tried the one from <a href="http://geoservices.tamu.edu/Services/Geocode/">Texas A&M University</a>. There is a small cost but it is a lot faster and less worrisome than the free versions when doing a large number of addresses. I<span style="text-align: center;">ts also a lot quicker than doing it manually (which is what I used to do......).</span><br />
<br />
The resulting table looks like this, and I will blend this back into the workbook.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-MlLZmQXoA60/VTW5x6ND_hI/AAAAAAAABoc/_ctBAM8scdA/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B22.45.06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-MlLZmQXoA60/VTW5x6ND_hI/AAAAAAAABoc/_ctBAM8scdA/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B22.45.06.png" height="200" width="640" /></a></div>
<br />
<br />
Note it includes a field called 'MatchType'. Lets see how it did:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-v_dGzWWf9dQ/VTW6BBZxZ5I/AAAAAAAABok/DQEeOulSUOQ/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B22.46.12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-v_dGzWWf9dQ/VTW6BBZxZ5I/AAAAAAAABok/DQEeOulSUOQ/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B22.46.12.png" height="320" width="282" /></a></div>
<br />
<br />
Well not bad overall, but some 300+ building addresses appeared in Brooklyn and Staten Island, which is a bit disappointing when you consider that the zipcode was part of the data set.<br />
<br />
Anyhow, I'd say the matching is about 90% correct overall which is pretty decent. This becomes clearer when you colour the buildings by their neighborhood tag.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-P1_1IfPweJk/VTW71H_FGVI/AAAAAAAABow/QgCtBC6KBxw/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B22.53.32.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-P1_1IfPweJk/VTW71H_FGVI/AAAAAAAABow/QgCtBC6KBxw/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B22.53.32.png" height="380" width="400" /></a></div>
<br />
<br />
<br />
So what else can we see from the data? Well first up there were some 22,282 sales records in Manhattan in the last 12 months. The next thing I looked at was the sales prices to take a look at the most expensive sales:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-hEVf19HHERU/VTWckv5ddMI/AAAAAAAABnU/WEjkpBmLWw8/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B20.40.25.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-hEVf19HHERU/VTWckv5ddMI/AAAAAAAABnU/WEjkpBmLWw8/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B20.40.25.png" height="369" width="640" /></a></div>
<br />
Now I know that house prices have been going up, but even in Manhattan $3.3 billion seems a little steep. A bit of googling revealed that 240 1st Ave is in fact the address of Stuyvesant Town, and 3 Peter Cooper Road is Peter Cooper Village. The entire STPCV complex of over 11,000 apartments was bought last year by Fortress Investment Group for $4.7bn.<br />
<br />
So its clear I'm not looking at just individual homes here. I investigated further and found that the data set included many types of properties:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-Qdhd4vymQaY/VTWhKpOQnSI/AAAAAAAABng/ljEItiZrP5c/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B21.00.02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-Qdhd4vymQaY/VTWhKpOQnSI/AAAAAAAABng/ljEItiZrP5c/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B21.00.02.png" height="306" width="400" /></a></div>
<br />
So I decided to do two things - exclude any building class that didn't sound like it could be residential, all pure rental buildings and also excluded everything greater than $101m which is the <a href="http://www.nydailynews.com/life-style/real-estate/100m-condo-sale-breaks-city-record-article-1.2081765">current record</a> for the city or $zero. Another problem with this dataset is that its quite difficult to tell the difference between a whole building sale and an apartment or house sale. So to be safe I excluded all sales that were in condo's or co-ops but did not include any apartment names or numbers. Like so:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-vP7lSqeIH1k/VTWnk3dThBI/AAAAAAAABn4/ZAm0fMbPxpk/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B21.27.32.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-vP7lSqeIH1k/VTWnk3dThBI/AAAAAAAABn4/ZAm0fMbPxpk/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B21.27.32.png" height="181" width="320" /></a></div>
<br />
And this is how the most expensive sales look after, clearly 157 West 57th Street is doing quite well at attracting its share of billionaires (many of whom of course won't even move in):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-KreEJ3YRiLw/VTW8xVyRvDI/AAAAAAAABo4/CuUg99xlnJU/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B22.57.53.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-KreEJ3YRiLw/VTW8xVyRvDI/AAAAAAAABo4/CuUg99xlnJU/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B22.57.53.png" height="396" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
But while these sales get all the media attention, I wanted to take a look at how much of the market was controlled by these oligarchy sales, and how much by the rest of the market. Time for some bucketing. The peak for sales prices is between $400k and $600k.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-yd6uWTlq978/VTWpzIHYM1I/AAAAAAAABoE/ZLfW4DmnuYg/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B21.36.40.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-yd6uWTlq978/VTWpzIHYM1I/AAAAAAAABoE/ZLfW4DmnuYg/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B21.36.40.png" height="390" width="640" /></a></div>
<br />
Interestingly there is a dip around $1m. Looking into this in some more detail, we see a big spike at $990 and a big fall at $1m. The reason? A New York City 'mansion tax' of 1% kicks in at $1m:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-4xXKeEycTig/VTWqgxFCwKI/AAAAAAAABoM/uGM2xvdV6YI/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B21.39.00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-4xXKeEycTig/VTWqgxFCwKI/AAAAAAAABoM/uGM2xvdV6YI/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B21.39.00.png" height="320" width="310" /></a></div>
<br />
<br />
Looking back up to some bigger buckets, the distribution of number of sales and proportion of $ sold looks like this:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-CLNgQBEUK18/VTW9a9PjzBI/AAAAAAAABpA/-DMY3DA4nHw/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B23.00.42.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-CLNgQBEUK18/VTW9a9PjzBI/AAAAAAAABpA/-DMY3DA4nHw/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B23.00.42.png" height="286" width="400" /></a></div>
<br />
So whilst homes costing over $15m only represent less than 1% of all sales, they account for 14% of the total dollar value paid.<br />
<br />
How about the view by neighborhood? Here's a plot of number of units sold versus average sale value by Manhattan neighborhood:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-SDNrRPs_xjg/VTW-6WDcSYI/AAAAAAAABpM/OUH9GjO7P8I/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B23.06.58.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-SDNrRPs_xjg/VTW-6WDcSYI/AAAAAAAABpM/OUH9GjO7P8I/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B23.06.58.png" height="297" width="400" /></a></div>
<br />
<br />
Apartment sales in SoHo averaged over $5m each in the last year. The most sales were on the Upper East Side. The cheapest areas (not labelled above) were Harlem West, Inwood and Morningside Heights.<br />
<br />
And how about condos versus co-ops? When we were looking to buy an apartment we learned that co-ops are usually cheaper than an equivalent condo. This is because purchasers of co-ops have to get board approval and that in most cases rules out people who are buying investment properties or buy-to-rent, and so the potential market is smaller. Condo's on the other hand have very few restrictions and so are more popular with non-resident buyers who want to buy purely for investment purposes. Most of the new luxury buildings coming on the market are condo's.<br />
<br />
The chart below shows the split sales and average prices by building category. As you can see the majority of sales in Manhattan are split almost evenly between co-ops and condos in elevator buildings. And as suspected, the average condo sales price is significantly higher than the average co-op.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-64SsCvd3VeI/VTXWzdBNTGI/AAAAAAAABpc/AljbDigiMw4/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B23.15.10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-64SsCvd3VeI/VTXWzdBNTGI/AAAAAAAABpc/AljbDigiMw4/s1600/Screen%2BShot%2B2015-04-20%2Bat%2B23.15.10.png" height="220" width="640" /></a></div>
<br />
<br />
Of course these comparisons don't account for things like square feet or number of bedroom, but they still provide some interesting insights.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />PeterGhttp://www.blogger.com/profile/00017874900847973883noreply@blogger.com52