Blogg | Knowit

SQL Server Master Data Services 2016 - agil, automatiserad och deploybar?

Skriven av Lars Johansson Blank | Jan 12, 2017 11:00:00 PM

är en plattform för att hantera organisationens masterdata, men frågan jag ställer mig är om man kan infoga MDS i sin agila och automatiserade BI-miljö?

Tanken att släppa ut ägandeskapet och hanteringen av masterdata bort från IT och ut till verksamheten som brukar äga stora delar av frågorna om data och definitioner är bra.

Tankesättet låter bra (self-service, demokratisera IT osv), men då MDS-miljön är så pass öppen som den är så är det lätt att spagettin kokar upp snabbt (och det gillar ialla fall inte min vänstra hjärnhalva).
I takt med att antalet modeller och entiteter växer så kan det snabbt bli svårt att få en överblick.

Ett sätt att få struktur är genom namnsättning och här kommer ett förslag:
Sätt prefix på Entiteter, exvis
MDS_ entiteter som skapas i MDS
MAP_ entiteter som har ett domänattribut, dvs ett attribut vars värden skapas i en annan entitet
DW_ entiteter som läses in från ett annat system, exvis ett DW och berikas med attribut i MDS.

De huvudsakliga objekten i MDS är Modell, Entitet och Attribut, här kan du läsa mer om grunderna.

Data ut från MDS till andra system, exvis ett DW sker via integrationsvyer. Alla integrationsvyerna för entiteterna i de olika modellerna hamnar i samma schema i MDS-databasen, så där bör man också ha ordning via namnsättningen.
Prefixa integrationsvyer med Modellnamnet!
Exvis en modell Scorecard och Entitet Försäljningsmål så blir namnet på integrationsvyn Scorecard_MDS_Försäljningsmål

Men det behöver inte stoppa med namnstandarder och ordning.
Jag vill få bort så mycket manuellt arbete som möjligt i BI-projekten och det är fortfarande många klick och inmatande för att få till det i MDS.
Excel-addin för MDS underlättar mycket, speciellt med datainmatningen men jag vill ta det ännu ett steg vidare.
Jag tänkte visa ett alternativt sätt istf MDSModelDeploy.exe att få in MDS i den vanliga projekthanteringen, så att lösningen kan deployas och versionshanteras precis som all annan kod.
Då kan vi skapa T-SQL som skapar modeller, entiteter, attribut och integrationsvyer.
Grunden är ett T-SQLscript som genererar ett T-SQL script, och det är detta som versionshanteras och används i deploy.
Miljön jag själv jobbar med är SQL Server 2016 och Visual Studio.
Om vi börjar med att titta på hur vi kan dra ut definitioner från MDS och spara de som T-SQL script så är pseudokoden

Definitioner
{
För Varje Modell
-- Skapa Create Model Script
-- För Varje Vanlig (MDS/DW) Entitet
---- Skapa Create Entity Script
---- För Varje Attribut
------ Skapa Create Attribute Script
-- För Varje MAP-Entitet
---- Skapa Create Entity Script
---- För Varje Attribut
------ Skapa Create Attribute SCript
-- Skapa Subscription Views
}
-- Data
{
För Varje Modell
-- För varje vanlig Entitet (MDS/DW) som har en Subscription View
---- Generera script med data som ska insertas
}

I kommande inlägg kommer jag visa med körbar kod hur det går till.
Säkerheten har jag valt att inte lägga in i denna version 1, men det står på TODO-listan till version 2.
Generera INSERT-script av data tänkte jag också ta upp i senare inlägg så jag hoppas vi höres/läses igen!