The TMSL to TMDL Switch (Part 2): I Did My Homework!

A while ago, I wrote “Why Microsoft, WHY!!!!?” about Fabric’s shift from TMSL (JSON) to TMDL (YAML-like). That sparked debate—some said both are API-supported, and reports stay JSON. So, I did my homework! This follow-up confirms what’s true, what’s not, and what I uncovered.

The TMSL to TMDL Switch (Part 2): I Did My Homework!

The Investigation Continues...

A little while ago, I wrote “Why Microsoft, WHY!!!!?”, where I expressed my frustration about Microsoft Fabric’s decision to move Semantic Model definitions from TMSL (JSON-based) to TMDL (YAML-like-based). That post sparked a lot of discussions—some people agreed, others pointed out that both TMSL and TMDL are supported via the API and that report definitions are JSON-based anyway.

"Fabric APIs support both formats (create/update/get), the Get API even allows you to retrieve the semantic model definition as TMSL by using the ‘format’ parameter. " https://www.linkedin.com/in/ruiromano/

So, I decided to do the homework 😅 , try it and share with you guys!

This article is my follow-up—confirming what’s true, what’s not exactly true, and what I uncovered about report formats and API behaviors along the way.


A Few Precisions to Begin With...

Before diving in, let’s clarify two key points so we’re all on the same page:

1️⃣ TMSL vs. TMDL Applies Only to Semantic Models (Not Reports!)

One of the biggest misunderstandings in my last article was that people assumed I was talking about Power BI Reports. I wasn’t.

  • The TMSL to TMDL switch applies only to Semantic Models.
  • Report definitions remain JSON-based using the Power BI report (PBIR) format
  • Currently in preview a Power BI enhanced report format (PBIR), so the current version will soon be known as PBIR-legacy
  • TMDL is not technically YAML, is uses grammar similar to YAML, that is, relies on indentation to define parent-child relationships.

So, if you were worried about reports moving to YAML-like syntax—don’t be. That’s not happening (to the best of my knowledge and hope it stays that way 😬🤞)


What I Found in My Investigation

Now that we’ve set the record straight, let’s talk about what I tested, what worked, and what didn’t.

Watch the demo

For a more detailed explanation and a demo of the functionality described in this article, you can watch the full process in action in my YouTube video...

🧑‍💻
GET THE CODE!!!! from this AzDO Git repository getting-fabric-item-defintions 😁🤞 and follow along.

1. The API Does Support Both TMSL & TMDL for Semantic Models

Yes—when I tested Microsoft Fabric’s API, I was able to successfully retrieve a Semantic Model definition in both TMSL and TMDL formats by specifying the format parameter.

🔹 TMSL (JSON-based) ✅ Works!
🔹 TMDL (YAML-like) ✅ Works!

So, if you’re working with Semantic Models, you have options.

🥇
Kudos to MSFT as they recently update the documentation, as shown below, at least for Semantic Models (unlike other items), you can find details on Items - Get Semantic Model Definition

2. Reports Are a Different Story (PBIR vs. PBIR-Legacy)

Since many people brought up report definitions, I decided to test how the Fabric API handles them.

Here’s what I found:

🔹 PBIR-Legacy is the current report format in Fabric.
🔹 PBIR (Power BI Enhanced Report Format) is in preview but not fully supported in the API yet.
🔹 If you try to fetch a report using format=PBIR, you get an error:

Error: Report is using format '[CurrentFormat]' and cannot be converted to '[APIFormat]' using the API.

In other words, reports in Fabric still use PBIR-Legacy by default, and PBIR support in the API is not yet functional.

This means Microsoft is preparing to transition to PBIR, but the shift hasn’t fully happened yet.


Call to action

I’ve done my homework, and now it’s your turn! 🎯

If you’re working with Microsoft Fabric, Semantic Models, or report definitions, this is your chance to test the API behavior for yourself and see how it fits into your automation workflows.

📌 I’ve published the PowerShell scripts that make it super easy to:
Extract item definitions (Semantic Models & Reports)
Fetch both TMSL & TMDL formats where applicable
Handle the API’s quirks and limitations

🧑‍💻
GET THE CODE!!!! from this AzDO Git repository getting-fabric-item-defintions 😁🤞 and follow along.

Read more