Press "Enter" to skip to content

Author: Kevin Feasel

Building Lists in Markdown

Mike Robbins has a list and checks it twice:

In Part 1: Getting Started with Markdown for Technical Writers, I introduced the basics of Markdown, including how to format both ordered and unordered lists. This article builds upon that foundation, providing everything you need to know about using lists in Markdown, from basic syntax to advanced formatting techniques.

As a technical writer, understanding how and why to use lists in Markdown isn’t just about syntax. It’s about clarity, structure, accessibility, and intent.

Read on to see how to create ordered and unordered lists, as well as several tips around when to use each and appropriate nesting of lists.

Leave a Comment

User-Defined Functions in DAX

Marco Russo and Alberto Ferrari look at a new feature in DAX:

Although DAX is a functional language, it did not previously offer the option to let users define their own functions. Starting from the September 2025 version, it is possible to define functions, which are parametrized expressions that can be reused throughout the entire semantic model. This article explains how the functions work. Watch the related video to see the user interface for defining functions.

Click through for more information, and also check out SQLBI’s DAX Lib website for a few examples of the types of user-defined functions you can create.

Leave a Comment

A Primer on Memory-Optimized Tables in SQL Server

Rich Benner builds a table:

A lot of people have heard of in-memory/memory-optimized tables in SQL Server. In our experience, however, not many people are using this feature (which first appeared in SQL Server 2014) in their production environments. This introduction will explain what in-memory tables are and how to use them effectively. This post should help guide your decision about using this feature in your production environment.

For the demos below I’m using the Stack Overflow database, you can go grab a copy here. It comes in various sizes, and a small one is perfectly acceptable for this test. We’re only going to deal with 100k rows of data. Once we have the database available and attached to a test instance of SQL Server, we have a few things to do.

I would heavily caution people before going down the road of memory-optimized tables in a user database. The primary benefit is typically not read speed, but rather write speed. There are also so many restrictions around what you are allowed to do, especially if you want to take advantage of memory-optimized stored procedures. IMOLTP puts heavy restrictions on anything involving cross-database querying (and tempdb is a different database, remember!), to the point that I’ve struggled to implement it in brownfield environments. Ultimately, it’s one of those really neat-sounding features that has too many restrictions to be really useful.

Leave a Comment

Microsoft Fabric September 2025 Updates

Adam Saxton has a list of updates for us:

Welcome to the Fabric September 2025 Feature Summary! This month’s update is packed with exciting enhancements, such as new certification opportunities, the Power BI DataViz World Championships at FabCon Vienna, and major advancements in the Fabric Platform. Highlights include the Parent-Child Hierarchy in the OneLake catalog, the general availability of the Govern Tab and Domains Public APIs and expanded Microsoft Purview protection and data loss prevention policies. Dive in to discover the latest improvements designed to empower your data experience.

Click through for a few dozen items.

Leave a Comment

Maintaining PostgreSQL without Superuser

Radim Marek doesn’t need special access:

How many people/services have superuser access to your PostgreSQL cluster(s)? Did you ever ask why your software engineers might need it? Or your BI team? Why those use cases require same privileges as someone who can drop your databases?

The answer isn’t because these operations are inherently dangerous – it’s because PostgreSQL historically offered limited options for operational access or simply because not enough people are aware of the options. So the common practice is to either got basic permissions or handover the keys to the kingdom.

Read on to see how pre-defined roles can help. These have recently come into the product, so read on to see how different versions of PostgreSQL have extended this functionality.

Leave a Comment

Adding Carousel Buttons in Power BI

Ben Richardson builds a carousel:

If you’ve ever tried to cram too many charts onto one report page, you know what happens.

The page gets cluttered, users don’t know where to look, and the story you’re trying to tell gets lost.

Carousel buttons fix that problem.

Instead of stacking visuals side by side:

You place them in the same spot and let people flip through them like slides.

It feels cleaner, takes up less space, and keeps the audience focused.

Click through to see how it works. Note that carousels can be quite useful, but they also go against one of the tenets of dashboard design: glanceability. If I need to click, drag, scroll, or otherwise manipulate the dashboard before I can see the information I need to act, it’s not glanceable—I cannot gather relevant information at a glance and act upon it.

In other words, if I’m giving somebody an interactive Power BI report with the intent that the person will dig into results, then a carousel can be quite reasonable. But if I’m creating a dashboard that should be up most of the time and available for people to see, carousels aren’t a great call.

Leave a Comment

TDE and Checksum Performance Penalties in PostgreSQL

Christoph Berg performs some tests:

It’s been a while since the last performance check of Transparent Data Encryption (TDE) in Cybertec’s PGEE distribution – that was in 2016. Of course, the question is still interesting, so I did some benchmarks.

Since the difference is really small between running without any extras, with data checksums turned on, and with both encryption and checksums turned on, we need to pick a configuration that will stress-test these features the most.

Read on to see the test setup and how things perform. I’m a bit surprised that there’s so little throughput difference here.

Leave a Comment

PostgreSQL and (Lack of) Clustered Indexes

Brent Ozar shares a surprise if you’re coming from the SQL Server world:

Postgres starts with a very different assumption: it uses multi-version concurrency control (MVCC, or what SQL Server folks call RCSI) by default, right from the get-go. When we update rows, Postgres automatically makes new versions of the rows, storing them inside the same table. There’s no need to enable it – it’s on for all databases, by default.

So because Postgres is constantly creating new versions of rows, it doesn’t really make sense to store the table itself in some kind of order.

Every table is a heap.

This fundamental storage difference has some ramifications for query tuning and indexing strategy that makes the two platforms quite different.

Leave a Comment

Finding Power BI Operations from the Capacity Metrics App

Chris Webb notes something that has come out recently:

It’s the week of Fabcon Europe and you’re about to be overwhelmed with new Fabric feature announcements. However there is a new blink-and-you’ll-miss-it feature that appeared in the latest version of the Fabric Capacity Metrics App (released on 11th September 2025, version 47) that won’t get any fanfare but which I think is incredibly useful – it allows you to link the Power BI operations (such as queries or refreshes) you see in the Capacity Metrics App back to Workspace Monitoring, Log Analytics or Profiler so you can get details such as the query text.

Click through to see how it works.

Leave a Comment