Skip to content

Browse our blogs activity over the years…

  • Jan
  • Feb
  • Mar
  • Apr
  • May
  • Jun
  • Jul
  • Aug
  • Sep
  • Oct
  • Nov
  • Dec
  • Sun
  • Mon
  • Tue
  • Wed
  • Thu
  • Fri
  • Sat
2026
Optimising DAX: Why Cardinality Matters

Optimising DAX: Why Cardinality Matters

Carmel Eve

Column cardinality is one of the biggest factors in Power BI model size and query speed. This post explains why, and covers practical techniques for reducing it.
Introducing Corvus.Text.Json V5: Migration, Analyzers, and What's Next

Introducing Corvus.Text.Json V5: Migration, Analyzers, and What's Next

Matthew Adams

Migrating from V4 to V5 is straightforward with Roslyn analyzers and code fixes. V4 isn't going away - both engines are maintained. Plus: 10 production analyzers to help you write correct, high-performance code.
Introducing Corvus.Text.Json V5: TOON - Compact JSON for LLMs

Introducing Corvus.Text.Json V5: TOON - Compact JSON for LLMs

Matthew Adams

Corvus.Text.Json.Toon provides bidirectional TOON conversion - a compact text format that removes repeated property names and punctuation from JSON, reducing token count for LLM prompts with zero-allocation UTF-8 APIs.
Introducing Corvus.Text.Json V5: Extended Types

Introducing Corvus.Text.Json V5: Extended Types

Matthew Adams

V5 extends the JSON type system with UTF-8 URI and IRI parsing, arbitrary-precision numerics via BigNumber, and first-class NodaTime date/time integration. All operating directly on the raw UTF-8 bytes.
Introducing Corvus.Text.Json V5: JSON Pointer - Zero-Allocation Path Resolution

Introducing Corvus.Text.Json V5: JSON Pointer - Zero-Allocation Path Resolution

Matthew Adams

Corvus.Text.Json V5 includes Utf8JsonPointer, a readonly ref struct that resolves RFC 6901 JSON Pointer paths directly against the pooled-memory document model with no allocation.
Introducing Corvus.Text.Json V5: JSON Patch

Introducing Corvus.Text.Json V5: JSON Patch

Matthew Adams

Corvus.Text.Json.Patch implements RFC 6902 JSON Patch with a fluent PatchBuilder and all six operations. Patches operate directly on the mutable document model with no intermediate copies.
Introducing Corvus.Text.Json V5: YAML 1.2 - Zero-Allocation Conversion

Introducing Corvus.Text.Json V5: YAML 1.2 - Zero-Allocation Conversion

Matthew Adams

Corvus.Text.Json.Yaml converts YAML 1.2 to JSON with 100% yaml-test-suite conformance using a custom ref struct tokenizer - no intermediate object model, no allocations on the hot path.
Introducing Corvus.Text.Json V5: JsonLogic - Safe Business Rules

Introducing Corvus.Text.Json V5: JsonLogic - Safe Business Rules

Matthew Adams

Corvus.Text.Json.JsonLogic provides a safe, side-effect-free rule engine that evaluates JSON-encoded business logic on average 3× faster than JsonEverything - with zero allocations.
Introducing Corvus.Text.Json V5: JMESPath - On Average 28× Faster JSON Queries

Introducing Corvus.Text.Json V5: JMESPath - On Average 28× Faster JSON Queries

Matthew Adams

Corvus.Text.Json.JMESPath implements the full JMESPath spec with 100% conformance, zero-allocation hot paths, and on average 28× faster than JmesPath.Net across 21 benchmarks.
Introducing Corvus.Text.Json V5: JSONata - Query and Transform JSON

Introducing Corvus.Text.Json V5: JSONata - Query and Transform JSON

Matthew Adams

Corvus.Text.Json.Jsonata brings the full JSONata language to .NET - 100% test suite conformance, on average 2× faster than Jsonata.Net.Native with 90–100% less memory, plus a source generator for compile-time code generation.
Introducing Corvus.Text.Json V5: Standalone Evaluator and Annotations

Introducing Corvus.Text.Json V5: Standalone Evaluator and Annotations

Matthew Adams

The standalone evaluator generates a lightweight validator with fully compliant JSON Schema annotation collection - ideal for form generators, schema-driven UIs, and documentation tools.
Introducing Corvus.Text.Json V5: Mutable Documents

Introducing Corvus.Text.Json V5: Mutable Documents

Matthew Adams

JsonDocumentBuilder and JsonWorkspace provide pooled, version-tracked mutable documents - the core V5 design trade-off that replaces V4's immutable-functional model with in-place mutation.
Introducing Corvus.Text.Json V5: Pooled-Memory Parsing

Introducing Corvus.Text.Json V5: Pooled-Memory Parsing

Matthew Adams

ParsedJsonDocument<T> uses ArrayPool-backed memory for just 136 bytes of GC pressure per document - 91% less than JsonNode - while providing a familiar System.Text.Json-compatible API.
Introducing Corvus.Text.Json V5: Schema Validation - 10× Faster

Introducing Corvus.Text.Json V5: Schema Validation - 10× Faster

Matthew Adams

Corvus.Text.Json V5 validates JSON against all major schema drafts over 10× faster than other .NET validators - with a simple EvaluateSchema() API and optional detailed diagnostics.
Introducing Corvus.Text.Json V5: Source-Generated Types

Introducing Corvus.Text.Json V5: Source-Generated Types

Matthew Adams

Annotate a partial struct with [JsonSchemaTypeGenerator] and get strongly-typed properties, validation, serialization, and mutable builders - all generated at build time with full IntelliSense.
Introducing Corvus.Text.Json V5: Why V5 Exists

Introducing Corvus.Text.Json V5: Why V5 Exists

Matthew Adams

Corvus.Text.Json V5 is a new engine for high-performance JSON in .NET - pooled-memory parsing, mutable documents, source-generated types, and three query languages. Here's why we built it.
Optimising DAX: VertiPaq Encoding Techniques

Optimising DAX: VertiPaq Encoding Techniques

Carmel Eve

VertiPaq fits millions of rows in memory by compressing columns. Learn how value, hash and run-length encoding work, and what they mean for model performance.
Optimising DAX: How VertiPaq Stores Your Data

Optimising DAX: How VertiPaq Stores Your Data

Carmel Eve

VertiPaq stores Power BI data column-by-column rather than row-by-row. That makes aggregations fast and cross-column queries the trickiest part of DAX.
Optimising DAX: A Series Introduction

Optimising DAX: A Series Introduction

Carmel Eve

Optimising DAX in Power BI: VertiPaq storage, compression, model design, how queries run through the storage, formula engines, and performance patterns.
Microsoft Fabric variable libraries: best practices guide

Microsoft Fabric variable libraries: best practices guide

Carmel Eve

Variable libraries in Microsoft Fabric manage environment-specific configuration. Learn where you can use them and how to set safer defaults for Dev/Test/Prod.
The GenAI Reality Check: New Instrument, Same Orchestra

The GenAI Reality Check: New Instrument, Same Orchestra

Barry Smart

AI is like introducing a powerful new instrument to an orchestra. It creates possibilities that didn't exist before. But it still requires musicians who can read music, a conductor with a vision, rehearsal time, and the discipline to play together. An orchestra that lacks these fundamentals won't be saved by a new instrument — they'll just make new kinds of noise.
Ingesting SharePoint Data into Microsoft Fabric: Your Options

Ingesting SharePoint Data into Microsoft Fabric: Your Options

Carmel Eve

SharePoint isn't going away. This post compares five ways to ingest SharePoint data into Microsoft Fabric, with guidance on cost, complexity, and incremental loading.
AI Strategy: Think Top-Down, Experiment Bottom-Up

AI Strategy: Think Top-Down, Experiment Bottom-Up

Barry Smart

Top-down AI strategy and bottom-up experimentation both fail alone: leading organisations combine them to drive real business results.
SQLBits 2026: A Conference Recap

SQLBits 2026: A Conference Recap

Carmel Eve

SQLBits is one of the largest data platform conferences in Europe. Here's a recap of my experience at SQLBits 2026, held at the ICC Wales.
Multi-layer Caching with the Decorator Pattern

Multi-layer Caching with the Decorator Pattern

Jonathan George

Databricks SQL cold starts kill web API performance. Fix it with two-layer caching: Azure Blob Storage & IMemoryCache, using the Decorator pattern.