Skip to content

Model Overview

The OpenBI model is a platform-agnostic representation of a Business Intelligence asset. Every entity maps cleanly to concepts that exist across all major BI platforms.


Entity diagram

classDiagram
    class Asset {
        +string? IdSite
        +AssetInfo? Info
        +Layout? Layout
        +DataModel? DataModel
        +List~RefreshTask~? RefreshTasks
        +List~DataSourceConnection~? DataSourceConnections
        +IEnumerable~Asset~ Dependencies
    }
    class AssetInfo {
        +string Id
        +string ExternalType
        +string IdFolder
        +string FolderName
        +AssetType Type
        +string Name
        +string Description
        +DateTime? LatestUpdate
        +string? LatestUpdater
        +ICollection~AdditionalMetadata~? AdditionalMetadata
    }
    class Layout {
        +ICollection~Page~ Pages
        +ICollection~AdditionalMetadata~? AdditionalMetadata
    }
    class Page {
        +string Id
        +string FriendlyName
        +int Order
        +decimal Width
        +decimal Height
        +bool IsEnabled
        +ICollection~Visual~ Visuals
        +ICollection~Filter~ PageLevelFilters
    }
    class Visual {
        +string Id
        +string FriendlyName
        +VisualCategories Category
        +string Type
        +decimal X, Y, Z, Width, Height
        +ICollection~VisualProjection~ VisualProjections
        +ICollection~Filter~ VisualLevelFilters
        +ICollection~Visual~? Children
    }
    class VisualProjection {
        +string ProjectionName
        +string? OpenBIProjectionName
        +Expression? Expression
        +bool IsActive
        +bool IsDimension
        +bool IsMeasure
        +string? IdColumnReference
        +int Order
    }
    class DataModel {
        +ICollection~Table~ Tables
        +ICollection~Relationship~ Relationships
    }
    class Table {
        +string Id
        +string? Type
        +string Name
        +Expression? Expression
        +ICollection~Column~ Columns
    }
    class Column {
        +string Id
        +string Name
        +ColumnDataType DataType
        +Expression? Expression
        +bool IsKey
        +bool IsDimension
        +bool IsMeasure
    }
    class Relationship {
        +string IdColumnFrom
        +string IdColumnTo
        +RelationshipDirection Type
        +Expression? Expression
    }
    class Filter {
        +string? IdColumn
        +FilterFunctionType Function
        +List~string~ Values
        +bool IsGroup
        +List~Filter~? Children
        +Expression? Expression
    }
    class RefreshTask {
        +string Id
        +List~RefreshTrigger~? Triggers
    }
    class DataSourceConnection {
        +string? ExternalId
        +string Name
        +string Type
        +Dictionary~string,string~? Parameters
    }

    Asset --> AssetInfo : Info
    Asset --> Layout : Layout
    Asset --> DataModel : DataModel
    Asset --> RefreshTask : RefreshTasks
    Asset --> DataSourceConnection : DataSourceConnections
    Layout --> Page : Pages
    Page --> Visual : Visuals
    Page --> Filter : PageLevelFilters
    Visual --> VisualProjection : VisualProjections
    Visual --> Filter : VisualLevelFilters
    Visual --> Visual : Children
    DataModel --> Table : Tables
    DataModel --> Relationship : Relationships
    Table --> Column : Columns
    RefreshTask --> RefreshTrigger : Triggers

Design principles

Platform-agnostic by design. The model never references a specific BI vendor. Platform-specific details live in AdditionalMetadata key-value pairs, not in typed fields.

Extension without modification. Every entity carries an ICollection<AdditionalMetadata>? AdditionalMetadata property. Converters use this to preserve vendor-specific attributes without changing the shared schema.

Dependency-aware. An Asset can declare Dependencies (other Asset objects it depends on, e.g. a Report depending on a SemanticModel). The MCP Server stages the full dependency graph in one transaction.

Two top-level sub-graphs. Every asset has at most two independent sub-graphs:

  • Layout — the visual/UX layer: pages, visuals, projections, page-level and visual-level filters.
  • DataModel — the semantic layer: tables, columns, relationships, expressions.

A Report asset typically has only a Layout; a DataModel/SemanticModel asset typically has only a DataModel. Some platforms bundle both in a single artifact.