Join me in New York City May 5 and 6 for SQL Saturday NYC

May the fourth be with you, but May the fifth and sixth I hope you’ll be with me – in New York City!

Registration is now open for SQL Saturday NYC 2023, and it’s likely to fill up pretty quickly given the great schedule and exciting lineup of speakers. The event is hosted at Microsoft’s Times Square offices, and attendance is capped at 400 people.

If you’re interested in a free day of data-centric learning with some career-focused sessions[1], please register today and block your calendar. You can register here for the free SQL Saturday event: https://www.eventbrite.com/e/sql-saturday-new-york-city-tickets-590028480067

If you’re interested in an extra learning day focused on organizational maturity and adoption of a data culture with Power BI, you should also consider joining me and Melissa Coates for our full day focused on “The Hitchhiker’s Guide to Adopting Power BI in Your Organization.” At the risk of hyperbole, this session presents the most important information that you need to succeed with Power BI, and to increase the return your organization gets on its investments in data, in business intelligence, and in you.

The most important information that you need to succeed with Power BI

The more I think about it, I honestly think the risk of hyperbole here is very low. The Power BI adoption roadmap is based on the experiences of hundreds of enterprise Power BI customer organizations. The agenda of this pre-conference session is what Melissa and Matthew believe is most important for most audiences based on our collective decades of working in this space. This is the best of the best, the most important parts of the most important subject[2].

Most sessions teach you how to drive, or teach you some interesting aspect of driving. This session gives you a map, teaches you how to read the map, teaches you how to find out where you are on the map, and then provides best practices for navigation. If you’re driving for the sheer fun of driving, maybe this session isn’t what you’re looking for. But if you actually need to get somewhere, this session is going to give you what the other sessions won’t, and it will make all of the driving sessions more valuable.

You can register for this full-day not-free pre-conference here: https://www.eventbrite.com/e/the-hitchhikers-guide-to-adopting-power-bi-in-your-organization-tickets-576361491737

I hope to see you in New York!


[1] Including one from me, as I reprise my “Unplanned Career” presentation for the first time in 2023!

[2] I wonder if it’s too late to increase the price. It probably is. (It is.)

Look for me on Mastodon

I’ve deleted my Twitter account.

I started using Twitter in 2011 as a work-adjacent social network, because that’s where the Microsoft data platform community hung out. When I left Facebook in July 2018 it became my primary social network. Back in November I created an account on Mastodon, and stopped using my Twitter account. Now that Twitter account is gone.

My reasons for leaving won’t be surprising to any long-time reader[1] but that isn’t why I’m writing this post. For anyone who wants to continue following my social media presence, you can find me at https://techhub.social/@SQLAllFather. After a few months my experience on Mastodon is very similar to my experience on Twitter, just with fewer abusive trolls, more alt text for images, and missing a few familiar faces here and there.

If you’re interested in checking out a social media platform that feels more like Twitter used to feel before its recent decline, the best place to start is probably https://joinmastodon.org. If you’re interested in telling me that I’m a “wokester” and am just “virtue signaling” the place to reach me is probably Twitter.


[1] This post from December should sum things up for you if you need a refresher.

The Power BI Scanner API keeps getting better

Power BI includes capabilities to enable users to understand the content they own, and how different items relate to each other. Sometimes you may need a custom “big picture” view that built-in features don’t deliver, and this is where the Scanner API comes in.

No, not this kind of scanner

The Power BI Scanner API is a subset of the broader Power BI Admin API. It’s designed to be a scalable, asynchronous tool for administrators to extract metadata for the contents of their Power BI tenant[1]. For an introduction to the Scanner API, check out this blog post from when it was introduced in December 2020.

The Power BI team has been updating the Scanner API since it was released. This week they announced some significant new capabilities added to the API, so administrators can get richer and more complete metadata, including:

  • Scheduled refresh settings for datasets, dataflows, and datamarts – this will make it easier for administrators to review their refresh schedules and identify problems and hotspots that may have undesired effects.
  • Additional RDL data source properties – this will make it easier for administrators to understand paginated reports and the data sources they use.
  • Additional “sub-artifact” metadata for datasets – this will make it easier for administrators to understand table- and query-level configuration including row-level security and parameters.

There’s more to it than these highlights – check out the announcement blog post here: https://powerbi.microsoft.com/en-us/blog/new-scanner-api-scenarios/.

The Scanner API is a vital tool for any organization that wants to deeply understand how Power BI is being used, with a goal of enabling and guiding adoption and building a data culture. These updates represent an incremental but meaningful evolution of the tool. If you’re already using the Scanner API, you may want to look at how to include this new metadata in your scenario. If you’re not yet using the Scanner API, maybe now is the time to begin…


[1] One of the key scenarios enabled by the Scanner API is integration with Microsoft Purview and third party data catalog tools like Collibra. When these tools “scan” Power BI to populate their catalogs, they’re calling this API.

Looking back: Five years on the Power BI CAT team

Five year ago this week I joined the Power BI Customer Advisory Team, commonly known as the CAT team.[1]

I didn’t know it at the time, but in early 2018 I made the most positive change in my two-plus decades working in tech. The work since then has often been challenging and difficult, but I have never felt more satisfied or more appreciated[2] than I have on this team. As I’ve shared before, I’ve worked in tech for over 25 years, but my time on this team has been the best of the lot, by a wide margin.

Why has my time on the Power BI CAT team been so amazing? Looking back over the past five years I see five key factors to my success.

A team that needed the unique strengths I bring
In 2018 the Power BI CAT team already had some of the world’s leading experts on Power BI and the Microsoft business intelligence platform. Although I’d been a data professional in my pre-Microsoft career, I was feeling a little stale on the hands-on side of things, and was definitely feeling my share of impostor syndrome as I started my new role.

What I found was that my product management, data warehousing, ETL, and data governance experience filled gaps in the team’s existing strengths. From the beginning I was welcomed and empowered to make suggestions and implement solutions to problems that the team had not previously been able to solve. Given the prevalence of “not invented here syndrome” in some parts of Microsoft, this welcome wasn’t something I could take for granted.

A team with strengths that complement my weaknesses
When I joined the Power BI CAT team I was anything but a Power BI expert.[3] I honestly don’t know why they hired me, because even in retrospect I don’t believe I was a great fit for the team’s priorities when I joined. Although I did bring my own unique strengths, the fact that I didn’t know the difference between Live Connection and Direct Query[4] had the potential to introduce challenges.

The entire team had my back. When I reached out to request assistance or to ask “dumb” questions, everyone stepped up to help out. They valued me and my unique background and perspective. They knew that it was a smart investment to help me get over these “new to space” speed bumps, and to get up to speed on the ins and outs of Power BI. They were right, of course, but given the competitive nature of some past teams, this support also wasn’t something I could take for granted.

A manager who consistently provides opportunity, trust, and support
It’s taken a real effort to keep this post from becoming fawning Marc Reguera fan appreciation, but I cannot overstate the impact made by having a great manager.  I’ve worked for some wonderful and helpful managers over the years, but I have never before worked for anyone with Marc’s gift. He deeply understands people’s strengths – what people are good at and what gives them joy and energy. He then finds high-value problems for them to solve using their strengths, and which align with the evolving goals of the team.

Time and again Marc enabled me to try new things, and provided a safe space for me to work outside my comfort zone. Marc tirelessly promoted my work and the results I delivered, and he consistently pushed me to do more and to think bigger. Marc saw strengths in me that I didn’t recognize in myself, and he gave me the opportunities to exercise those strengths. I put in the hard work, but Marc provided the environment for my work to deliver the most impressive results.

A leader and sponsor who earns and maintains my trust
How has Power BI gone from a new offering in 2015 to being the clear leader in business intelligence for many years running? This is a bigger question than I can answer in a blog post, but a lot of the answer is understanding what customers need, and relentlessly delivering improvements based on this understanding.

When I joined the Power BI team in 2018 we already had well-established channels for listening to users, and a team culture that prioritized acting on user input. What we didn’t yet have was a similarly strong channel to understand what large enterprise customer organizations needed to drive broad adoption and manage a complex user base. Much of what I’ve done since then has been building this channel and expanding on its scope and impact… but what does this have to do with leadership I can trust?

When you’re building a new customer feedback channel, sometimes you’ll learn things that don’t align with the status quo. Sometimes the feedback you’re sharing contradicts current understanding and plans. In my experience this is one of the most telling tests of an organization’s culture. I’ve worked on teams where sharing truths that don’t fit leadership’s narrative was a career-limiting move, but this is not the case on the Power BI team.

Instead, I’ve found the strongest executive sponsorship I can imagine, with leaders who are eager to learn about customers’ lived realities, and who are willing to change plans and priorities based on what they learn. At every step of the way, Arun Ulag and his leadership team have championed my work, and empowered me to make a bigger difference than I could ever had made otherwise. Having an executive sponsor isn’t only important for building a data culture.

A global pandemic that normalized remote work
This factor doesn’t really fit in with the other four, but if I’m being honest with myself I need to include it. Over the past few years I’ve written and spoken publicly about some of my personal mental health challenges, and how I’ve worked to find and apply the unique strengths produced by these challenges.

One challenge I never truly appreciated until remote/virtual work became the norm was how much energy I spent every day on face-to-face social activities. Walking to a conference room, making social chit-chat as people filter into the room, maintaining appropriate eye contact and body language throughout the meeting, walking to the next conference room, and repeating this pattern all day long. I’m exhausted just typing it.[5]

In all seriousness, I probably expended 30-40% of my total daily budget of emotional and intellectual energy[6] on these non-value-add activities. When I was working in person I could get the job done, but when everyone was working remotely I could thrive. It was like someone had removed a great weight I had been carrying so long I didn’t know it was there, and once that weight was gone I had so much more of everything to give.

Patrick seems excited that I made it through my list of Power BI CAT success factors

This post has ended up very different than the post I intended to write when I sat down at the keyboard, but it’s apparently the post that needed to come out. Sometimes you need to share your gratitude for the people and circumstances that have made your life better in important ways, and an anniversary like this is one of those times.

Five years ago I felt like my career had stalled, and it wasn’t clear to me what I should do next. Since I can’t begin to claim that the past five years of growth and success were planned, the next best thing is sharing a personal retrospective. I hope you’ll be able to look at these factors for my successes and find their parallels in your own life. If you find yourself on a team like this, you may want to stay there. If you find yourself on a team that’s the opposite of the Power BI CAT team, you may want to start looking for your next opportunity.

Here’s to another glorious five years.


[1] Let’s get it out of the way early: Yes, the T in CAT stands for Team. No, I don’t care. Work with me here.

[2] Yes, this appreciation includes bigger numbers with dollar signs next to them, but that is definitely not the most important part of the story.

[3] Let’s be honest – compared to most of my CAT counterparts, I’m still not.

[4] Seriously.

[5] I suspect that readers who have autism spectrum behaviors will be nodding along at this point. I know that it’s not just me.

[6] Or spoons, as my teenager assures me the kids no longer say.

Upcoming Power BI Adoption Pre-Conference Sessions

If you’re going to be near Copenhagen in September[1], Dublin in June, or New York City in May – I have exciting news for you!

On Friday May 5th, I will be joining the incredible Melissa Coates to co-present our “The Hitchhiker’s Guide to Adopting Power BI in Your Organization” full-day pre-conference session as part of SQL Saturday NYC.

On Thursday June 8, Melissa and I will be on the other side of the Atlantic presenting “The Hitchhiker’s Guide to Adopting Power BI in Your Organization” as a full-day pre-conference before the Data Ceili conference in Dublin, Ireland. I’m very excited to be returning to Dublin this year – I was scheduled to speak at Data Ceili 2020, but for some reason that trip didn’t happen as planned.

Finally, on Thursday September 21 I’ll be in Copenhagen, Denmark to deliver a full-day pre-conference session: The Hitchhiker’s Guide to the Power BI Adoption Roadmap as part of the amazing Power BI Next Step conference.

It’s unlikely that Melissa will be able to join me for Power BI Next Step. I’ll still be using the content framework she’s built, but the bottom line is that we’re less likely to stay on schedule during the day, and more likely to have slightly off-color stories to punctuate key learning topics. Depending on your learning style and priorities this could be a blessing or a curse.

If you missed our initial delivery of this session at the PASS Data Community Summit last November, please consider joining us at one of these sessions. Event details and registration links are below!

New York, NY, USA: Friday, May 5, 2023

Decorative SQL Saturday icon

Matthew and Melissa will be co-presenting at the SQL Saturday event in New York City on May 5th. This event will be held at the Microsoft office in Times Square. It’s an in-person session.

Pre-con registration: Hitchhikers Guide to Adopting Power BI – NYC May 5

Dublin, Ireland: Thursday, June 8, 2023

Matthew and Melissa will be co-presenting in Dublin, Ireland at the Data Ceili event on Ju

ne 8th. It’s held at the gorgeous Trinity College. It’s an in-person session.

Pre-con registration: Hitchhikers Guide to Adopting Power BI – Dublin June 8

Copenhagen, Denmark: Thursday, Sept 21, 2023

Decorative event icon for Power BI Next Step event

Matthew will be presenting solo at the Power BI Next Step event in Copenhagen, Denmark on Sept 21st. It’s an in-person session.

Pre-con info: Hitchhikers Guide to the Power BI Adoption Roadmap – Copenhagen Sept 21


[1] If you’ve never visited the Nordic countries in the fall, you don’t know what you’re missing. I’ll always be partial to the islands of Stockholm, but Copenhagen is a close second on my list of places I want to be in September and October.

[2] Believe me, I know how you feel. An entire day with Matthew is a lot.

[3] Shamelessly copied from Melissa’s blog post, of course.

Power BI and PowerPoint integration – “Storytelling” is now generally available

Whether you love PowerPoint or whether you hate it,[1] PowerPoint is one of the most commonly used communication tools in organizations around the world. If you want to reach an audience with information, odds are you’re going to use PowerPoint.

One of the key goals in building and sustaining a healthy data culture is to have more people working with more of the right data in more of the right ways as part of their day to day work, replacing tribal knowledge with data-driven insights and actions. To achieve this goal, you need to bring the right data to the places where people are already working – to meet them where they are today.

As often as not, people are working in PowerPoint today. This is a signal that emerged strongly from the customer conversations I’ve had since joining the Power BI CAT team – enterprise customers[2] want the ability to seamlessly include Power BI reports and visuals in their PowerPoint presentations, to increase the reach and value of their investments in data and BI.

The Power BI team announced today that the “storytelling” integration between Power BI and PowerPoint is now generally available (GA) for Power BI customers everywhere, including customers using national clouds. The GA feature includes functional improvements based on feedback during preview, including the ability to embed individual visuals and to add “smart insights” generated from Power BI and added directly to the PowerPoint slide.

If your organization uses Power BI and PowerPoint, you should take a few minutes today to check out this important new release, and look for ways to incorporate it into your work.


[1] Or like me, both love and hate it!

[2] These are the customers I work with the most. I suspect there’s a similar signal waiting to be discovered from smaller organizations as well.

Analyzing Plex Media Server Data using Power BI

Around a year ago I left Spotify and started using my locally hosted Plex Media Server to feed my daily music consumption. Since I spent much of the last 30+ years building an extensive CD and MP3 collection, the transition was surprisingly smooth, and the excellent Plexamp client app feels like an upgrade over Spotify in many ways.

Now it’s time to start digging into the data that my year of music listening has produced.

I blogged last year about how I report on my Spotify listening history. It’s a bit of a hack because Spotify doesn’t have a database or API you can use, so you need to make a GDPR request and wait a few weeks to get a JSON archive… but I made it work. Plex uses a SQLite database to keep track of its data and metadata, and it’s relatively easy to start using it as a data source for your own Power BI reports. Since this is a largely undocumented transactional database[1] I’m still figuring out some important details and locating important data points, but I wanted to share what I’ve learned.

Here’s how to get started.

Installing Plex, setting up libraries, listening

For this post to be useful to you, you need to run a Plex media server and use it to listen to your music collection[2]. Head over to plex.tv, download the software, install it, set up your libraries, and start listening to the music you love.

This is all well-documented by the fine folks at Plex, so I won’t share any additional details here.

Download a database backup

As mentioned above, Plex uses SQLite as its database, and the Plex web UI provides an option for downloading a copy of the database file. Although it may be possible to report directly on the “live” database, I’m erring on the side of caution and using Power BI to connect to backup files.

Here’s how to download the database:

  1. Open the Plex web UI at https://app.plex.tv/ and sign in to your server
  2. In the upper right, click on the “wrench” icon to open the settings
  3. In the lower right, select “Troubleshooting” in the “Manage” category of the settings options
  4. On the troubleshooting settings page, click the “Download Database” button

After a few seconds your browser will download a zip file containing a SQLite database file with a long system-generated file name.

Copy this file to folder and give it a more useful name for my project the database file is \Plex DB\plex.db.

SQLite driver and ODBC DSN

Power BI doesn’t have a native SQLite connector, but SQLite does have ODBC drivers. It looks like there are multiple options – I used this one mainly because it was the first one I found.

Once you’ve downloaded and installed the ODBC driver, create a DSN that points to the database file you downloaded earlier. The connection string is just the file path.

With the DSN created, you can start working in Power BI Desktop. Create a new PBIX, select ODBC from the Get Data dialog, and select the DSN.

Click OK and you’re ready to go.

Key Plex database objects

As mentioned earlier, the Plex database is largely undocumented. It has a somewhat normalized schema, which is slowing my exploration and discovery. When a table is mostly integer IDs and obscurely-named values, exploration can feel more like archaeology.

With that said, there are two tables that are probably going to be most useful: metadata_items and metadata_item_views.

The metadata_items table contains one row for each item (track, album, artist, episode, season, show, etc.) in your Plex media library. This table implements an implied three-tier hierarchy by including an id column and a parent_id column that define a relationship[3] between metadata items and the items that contain them.

The metadata_items table also includes vital data such as the title (track name, album name, artist name, etc.) of each item as well as index (track number on the album, episode number in the season, etc.) and such. Not all fields are used for all metadata item types, so you’ll see a lot more nulls than you might like.

The metadata_item_views table contains one row for each time a user has watched a video, listened to a track, and so on. This table includes the titles for the viewed item, as well as the parent and grandparent items, so you can easily get the track, album, and artist without needing to join other tables. You can join with  the metadata_items table if you need additional details like the album release year or the record label.

The metadata_item_views table includes a viewed_at column to track when a given item was viewed. This column is stored as a Unix timestamp, so you’ll need to convert it to datetime before you can start working with it. Plex tracks times using UTC, so if you want to work with data in a different time zone you’ll need to handle that in your PBIX.

Refreshing the data

Since your PBIX is connected to a database backup, it won’t automatically show your current library contents and listening history. If you want more current data, just download a new database backup and replace your plex.db (or whatever you named it) file with the new one. The next time you refresh your report, you’ll have new data.

I don’t have a use case for “real time” Plex reporting, so this approach works for me. It’s certainly easier and more timely than the hoops I had to jump through to “refresh” my Spotify data.

Next steps

I’m still just starting to get my hands dirty with this fun data source, so my next steps are mainly to keep exploring. Using my Spotify listening report as a target, I’m planning to duplicate that report and its insights with Plex data. Ideally I’ll have one report where I can see my legacy listening history in Spotify and my ongoing listening history in Plex… but that might be a few months away.

If you’re using Plex and have been thinking about exploring your data – or if you’re already doing this – I’d love to hear from you in the comments about your experiences.


 

[1] To the best of my knowledge after a year or more of occasionally googling to answer my questions, there is no official documentation for the database. The Plex community support forums have a few bits and pieces here and there, but most of what I’ve included in this post is the result of my own exploration. Honestly, it’s a real joy to have a side project with this type of work involved.

[2] Plex also has great features for managing and streaming TV shows, movies, and photos – it’s not just about music. This blog post is going to focus on the music side of things because that’s what’s most interesting to me today, but there’s a lot more to love in Plex.

[3] It’s worth noting that there are no “real” FK > PK relationships in the database, or if they are they’re not exposed through the client tools I’ve used. To figure out where the data relationships exist you need to explore the data.

Roche’s Maxim of Community

Roche’s Maxim of Community states:

A community is defined by the behaviors it tolerates.

I played the “maxim” card already a few months ago, I think it’s time to play it one more time, because this is another succinct formulation of a fundamental principle, general truth, or rule of conduct that I need to share[1].

An AI-generated image of a diverse group of people attending a conference

As you read this you might be thinking about the recent change in leadership at Twitter, and how the new leadership is inviting in and promoting prominent neo-Nazis, insurrectionist leaders, and other extremist, anti-democracy, and authoritarian figures, and how more and more members of the technical community are turning their backs on this now-sullied social network. I’m thinking about this too, but I’m also thinking more broadly because any maxim needs to be broadly and generally applicable.

So let’s start with a few examples. If you’ve made it this far I hope you stick with me for the rest.[3]

I’m part of of the global Historical European Martial Arts (HEMA) community. I love training and fighting with swords, and I love the camaraderie that can be found through martial arts and combat sports. When your community activities bring with them a direct risk of serious injury, it’s important to be able to trust your training partner, your sparring partner, and your tournament opponent to keep your safety in mind.

Back in 2017 I competed in a tournament organized and by a HEMA club with an established “Cobra Kai” reputation. I attended with a clubmate who is a fantastic swordsman and all-around martial artist. I was competing in open tournaments. He was competing in the advanced invitational tournament that included the head coach of the organizing club. The invitational tournament was also refereed and directed by members of that club. Yeah.

During the match between my clubmate and the coach of the club running the tournament, that coach exhibited the unsafe and unsportsmanlike behavior that earned him and his club their reputation.

I was in my clubmate’s corner both coaching and taking video. At the end of the day I shared the video[4], and it started making the rounds on HEMA groups on Facebook. Even though “sharing tournament footage so fighters and clubmates watch and learn” is pretty standard behavior, this one caused some waves and started some difficult conversations. I don’t believe that the video showed anything surprising – this was the behavior everyone knew about already, and which they talked about behind closed doors. The video simply shone light on it, and made it harder to ignore, or to pretend you didn’t know.

I started avoiding events where this club was involved. I didn’t make a big deal about it, but when people asked me why I wasn’t going back to a tournament where I’d competed the previous year, I was honest in sharing my reasons. Fast forward to the HEMA event circuit starting back up in 2021, this club is no longer involved in multiple tournaments that they previously ran. Several of their most senior and prominent members have left the club, and started their own.

I’m a pretty small part of the HEMA community, so I doubt my personal actions had that big of an impact – but I know they were part of this positive change. I saw behavior I would not tolerate and I voted with my feet. Others did the same, and the community evolved and grew.

Progressive and inclusive HEMA clubs like Valkyrie Western Martial Arts in Vancouver, BC and London Longsword Academy in London, UK demonstrate this maxim in a positive and proactive way. I’ve already written previously about the aggressive inclusivity that pervades Valkyrie’s culture, so here I’ll focus on a few aspects of London Longsword Academy[5] and their Fighters Against Racism (FAR) initiative.

As the FAR page says, Fighters Against Racism is a reaction to the “unpleasant element” in the HEMA community. If a club displays a FAR poster or banner, people who are offended by anti-racist statements will feel unwelcome – which they are. If a fighter wears a FAR t-shirt or patch to a tournament, they’re sending a clear message to everyone there what they believe, and that they are confident that this belief will be accepted and welcome at the event. My FAR t-shirt[6] is pretty successful at attracting YouTube comments, but so far I’ve never been confronted in person.

A community is defined by the behaviors it tolerates.

If you’re reading this blog (and I have every reason to believe that you are) you’re probably more interested in data and technology than in swords. My next example is more recent, where in August of last year[7] there was an online discussion about the need for codes of conduct at conferences and community events. My tweets have since been deleted, so I’ll reproduce the thread here, starting with the same warning: foul language later on.

The phrase “doesn’t need saying” is a red flag for me when it comes to conversations about communities, events, and codes of conduct.

If it “doesn’t need saying” that certain behaviors are not acceptable, there is no need to not say it, because no one will be offended or feel targeted, right?

For example (here comes that foul language) it probably doesn’t feel necessary to have a “no shitting on the carpet” rule, because who would ever do such a thing? This just “doesn’t need saying,” does it?

But if there was ever one time when someone did shit on the carpet and no one did anything about it, you might start to reconsider. Maybe we do need to be explicit in saying “no shitting on the carpet” for the next event.

What if it wasn’t just one time? What if after your event people were talking about how someone shit on the carpet… they just weren’t talking about it in front of you because your inaction signaled that you were ok with that sort of thing? Might a code of conduct be in order?

Or would it be better to say “I didn’t see the shit on my carpet” or “I couldn’t smell it from where I was” or maybe even “it was just that one time, and the person who did shit on the carpet is an important member of the community”?

What if the idea of a code of conduct feels like a slippery slope? If we tell people they can’t shit on the carpet, what is next? Telling them they can’t shit on the hardwood floors? On the tiles? Telling them they can’t piss on the carpet? Where does it all end???

A community is defined by the behaviors it tolerates. If a community organizer says “this problem isn’t important” that sends a very strong signal – and not a virtuous one. It says “this behavior is ok and I will permit it to continue.”

A community is defined by the behaviors it tolerates. If a community organizer says “this problem doesn’t affect me, so it isn’t a real problem” that sends a strong signal too.

A community is defined by the behaviors it tolerates. If a community organizer says no, this is not ok, this is our code of conduct, and these are things that we simply will not accept, that sends a signal. A virtuous one.

This “virtue signaling” will be heard by the people who have a history of (literally or figuratively) shitting the the carpet, and they’re not going to like it. They might stop participating, and they might make trouble and noise on the way out.

Because the reality is that far too many events in far too many communities have allowed shit on the carpet for far too many years. We’ve just pretended that it’s not a problem, because the people doing the shitting are well-known for other things, and because the people who stepped in the shit generally left in disgust without saying anything. Does it really need saying that you’re not allowed to shit on the carpet? Yes. It does. Your code of conduct is an explicit statement about the behaviors you will tolerate.

You don’t need to be perfect, but being willing to change is a prerequisite to positive change. Admitting that there is a problem is the first step to solving the problem. FFS. /thread

When I wrote that thread in 2021 I was thinking about that HEMA tournament from 2017, where the community event organizers were complicit. Thankfully, the thread was in response to an announcement by the organizers of Data Grillen, DataMinutes, and New Stars of Data posting about their code of conduct. These folks (in this case it was the always incredible William Durkin) know what type of community they want to build, and they were unwilling to back down when a few dudes[8] took umbrage with the news.

Earlier this year, renowned C++ developer, consultant, and speaker Patricia Aas stood up and spoke out when her community continued to welcome an organizer and speaker who was convicted of serious sexual crimes. She made it clear that her community’s milquetoast response was intolerable to her, and she made her voice heard, even though it was likely that this would impact her ability to participate in a community she had helped grow.

Warning: There’s some additional profanity ahead.

I mention this example not because I was personally involved, but because it feels like a concrete canonical example of so many similar stories. There’s some guy. He’s been around forever, and has made serious positive contributions to the community. He’s use these contributions to build a clique, a power base, a center of social gravity and influence that’s about him, not about the community.

When it comes to light that he’s using his power and influence for ends that run contrary to the community’s stated goals and culture his clique stands up for him, often supported by the actions or inactions of those not directly harmed by the guy’s actions.

“Think about all that he’s done for the community,” comes the familiar refrain. “Think about how much good he’s done, and how much we’d lose if not for his contributions.”

Fuck that. Fuck that, fuck him, and fuck his supporters.[9]

Instead, think about how much the community has already lost and will continue to lose because of him. Everyone he has harmed, everyone he has driven away from the community, everyone who has considered joining the community but was repulsed by his behavior and the community’s acceptance of his actions. Think about what each of these people could have contributed.

A community is defined by the behaviors it tolerates. This is why codes of conduct are important.

A community is defined by the behaviors it tolerates. This is why it is important to speak up when you see someone behaving in ways that violate the community’s written or unwritten rules.

A community is defined by the behaviors it tolerates. This is why it’s important to hold the powerful to account, and to hold them to a standard that is at least as high as the one by which the powerless are judged.

A community is defined by the behaviors it tolerates. Your participation in a community is a statement of your acceptance of the behaviors taking place in that community. It doesn’t matter if you weren’t the abuser, if you weren’t directly causing harm, if you weren’t actively shitting on the carpet yourself.

A community is defined by the behaviors it tolerates. Your participation in a community is a statement of your acceptance of the behaviors taking place in that community. If you’re at a party and someone walks in wearing blackface, wearing a white hood, wearing a swastika armband, you get to choose if you leave or if you stay. But if someone wearing a swastika armband joins the party[10] and you do decide to stay because they’re not personally bothering you – congratulations, you chose to attend a Nazi party.

A community is defined by the behaviors it tolerates. What behaviors do you choose to tolerate in your community? Does your community reflect your values or is it time to leave and join/start something better before you get shit on your shoes?

Wow. This ended up much longer than expected. Thank you for staying with me until the end. As is the case with Roche’s Maxim of Data Transformation there’s not really anything new or unique here. I’m saying something you probably already knew, and which was completely obvious once written down – and I took 100 pages to say it. Despite this, I believe it’s important to put in writing, and important to think and talk about, especially these days.

A community is defined by the behaviors it tolerates. Why not find me on Mastodon?


[1] I also haven’t published a blog post since July. The more technical topics I’ve been fermenting aren’t quite ready to be served, and I don’t want the whole month to pass[2] without finishing something.

[2] LOL @ Past Matthew who wrote footnote 1 in August 2021 (and who wrote footnote 2 in December 2021).

[3] Each example is based largely on my personal real-world experience, but deliberately avoids any names or details that would be obvious to people who weren’t already involved. I believe there is a time and a place to “name and shame” but I don’t believe this post is the right place, and I don’t want to encourage any sort of pile-on.

[4] I’m not going to link to the video here, but if you’re motivated you can find it on my personal YouTube channel. It’s the one with the very high view count and with comments disabled.

[5] London Longsword Academy is run by my dear friend David Rawlings, who often reminds us that he is “not straight, but still a great ruler.”

[6] Yes, you can buy one too.

[7] Yes, way back when I started writing this post.

[8]  It’s always dudes, isn’t it? Do better, my dudes

[9] That was the profanity I warned you about. I’m done now. Ok, almost done.

[10] Particularly if they’re personally invited and welcomed by the host of that party.

The Unplanned Career

If you’ve worked in tech for 25 years, you’ve seen some stuff, and you’ve learned a lesson or two. On October 1st, I presented a new session at Data Saturday Atlanta, sharing the story of my unplanned career, and some of the lessons I’ve learned along the way. This was the first time I presented this very personal session; and I’m incredibly grateful for the full crowd that attended, and for their feedback after the session.

My primary goal for the session is to show that you don’t need a computer science degree to build a successful career in tech – and that our industry needs more people from more non-traditional backgrounds.

My secondary goal for the session is to share some of the sharp edges that are typically hidden when people talk about their careers. Everyone wants to share their highlights, but sharing your own pain and failures is harder. This is important, because too often we’re each comparing our own blooper reel against everyone else’s highlights… and nothing good comes from that.

The Data Saturday event was in-person only[1], but I’d had a bunch of people mention they wanted to attend, but couldn’t make it to Atlanta. So…I packed a camera and microphone and recorded the video on my own.

If you weren’t able to attend, please check out the recording, and please let me know what you think!


[1] Please understand that there is no criticism implied here. Organizing a hybrid event is significantly more difficult than organizing an in-person or online-only event, and focusing on in-person community produced wonderful results.

Power BI guidance from the CAT

If you’re reading this blog, odds are you’re already familiar with the Power BI documentation. If there’s a feature in Power BI, there are a set of articles that describe its capabilities.

But what if you need more? What if you need guidance on which features to use, and on how to use them properly to achieve your goals? This is where the Power BI guidance documentation comes in.

a watercolor painting of a cat reading power bi guidance documentation, generated by dall-e2
A watercolor painting of a cat reading Power BI guidance documentation

I’ve written previously about some of what the Power BI CAT team[1] does, but the Power BI guidance documentation only gets a passing mention… and it’s worth going into more deeply.

A lot of what the Power BI CAT team does involves working with large enterprise customers. These customers are often trying to achieve difficult goals that often involve complex data architectures, and Power BI is often a significant part of their end-to-end information supply chain. We get involved[2] when these enterprise customers need help achieving their strategic goals, and this help often includes helping them effectively use the existing capabilities of Power BI.

In these customer engagements we help one customer at a time. This is valuable and important… but it doesn’t scale. Documentation scales. So when we identify the need for guidance, we use the Power BI guidance documentation as a channel to share common patterns, best practices, and key concepts that will help everyone be more successful with Power BI.

A lot of the guidance documentation can be summarized as “if everyone knew this thing, the Power BI CAT team wouldn’t need to keep helping customers solve this particular problem.” Included in this bucket are things like the importance of star schemas, using variables in DAX, or the value of separating reports from data models in the Power BI service.

There are also a few sections in the Power BI guidance documentation that are more ambitious in scope. These sections are designed to address common strategic patterns, not just tactical or technical challenges.

  • Migrating to Power BI – It’s very common for large organizations to retire legacy BI tools and to standardize on Power BI.[3] This guidance presents best practices for approaching this strategic change to minimize risk and maximize success.
  • Power BI adoption roadmap – Power BI includes an incredible set of powerful[4] capabilities for delivering information and insights… but technology only goes so far without the right people and processes in place. The Power BI adoption roadmap is a set of guidance that focuses on big picture side of succeeding with Power BI, including governance, establishing a center of excellence, and empowering a community of practice.
  • Power BI implementation planning[5] – If the core Power BI product documentation focuses on specific features and capabilities, and the Power BI adoption roadmap focuses on big-picture strategic topics, the Power BI implementation planning guidance falls somewhere in-between. This guidance presents a set of common usage scenarios, and how to implement these scenarios by using the right Power BI capabilities in the right way, supplemented by subject areas that look more closely at important topics like tenant setup and workspaces.

Fun fact: All three of these sections are written by MVP Melissa Coates of Coates Data Strategies. The Power BI CAT team is involved end to end, but we’re delighted to work with Melissa for this guidance.

If you’re reading this blog[6], you probably want to get the most from your personal and organizational investments in Power BI. If you do, you owe it to yourself to head on over to the Power BI guidance documentation right now.


[1] Yes, I know that the T in CAT stands for Team, so saying CAT team is redundant. No, I don’t care.

[2] If you’re reading this and asking yourself “how do I get the Power BI CAT team to help my organization?” the short answer is that you should work with your Microsoft account team. They’re the first line of defense, and are more than equipped to help with most Power BI challenges. If they need help, they have channels of escalation that include the CAT team.

[3] This may come as a surprise, but we want to make this as simple as possible.

[4] For once, pun not intended.

[5] As of July 2022, the Power BI implementation planning guidance is still a work in progress. There’s a lot of great content already published, but we’re less than halfway done. There are more usage scenarios and subject areas coming in the months ahead, so be sure to check back regularly.

[6] And I have every reason to believe that you are.