Building an Apache Arrow Parser for Power BI's ExecuteDaxQueries Endpoint

  1 min read  

One of the biggest advantages of Large Language Models is that, when used effectively, they can help carry an idea from planning to implementation, testing, and deployment.

Recently, Microsoft introduced the ExecuteDaxQueries endpoint for the Power BI REST API. This endpoint enables you to execute DAX queries programmatically against Power BI semantic models/datasets and retrieve results in a structured format, making it ideal for automation, testing, and integration scenarios. While many will ask, “Didn’t we already have ExecuteQueries?” the answer is yes, but the new endpoint adds some important capabilities, including support for INFO functions and preservation of native data types that were previously lost in the JSON output returned by ExecuteQueries.

For years, I’ve used ExecuteQueries in a custom Power BI REST API connector that I shared with the community. However, when it came to leveraging UDFs alongside INFO functions, we hit a wall. ExecuteDaxQueries opened the door, but there was a challenge: the response is returned in Apache Arrow IPC format, and Power Query has no native Arrow parser.

The idea of building an Arrow parser by hand was daunting. Instead, I took an AI-Driven Development (AIDD) approach using a template from Eric Elliott and guided the process with a test-first mindset. The goal was simple: build an Apache Arrow IPC parser for Power Query while continuously validating results against Python-based parsers and parity tests. After several rounds of planning, implementation, testing, and refinement, I believe we now have a working solution.

The result is a pre-release version of the connector that supports ExecuteDaxQueries, including Apache Arrow parsing, and it’s available now.

Resources

I’ll be sharing a video soon that walks through the connector and explains how it can help Power BI developers interact with APIs more effectively. For organizations in Commercial, GCC, and DoD tenants, this also creates new opportunities for testing, automation, and governance scenarios.

In the meantime, give it a try and let me know what you think.