/// <summary> /// Dump internal model structure /// </summary> static void SimpleDump() { Dax.Model.Model m = new Dax.Model.Model(); Dax.Model.Table tA = new Dax.Model.Table(m) { TableName = new Dax.Model.DaxName("A") }; Dax.Model.Table tB = new Dax.Model.Table(m) { TableName = new Dax.Model.DaxName("B") }; Dax.Model.Column ca1 = new Dax.Model.Column(tA) { ColumnName = new Dax.Model.DaxName("A_1") }; Dax.Model.Column ca2 = new Dax.Model.Column(tA) { ColumnName = new Dax.Model.DaxName("A_2") }; tA.Columns.Add(ca1); tA.Columns.Add(ca2); m.Tables.Add(tA); // Test serialization on JSON file var json = JsonConvert.SerializeObject(m, Formatting.Indented, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.All }); System.IO.File.WriteAllText(@"C:\temp\model.json", json); }
public static void UpdateStatisticsModel(Dax.Model.Model daxModel, OleDbConnection connection) { StatExtractor extractor = new StatExtractor(daxModel, connection); extractor.LoadTableStatistics(); extractor.LoadColumnStatistics(); }
/// <summary> /// Dump internal structure for Relationships /// </summary> /// <param name="m"></param> private static void DumpRelationships(Dax.Model.Model m) { Console.WriteLine("------------------------"); foreach (var t in m.Tables) { Console.WriteLine("---Table={0}", t.TableName); foreach (var r in t.GetRelationshipsTo()) { Console.WriteLine( "{0}[{1}] ==> {2}[{3}]", r.FromColumn.Table.TableName, r.FromColumn.ColumnName, r.ToColumn.Table.TableName, r.ToColumn.ColumnName ); } foreach (var r in t.GetRelationshipsFrom()) { Console.WriteLine( "{0}[{1}] ==> {2}[{3}]", r.FromColumn.Table.TableName, r.FromColumn.ColumnName, r.ToColumn.Table.TableName, r.ToColumn.ColumnName ); } } }
public static void PopulateFromDmv(Dax.Model.Model daxModel, OleDbConnection connection, string databaseName, string extractorApp, string extractorVersion) { Dax.Model.Extractor.DmvExtractor de = new Dax.Model.Extractor.DmvExtractor(daxModel, connection, databaseName, extractorApp, extractorVersion); de.PopulateTables(); de.PopulateColumns(); de.PopulateUserHierarchies(); de.PopulateRelationships(); }
/* * /// <summary> * /// Export to VertiPaq Analyzer (VPAX) file * /// </summary> * /// <param name="databaseName"></param> * /// <param name="pathOutput"></param> * /// <param name="export"></param> * private static void ExportVPAX(string path, Dax.Model.Model model, Dax.ViewVpaExport.Model export) * { * Uri uriModel = PackUriHelper.CreatePartUri(new Uri("DaxModel.json", UriKind.Relative)); * Uri uriModelVpa = PackUriHelper.CreatePartUri(new Uri("DaxModelVpa.json", UriKind.Relative)); * using (Package package = Package.Open(path, FileMode.Create)) * { * using (TextWriter tw = new StreamWriter(package.CreatePart(uriModel, "application/json", CompressionOption.Maximum).GetStream(), Encoding.UTF8)) * { * tw.Write( * JsonConvert.SerializeObject( * model, * Formatting.Indented, * new JsonSerializerSettings * { * PreserveReferencesHandling = PreserveReferencesHandling.All, * ReferenceLoopHandling = ReferenceLoopHandling.Serialize * } * ) * ); * tw.Close(); * } * using (TextWriter tw = new StreamWriter(package.CreatePart(uriModelVpa, "application/json", CompressionOption.Maximum).GetStream(), Encoding.UTF8)) * { * tw.Write(JsonConvert.SerializeObject(export, Formatting.Indented)); * tw.Close(); * } * package.Close(); * } * } */ /// <summary> /// Dump internal structure for permissions /// </summary> /// <param name="m"></param> private static void DumpPermissions(Dax.Model.Model m) { Console.WriteLine("------------------------"); foreach (var t in m.Tables) { Console.WriteLine("---Table={0}", t.TableName); foreach (var tp in t.GetTablePermissions()) { Console.WriteLine("Role {0} = {1} ", tp.Role.RoleName.Name, tp.FilterExpression.Expression); } } }
private TomExtractor(Tom.Model model, string extractorApp, string extractorVersion) { tomModel = model; AssemblyName tomExtractorAssemblyName = this.GetType().Assembly.GetName(); Version version = tomExtractorAssemblyName.Version; DaxModel = new Dax.Model.Model(tomExtractorAssemblyName.Name, tomExtractorAssemblyName.Version.ToString(), extractorApp, extractorVersion); if (tomModel != null) { PopulateModel(); } }
/// <summary> /// Export the Dax.Model in JSON format /// </summary> /// <param name="pathOutput"></param> /// <param name="m"></param> private static void ExportModelJSON(string pathOutput, Dax.Model.Model m) { var json = JsonConvert.SerializeObject( m, Formatting.Indented, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.All, ReferenceLoopHandling = ReferenceLoopHandling.Serialize }); System.IO.File.WriteAllText(pathOutput + "model.json", json); // Console.WriteLine(json); }
/// <summary> /// Export to VertiPaq Analyzer (VPAX) file /// </summary> /// <param name="databaseName"></param> /// <param name="pathOutput"></param> /// <param name="viewVpa"></param> /// <param name="database"></param> public static void ExportVpax(string path, Dax.Model.Model model, Dax.ViewVpaExport.Model viewVpa = null, Microsoft.AnalysisServices.Database database = null) { using (ExportVpax exportVpax = new ExportVpax(path)) { if (model != null) { exportVpax.ExportModel(model); } if (viewVpa != null) { exportVpax.ExportViewVpa(viewVpa); } if (database != null) { exportVpax.ExportDatabase(database); } exportVpax.Close(); } }
public DmvExtractor(Dax.Model.Model daxModel, OleDbConnection connection, string databaseName, string extractorApp, string extractorVersion) { Connection = connection; Connection.Open(); // Validate databaseName if (!CheckDatabaseNameCompatibilityLevel(ref databaseName, out int compatibilityLevel)) { throw new ExtractorException(connection, databaseName); } AssemblyName tomExtractorAssemblyName = this.GetType().Assembly.GetName(); Version version = tomExtractorAssemblyName.Version; // Create a DAX model if it is not provided in the constructor arguments // This should be outsider the constructor, but we want to make sure the database name is // validated before using other DMVs DaxModel = daxModel ?? new Dax.Model.Model(tomExtractorAssemblyName.Name, tomExtractorAssemblyName.Version.ToString(), extractorApp, extractorVersion); DaxModel.ModelName = databaseName; DaxModel.CompatibilityLevel = compatibilityLevel; }
public static void ExportVPAX(string serverName, string databaseName, string path, bool includeTomModel, string applicationName, string applicationVersion) { // // Get Dax.Model object from the SSAS engine // Dax.Model.Model model = Dax.Model.Extractor.TomExtractor.GetDaxModel(serverName, databaseName, applicationName, applicationVersion); // // Get TOM model from the SSAS engine // Microsoft.AnalysisServices.Database database = includeTomModel ? Dax.Model.Extractor.TomExtractor.GetDatabase(serverName, databaseName): null; // // Create VertiPaq Analyzer views // Dax.ViewVpaExport.Model viewVpa = new Dax.ViewVpaExport.Model(model); // // Save VPAX file // // TODO: export of database should be optional Dax.Vpax.Tools.VpaxTools.ExportVpax(path, model, viewVpa, database); }
public StatExtractor(Dax.Model.Model daxModel, OleDbConnection connection) { this.DaxModel = daxModel; this.Connection = connection; }
/* * public List<VpaRole> Roles { get; } */ public VpaModel(Dax.Model.Model model) { this.Model = model; }
public Model(Dax.Model.Model model) { this._Model = model; }