Inside Visier DB: Event Streams, Temporal Queries, Metrics, and Cohorts

Back to the Engineering Blog index Visier Developer Docs

In Part 1 we looked at Visier’s subject- and time-centric data model and why traditional ETL pipelines struggle with constant change.

In this part, we’ll focus on:


From Data Feeds to Event Streams: The Event Stream Loader

Real systems change constantly:

Our ingestion layer is designed to embrace this reality rather than fight it.

Modeling as States and Events

Instead of stitching together rows from multiple systems into a static table, we:

  1. Interpret each incoming record as an event that affects:
    • A specific subject (e.g., an employee).
    • A specific property of that subject (e.g., salary, location).
  2. Maintain a derived history of states:
    • For each subject, we track how its properties change over time.

This event/state model makes it much easier to:

Raw data sources are converted into a unified event stream, then derived into time-based subject states

Figure 1: The Event Stream Loader turns heterogeneous source data into a unified event stream, then derives time-based subject states.

Schema-Agnostic Transformations

A key design choice is to be schema-agnostic:

Benefits:

Business rules are written in terms of analytic meaning, not physical schema.

Traditional ETL schema coupling compared with schema-agnostic analytic mapping

Figure 2: Schema-agnostic mapping decouples analytic meaning from brittle source schemas.


Visier DB: A Temporal, Object-Based Engine

Once data is modeled as time-varying subjects, we need a query engine that understands:

That’s what Visier DB is designed for.

Object-Based, Not Row-Based

Visier Database (Visier DB) is a temporal object-based engine:

The engine is:

Handling Organizational Restructures and Movements

Real analytics problems often involve complex temporal behavior:

Visier DB treats every dimension used for grouping as time-aware:

This allows us to answer questions like:

Before and after organization restructure reporting with time-aware grouping

Figure 3: Time-aware grouping lets the same people roll up through the correct structure for each query date.

Time-Dependent Grouping and Filtering

Time is not just a filter; it becomes an ingredient in metrics and groupings.

For example, consider “time since promotion”:

Visier DB supports time-dependent grouping and filtering directly, so these kinds of questions are natural rather than custom one-off SQL gymnastics.


Metrics as Time-Aware Functions

Analytics isn’t just about counting rows; it’s about measuring behavior over time.

Examples of the kinds of metrics Visier supports:

These metrics require the engine to:

While you can do this in SQL with careful effective-dated modeling, it quickly becomes:

Visier DB’s temporal model makes these patterns first-class and reusable.


Cohorts: Time-Locked Filters

A cohort in Visier is a time-locked filter over subjects.

Conceptually:

Example 1: Hire Cohorts and Survival Curves

This yields a survival curve:

Example 2: Training Impact

These use cases rely on cohorts being:


Where This Series Goes Next

So far, we’ve covered:

In Part 3, we’ll move beyond the data model and engine internals to look at:

Return to the Engineering Blog index for the latest posts.