Microsoft Fabric has no built-in way to pass a shared run_date across pipeline stages, especially if you need to backfill historically.

The workaround is to create two pipelines. The first wires a pipeline variable that prompts for a date on manual runs and defaults to today on a schedule. The second accepts a set of dates and iterates over the first for backfilling.

Pipeline 1: The main runner

  1. A “Pipeline Variable” called v_run_date

  2. A “Set Variable” activity attached to the v_run_date pipeline variable with the dynamic value:

    @coalesce(
       pipeline().parameters.run_date,
       formatDateTime(utcNow(), 'yyyy-MM-dd')
    )
  3. A “Parameter” in the Notebook activity with the value of @variables('v_run_date'). The parameter name here must match the notebook’s parameter name exactly. Fabric uses this to inject the value at runtime.

Pipeline 2: The backfill

  1. A “forEach” activity that iterates over a JSON array of dates, e.g. @json('["2024-11-01","2024-12-01"]')
  2. An “Invoke Pipeline” activity inside the loop that calls Pipeline 1, wiring run_date to @item()

Shortcomings

A more robust approach would be creating a “bookkeeping” service that writes pipeline run/stage metadata to a lakehouse table that each pipeline can check if it’s finished and run against it.

The fact that you have to roll your own approach suggests Microsoft hasn’t considered this an important use-case.