ms-ai-architect/skills/ms-ai-engineering/references/data-engineering/dataverse-ai-integration.md
Kjell Tore Guttormsen 3a73eeafdc refactor(ms-ai-architect): R13 del 1 — nøytraliser Cosmo-personaen i ref-korpusets headinger, etter å ha rettet en gate som var målt usann to ganger
Ordre 20260912T193441Z-7358817909. Steg 1 var ikke transformen, men å rette
roadmapens R13-gate og få den ratifisert. Gaten `grep -rl "Cosmo"
skills/*/references -> 0` var usann på to uavhengige måter:

1. Ordren fanget den første: 451 av forekomstene er Azure Cosmos DB, ekte
   produktinnhold. Diskriminatoren er ikke bokstaven «s» — `Cosmos <norsk
   substantiv>` er genitiv av personaen (`### Cosmos tonalitet`), mens
   `Cosmos DB`/`CosmosClient`/`cosmos_ru` er produkt.
2. Denne økten fant den andre: 132 persona-forekomster ligger i prosa,
   tabeller, dialog-replikker og proveniens-linjer. Heading-nøytralisering
   kan ikke nå dem, så «0 persona» er uoppnåelig også under den ratifiserte
   formen. Operatøren ratifiserte alternativ A: gaten speiler formen, og de
   132 bokføres til R13b/R14.

Tre korreksjoner av premisser som sto i ordren og STATE:
  «ca 320 produkt»   -> 451 (case-sensitivt nett manglet 327 lowercase
                        TOC-ankre + 99 identifikatorer; sann nevner 1 638)
  «169 headinger»    -> 401. 169 var `^## For Cosmo`-prefikset (168) og var
                        internt inkonsistent med sin egen topp-variant (204)
  «417 matcher ingen
   populasjon»       -> 417 er cosmo-headinger utenfor kodefences; briefens
                        nevner var reell hele tiden

Fence-bevissthet er målt skadelig, ikke nødvendig: begge toggle-regler er
gale på dette korpuset (naiv toggle skjuler en ekte heading i
chain-of-thought-prompting.md, CommonMark-regelen ubalanserer
service-level-documentation-dr.md). Fence-agnostisk deteksjon finner 401
heading-linjer i nøyaktig de samme 40 variantene som fence-bevisst finner
400 i — ingen kodeblokk-linje er byte-identisk til en persona-heading. Derfor
nøkles transformen på 40 enumererte heading-tekster og ignorerer fences. En
ukjent variant kaster; en slug-kollisjon kaster. Ingenting auto-fikses.

TOC-en regenereres ikke, den rettes kirurgisk: alle 327 persona-lenker hadde
lenketekst lik én av de 40 heading-tekstene og anker lik slugify av den
(327/327, 0 avvik), så heading og TOC-entry skrives i samme operasjon og
ingen mellomtilstand etterlater en død lenke.

Ratifisert målform: `For Cosmo`, `For Cosmo Skyberg` og `For arkitekten
(Cosmo)` konvergerer på `For arkitekten`. To filer kolliderte og er adjudisert
ved å lese dem, ikke ved regel.

Verifisering (alle 7 kriterier fra ordren):
  G1 persona på heading-linjer   401 -> 0
  G2 døde fragmentlenker         1 -> 1 (pre-eksisterende, unntatt)
  G3 produkt-forekomster         451 -> 451; `Cosmos DB|Azure Cosmos` 308 = 308
  de 3 kun-produkt-filene        byte-identiske
  nettet validert begge veier    injisert persona feller G1; genitiv feller G1;
                                 produkt-heading og de 3 filene passerer
  hele diffen                    802 heading-linjer + 654 TOC-linjer, ANNET = 0
  linjeantall                    728 lagt til = 728 slettet
  suite                          1120/1120 (1097 + 23 nye)
  validate-plugin                250 PASS / 0 FAIL
  stikkprøve                     10 filer, alle 5 skills, inkl. de 3 mest
                                 produkt-tunge (26/20/19) — kun heading+TOC

Utenfor scope, urørt: de 4 SKILL.md, de 23 commands, CLAUDE.md, README.md,
NOTICE.md, docs/ (alt R14).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 22:12:28 +02:00

18 KiB

Dataverse and AI Integration

Last updated: 2026-02 Status: GA Category: Data Engineering for AI Type: reference Source: https://learn.microsoft.com/fabric/data-factory/connector-dataverse-overview


Innhold

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 arkitekten

  • 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.