ktg-plugin-marketplace/plugins/ms-ai-architect/skills/ms-ai-engineering/references/data-engineering/dataverse-ai-integration.md
Kjell Tore Guttormsen 6a7632146e feat(ms-ai-architect): add plugin to open marketplace (v1.5.0 baseline)
Initial addition of ms-ai-architect plugin to the open-source marketplace.
Private content excluded: orchestrator/ (Linear tooling), docs/utredning/
(client investigation), generated test reports and PDF export script.
skill-gen tooling moved from orchestrator/ to scripts/skill-gen/.

Security scan: WARNING (risk 20/100) — no secrets, no injection found.
False positive fixed: added gitleaks:allow to Python variable reference
in output-validation-grounding-verification.md line 109.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 17:17:17 +02:00

17 KiB

Dataverse and AI Integration

Last updated: 2026-02 Status: GA Category: Data Engineering for AI


Introduksjon

Microsoft Dataverse er den sentrale dataplattformen for Power Platform og Dynamics 365, og inneholder forretningskritisk data fra CRM, ERP, og egendefinerte applikasjoner. Integrering av Dataverse-data med AI-losninger via Microsoft Fabric og Data Factory gjor det mulig a utnytte forretningsdata for prediktiv analyse, maskinlaring og intelligent automatisering uten komplekse ETL-pipelines.

For norsk offentlig sektor er Dataverse ofte kjernen i saksbehandlingssystemer, innbyggertjenester og Power Apps-baserte fagsystemer. Evnen til a koble disse dataene til AI-modeller -- for eksempel for prediktiv vedlikeholdsplanlegging, chatbot-trening, eller automatisert dokumentklassifisering -- representerer en viktig mulighetsdimensjon som krever god arkitekturforstaaelse.

Denne referansen dekker alle integrasjonsmonstre mellom Dataverse og AI-okosystemet, fra den direkte "Link to Fabric"-funksjonen til Data Factory-konnektorer, sanntidssynkronisering, og sikkerhetspropagering.


Dataverse Connectors in Data Factory

Dataverse Connector i Fabric Data Factory

Fabric Data Factory tilbyr en dedikert Dataverse-konnektor med flere integrasjonsmonstre:

Kapabilitet Gateway Autentisering
Dataflow Gen2 (kilde) Ingen, On-prem, VNet Org-konto, Service Principal, Workspace Identity
Pipeline Copy Activity (kilde/dest) Ingen, On-prem, VNet Org-konto, Service Principal, Workspace Identity
Copy Job (kilde/dest) Ingen, On-prem, VNet Org-konto, Service Principal, Workspace Identity

Copy Job modus

Modus Beskrivelse Bruksomraade
Full load Komplett kopi av alle rader Forste gangs lasting
Append Legg til nye rader Inkrementell lasting
Upsert Sett inn eller oppdater basert pa nokkel Synkronisering

Pipeline-eksempel: Dataverse til Lakehouse

{
    "name": "DataverseToLakehouse",
    "properties": {
        "activities": [
            {
                "name": "CopyDataverseAccounts",
                "type": "Copy",
                "inputs": [{
                    "type": "DataverseEntity",
                    "entity": "account",
                    "filter": "modifiedon ge 2024-01-01"
                }],
                "outputs": [{
                    "type": "LakehouseTable",
                    "table": "bronze.crm_accounts"
                }],
                "typeProperties": {
                    "source": {
                        "type": "DataverseSource",
                        "query": "?$select=name,revenue,industry&$filter=statecode eq 0"
                    },
                    "sink": {
                        "type": "LakehouseSink",
                        "writeBehavior": "Upsert",
                        "upsertKeyColumns": ["accountid"]
                    }
                }
            }
        ]
    }
}

Entity Relationship Mapping to Delta Tables

Dataverse-tabeller til Medallion Architecture

Dataverse bruker en relasjonell modell med entiteter, relasjoner og lookups. Ved overforig til Lakehouse bor dette mappes til Delta-tabeller i en medallion-arkitektur:

Dataverse                          Lakehouse
┌──────────────────┐              ┌──────────────────────┐
│ account          │  ────────>   │ bronze.crm_accounts  │
│ contact          │  ────────>   │ bronze.crm_contacts  │
│ opportunity      │  ────────>   │ bronze.crm_opps      │
│ incident (case)  │  ────────>   │ bronze.crm_cases     │
└──────────────────┘              └──────────┬───────────┘
                                             │
                                   Silver Layer (denormalisert)
                                             │
                                  ┌──────────▼───────────┐
                                  │ silver.customer_360   │
                                  │ (account + contact +  │
                                  │  opportunity joined)  │
                                  └──────────┬───────────┘
                                             │
                                   Gold Layer (AI-klar)
                                             │
                                  ┌──────────▼───────────┐
                                  │ gold.churn_features   │
                                  │ gold.revenue_predict  │
                                  └──────────────────────┘

Handtering av Dataverse-spesifikke datatyper

Dataverse-type Delta Lake-mapping Merknad
Lookup String (GUID) Maa joines for visningsnavn
OptionSet Integer + String label Lagre baade verdi og label
Money Decimal(38,4) Inkluder valutareferanse
DateTime Timestamp Vurder tidssone (UTC vs lokal)
Customer String (polymorf) Kan peke til account eller contact
PartyList Array of GUIDs Flatten til separate rader

PySpark for entity-mapping

from pyspark.sql.functions import col, when, lit

# Les Dataverse-data fra bronze
accounts = spark.read.format("delta").table("bronze.crm_accounts")
contacts = spark.read.format("delta").table("bronze.crm_contacts")
opportunities = spark.read.format("delta").table("bronze.crm_opps")

# Denormalisering: Customer 360 view
customer_360 = (
    accounts
    .join(
        contacts,
        accounts["accountid"] == contacts["parentcustomerid"],
        "left"
    )
    .join(
        opportunities
        .groupBy("parentaccountid")
        .agg(
            F.sum("estimatedvalue").alias("total_pipeline"),
            F.count("*").alias("opp_count"),
            F.max("estimatedclosedate").alias("latest_opp_date")
        ),
        accounts["accountid"] == col("parentaccountid"),
        "left"
    )
    .select(
        accounts["accountid"],
        accounts["name"].alias("company_name"),
        accounts["revenue"].alias("annual_revenue"),
        accounts["industrycode"],
        col("total_pipeline"),
        col("opp_count"),
        col("latest_opp_date")
    )
)

# Skriv til silver layer
customer_360.write.format("delta").mode("overwrite").saveAsTable("silver.customer_360")

Real-Time Dataverse Data Sync

Den mest effektive metoden for Dataverse-Fabric-integrasjon er den innebygde "Link to Microsoft Fabric"-funksjonen:

Power Apps ──> "Analyze > Link to Microsoft Fabric"
                     │
                     ▼
              ┌──────────────────────────────┐
              │  Fabric Workspace            │
              │  ├── Lakehouse               │
              │  │   ├── Shortcut: accounts  │
              │  │   ├── Shortcut: contacts  │
              │  │   └── Shortcut: cases     │
              │  ├── SQL Analytics Endpoint   │
              │  └── Default Semantic Model   │
              └──────────────────────────────┘

Egenskaper:

Egenskap Verdi
Kopieringsmetode OneLake shortcuts (ingen dataduplisering)
Format Delta Parquet
Synkroniserings-latens Opptil 60 minutter
Tabellvalg Alle tabeller med Track Changes, eller manuelt valg
Autentisering Org-konto, Service Principal, Workspace Identity
Read/Write Kun lesetilgang (shortcuts er read-only)

Dataverse Shortcuts via Fabric

Alternativt kan du opprette shortcuts direkte fra Fabric:

  1. Apen Lakehouse i Fabric
  2. Velg "New Table Shortcut" > "Dataverse"
  3. Oppgi environment-URL
  4. Bla gjennom og velg tabeller
# Etter at shortcut er opprettet, les direkte i Notebook
df = spark.read.format("delta").table("accounts")
display(df.limit(10))

Synkroniseringsmekanisme

Fabric Spark compute handterer synkronisering:

  • Initial load: Full kopi av valgte tabeller
  • Inkrementell oppdatering: Poller hvert 2. minutt for endringer
  • Endringssporing: Basert pa Dataverse Track Changes-funksjonen
  • Sletting: Fjerner rader nar kildedata slettes

Power Platform Data Integration

Arkitektur for AI-drevet Power Platform

┌──────────────────────────────────────────────────────────────────┐
│                    Power Platform                                 │
│  ┌──────────┐  ┌──────────────┐  ┌────────────────────────────┐ │
│  │ Power    │  │ Power        │  │ Copilot Studio             │ │
│  │ Apps     │  │ Automate     │  │ (AI chatbot)               │ │
│  └────┬─────┘  └──────┬───────┘  └──────────┬─────────────────┘ │
│       │               │                      │                    │
│       └───────────────┼──────────────────────┘                    │
│                       │                                           │
│              ┌────────▼────────┐                                  │
│              │   Dataverse     │                                  │
│              └────────┬────────┘                                  │
└───────────────────────┼──────────────────────────────────────────┘
                        │  Link to Fabric
               ┌────────▼────────────────────────────┐
               │        Microsoft Fabric              │
               │  ┌──────────┐  ┌──────────────────┐ │
               │  │ Lakehouse│  │ ML Models         │ │
               │  │ (Delta)  │  │ (Spark/AzureML)   │ │
               │  └──────────┘  └──────────────────┘ │
               │                       │              │
               │              ┌────────▼────────┐    │
               │              │ Predictions     │    │
               │              │ (write back)    │    │
               │              └────────┬────────┘    │
               └───────────────────────┼─────────────┘
                                       │
                         Virtual Tables / Dataverse API
                                       │
               ┌───────────────────────▼─────────────┐
               │  Power Apps: vis AI-prediksjoner     │
               │  Power Automate: trigger pa insights │
               └─────────────────────────────────────┘

AI Builder-integrasjon

AI Builder-modeller lagrer resultater direkte i Dataverse:

AI Builder-modell Dataverse-lagring Fabric-bruk
Prediction Prediction-kolonne pa entitet Feature for ML
Document Processing Extracted fields Treningsdata
Object Detection Detection results Analyse
Text Classification Category labels NLP-pipeline

Skrive AI-resultater tilbake til Dataverse

# Via Dataverse Web API fra Fabric Notebook
import requests

def write_prediction_to_dataverse(env_url, access_token, entity, record_id, prediction):
    """Skriv AI-prediksjon tilbake til Dataverse-entitet."""
    url = f"{env_url}/api/data/v9.2/{entity}({record_id})"
    headers = {
        "Authorization": f"Bearer {access_token}",
        "Content-Type": "application/json",
        "OData-MaxVersion": "4.0"
    }
    payload = {
        "cr_churn_prediction": prediction["score"],
        "cr_prediction_date": prediction["timestamp"],
        "cr_risk_category": prediction["category"]
    }
    response = requests.patch(url, json=payload, headers=headers)
    return response.status_code

RLS Propagation from Dataverse to Fabric

Sikkerhetsmodell

Dataverse har et avansert sikkerhetssystem med Business Units, Security Roles, og Row-Level Security (RLS). Ved integrasjon med Fabric maa dette haandteres eksplisitt.

Dataverse-sikkerhet Fabric-ekvivalent Automatisk propagering
Business Units Workspace-tilgang Nei -- manuell mapping
Security Roles OneLake Security Nei -- manuell mapping
Row-Level Security RLS i SQL Endpoint / Semantic Model Delvis
Field-Level Security Column-level security Nei
Team-based access Workspace roles Nei

Implementere RLS i Fabric

-- SQL Analytics Endpoint: Definer RLS
CREATE FUNCTION dbo.fn_security_predicate(@business_unit_id AS NVARCHAR(50))
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS result
WHERE @business_unit_id = SESSION_CONTEXT(N'business_unit_id');

-- Opprett sikkerhetspolicy
CREATE SECURITY POLICY crm_security
ADD FILTER PREDICATE dbo.fn_security_predicate(business_unit_id)
ON silver.customer_360
WITH (STATE = ON);

Power BI Semantic Model RLS

// DAX-filter for RLS i Power BI
[BusinessUnitId] = USERPRINCIPALNAME()
// Eller via lookup-tabell:
CONTAINS(
    FILTER(SecurityMapping, SecurityMapping[UserEmail] = USERPRINCIPALNAME()),
    SecurityMapping[BusinessUnitId], [BusinessUnitId]
)

Anbefalinger for sikkerhetspropagering

  1. Dokumenter mapping: Opprett eksplisitt mapping mellom Dataverse Security Roles og Fabric Workspace Roles
  2. Automatiser med Power Automate: Synkroniser rolletilordninger ved endringer
  3. Minimer direkte datatilgang: Bruk Semantic Models med RLS som primaertilgang
  4. Auditing: Aktiver Microsoft Purview for sporbarhet

Referanser


For Cosmo

  • Bruk denne referansen naar brukeren har Dynamics 365, Power Apps, eller Power Platform-data som skal brukes i AI-losninger, eller naar de trenger a skrive AI-prediksjoner tilbake til forretningsapplikasjoner.
  • Anbefal Link to Fabric som forstevalg for enkel integrasjon -- ingen ETL, ingen ekstra infrastruktur, data forblir i Dataverse med shortcuts.
  • Vaar oppmerksom pa latens: Link to Fabric har opptil 60 minutters forsinkelse. For sanntidsbehov, bruk Dataverse Web API eller Power Automate-triggers i stedet.
  • For sikkerhet: Dataverse RLS propageres IKKE automatisk til Fabric. Dette maa alltid adresseres eksplisitt i arkitekturforslaget, spesielt for offentlig sektor med strenge tilgangskrav.
  • Anbefal medallion architecture for Dataverse-data: Bronze (raa shortcut), Silver (denormalisert Customer 360), Gold (ML-features) for a unnga at AI-modeller trener pa denormaliserte Dataverse-strukturer.