Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Qlik GA: Multivariate Time Series in Qlik Predict: Get Details
Ouadie
Employee
Employee

When I’m exploring a Qlik app, I often want to show exactly how I reached a view—without typing instructions or jumping on a call.

Qlik Trail is a small extension I created that does just that: Click Record, make your selections, and you’ll get a tidy list of steps that you can replay from start to finish, or jump to a specific step. Then, when you’re happy with the journey, you can export the trail as JSON and hand it to someone else so they can import and run the same sequence on their side.

Why not just use bookmarks?

Bookmarks are great for destinations (one final selection state). Qlik Trail is more about the path:

  • Multiple steps in a defined order (A → B → C)

  • Replay from start for narration or Replay a specific step 

  • Export/import a whole journey, not a bunch of one-offs

You can use bookmarks to save a point in time, and use Qlik Trail when the sequence matters more.

What can you do with the Qlik Trail extension?

  • Record steps manually, or toggle Auto to capture each change

  • Name, duplicate, reorder, delete, or ungroup steps

  • Organize steps into Groups (Executive Story, Sales Ops, Training, …)

  • Replay to here (apply one step) or Replay from start (play the group)

  • Export / Import trails as JSON

Screenshot 2025-09-26 232750.png

Demo

Before we go into how the extension was built, let's see a demo of how it can be used.

I’ll share two practical trails an Executive Story and Sales Ops with selections you can record and replay on your end, for this demo I'll use the Consumer Goods Sales app (which you can get here: https://explore.qlik.com/details/consumer-goods-sales)

Setup

  • Upload the extension .zip file in the Management Console, then add Qlik Trail (custom object) to a sheet.

  • Optional: enable Auto-record in the object’s properties if you want every change captured while you explore.

  • Toolbar (left to right): Record, Replay from start, Delete, Delete all, Auto, Group filter, New group, Export, Import.

 

Trail 1 — Executive Story

Create Group: Executive Story

Step 0 — “US overview: top categories”
Selections: (none)

Step 1 — “Northeast · Fresh Vegetables”
Selections: Region = Northeast, Product Group = Fresh Vegetables

Step 2 — “Northeast · Cheese (A/B)”
Selections: Region = Northeast, Product Group = Cheese
quick A/B inside the same region.

Step 3 — “West vs Northeast · Fresh Fruit”
Selections: Region = West, Northeast, Product Group = Fresh Fruit
same category across two regions to see differences.

Step 4 — “Northeast focus: PA · Fresh Fruit”
Selections: Region = Northeast, State = Pennsylvania, Product Group = Fresh Fruit
drill to a particular state.

Presenting: select the group → Replay from start. If questions land on Step 4, use Replay to here.

Screenshot 2025-09-26 210728.png

Trail 2 — Sales Ops Story

Create Group: Sales Ops Story

Step 1 — “South · Ice Cream & Juice (summer basket)”
Selections: Region = South, Product Group = Ice Cream, Juice

Step 2 — “Central · Hot Dogs (promo check-in)”
Selections: Region = Central, Product Group = Hot Dogs

Step 3 — “West · Cheese (margin look)”
Selections: Region = West, Product Group = Cheese

Tips when building trails

  • One idea per step. (Region + Category) or (Region + a couple of States)

  • Duplicate then tweak for fast A/B comparisons

  • Group by audience. Exec, Ops, Training

  • Ungrouped steps = scratchpad. Move into a group when it’s ready

  • After recording, drag to reorder so replay tells a clean story

Sharing your trails

Click Export to download qliktrail_export_YYYY-MM-DD_HHMM.json.

Your teammate can Import, pick a group, and hit Replay from start. Same steps, same order—no instructions needed.

Tech notes

1) Module & CSS injection
Load CSS once at runtime so the object stays self-contained:

define(['qlik','jquery','./properties','text!./style.css'], function(qlik, $, props, css){
  if (!document.getElementById('qliktrail-style')) {
    const st = document.createElement('style');
    st.id = 'qliktrail-style';
    st.textContent = css;
    document.head.appendChild(st);
  }
  // …
});

2) Capturing selections per state
Read SelectionObject, group by qStateName, then fetch only selected rows via a lightweight list object. Store both text and numeric to be resilient to numeric fields:

app.getList('SelectionObject', function(m){
  // build grouped { state -> [fields] }
});
...
app.createList({
  qStateName: stateName || '$',
  qDef: { qFieldDefs: [fieldName] },
  qInitialDataFetch: [{ qTop:0, qLeft:0, qWidth:1, qHeight:10000 }]
}).then(obj => obj.getLayout() /* collect S/L/XS states */);

Snapshot (what we export/import):

{
  "ts": "2025-03-10T14:30:00Z",
  "states": [
    {
      "state": "$",
      "fields": {
        "Region": { "text": ["Northeast"], "num": [] },
        "Product Group": { "text": ["Fresh Vegetables"], "num": [] }
      }
    }
  ]
}

3) Replaying selections
Clear target state, then select values. Prefer numbers when available; fall back to text:

app.clearAll(false, state);
... field.selectValues(pack.num.map(n=>({qNumber:n})), false, false) // fallback to qText field.selectValues(pack.text.map(t=>({qText:String(t)})), false, false);

4) Auto-record with a quiet window
Avoid recording during replays to prevent ghost steps:

ui.replayQuietUntil = Date.now() + (layout.props.replayQuietMs || 1200);
if (Date.now() >= ui.replayQuietUntil && ui.autoOn) record();

5) Groups, ordering & persistence
Trails live in localStorage per app key. Groups look like { id, name, members:[stepId,…] }. Ordering is a simple seq integer; drag-and-drop reassigns seq inside the open list.

Screenshot 2025-09-26 205913.png

 

That’s Qlik Trail in a nutshell. It lets you hit record, name a few steps, and replay the story without hand-holding anyone through filters. Use Bookmarks to keep states, but Trail will help you keep tack of the sequence.

P.S: this extension is a work-in-progress experiment and not prod-ready, I'm planning to add more features to it and make it more stable in the future.

🖇 Link to download the extension:
  https://github.com/olim-dev/qlik-trail