Share via


Σύγκριση ρεπλίκων κλιμάκωσης μοντέλου σημασιολογίας

Αυτό το άρθρο παρέχει μερικά παραδείγματα εφαρμογής Visual Studio για τη σύγκριση ιδιοτήτων σημασιολογικού μοντέλου όταν είναι ενεργοποιημένη η κλιμάκωση μοντέλου σημασιολογίας Power BI.

Το syncStatus REST API εμφανίζει εάν συγχρονίζονται το σημασιολογικό μοντέλο ανάγνωσης-εγγραφής και οι αναπαραστάσεις μόνο για ανάγνωση. Μπορείτε επίσης να χρησιμοποιήσετε το Μοντέλο αντικειμένου σε μορφή πίνακα (TOM) για να δημιουργήσετε μια προσαρμοσμένη εφαρμογή που συνδέεται σε μοντέλα σημασιολογίας και συγκρίνει χρονικές σημάνσεις, μετα-δεδομένα και αποτελέσματα ερωτημάτων μεταξύ τους.

Εφαρμογή 1 - Ελέγξτε τις ιδιότητες αντικειμένου βάσης δεδομένων

Χρησιμοποιήστε τον παρακάτω κώδικα για να δημιουργήσετε μια εφαρμογή που ελέγχει τις ιδιότητες LastUpdate, LastProcessed και LastSchemaUpdate των σημασιολογικών μοντέλων σας. Πριν η εφαρμογή εκτελέσει τους ελέγχους, πρέπει να καλέσει τη Refresh() μέθοδο, για να λάβει τα μετα-δεδομένα της αναπαραγωγής.

Αντικαταστήστε <WorkspaceUrl> το με τη διεύθυνση URL του χώρου εργασίας σας και <Semantic modelName> με το όνομα του σημασιολογικού μοντέλου σας.

string workspaceUrl = "<WorkspaceUrl>";  // Replace <WorkspaceUrl> with the URL of your workspace
string datasetName = "<Semantic modelName>";  // Replace <Semantic modelName> with the name of your semantic model 
using (var workspace_readwrite = new Microsoft.AnalysisServices.Tabular.Server()) 
using (var workspace_readonly = new Microsoft.AnalysisServices.Tabular.Server()) 
{
    workspace_readwrite.Connect(workspaceUrl + "?readwrite"); 
    workspace_readonly.Connect(workspaceUrl + "?readonly"); 
    var datasetRW = workspace_readwrite.Databases.FindByName(semantic modelName); 
    var datasetRO = workspace_readonly.Databases.FindByName(semantic modelName); 

    if (datasetRW == null || datasetRO == null) 
    { 
        throw new ApplicationException("Database cannot be found!"); 
    }
    datasetRW.Refresh(); 
    datasetRO.Refresh(); 
    Console.WriteLine($"LastUpdated: {datasetRW.LastUpdate} (readwrite) {datasetRO.LastUpdate} (readonly)"); 
    Console.WriteLine($"LastProcessed: {datasetRW.LastProcessed} (readwrite) {datasetRO.LastProcessed} (readonly)"); 
    Console.WriteLine($"LastSchemaUpdate: {datasetRW.LastSchemaUpdate} (readwrite) {datasetRO.LastSchemaUpdate} (readonly)\n"); 
} 
Console.WriteLine("Test completed. Press any key to exit."); 
Console.Read(); 

Εφαρμογή 2 - Σύγκριση των μετα-δεδομένων του μοντέλου σημασιολογίας

Χρησιμοποιήστε τον παρακάτω κώδικα για να συγκρίνετε τα μετα-δεδομένα του πρωτεύοντος σημασιολογικού μοντέλου ανάγνωσης-εγγραφής με τα μετα-δεδομένα μιας αναπαραγωγής μόνο για ανάγνωση. Αντικαταστήστε <WorkspaceUrl> το με τη διεύθυνση URL του χώρου εργασίας σας και <DatasetName> με το όνομα του σημασιολογικού μοντέλου σας.

string workspaceUrl = "<WorkspaceUrl>";  // Replace <WorkspaceUrl> with the URL of your workspace 
string datasetName = "<DatasetName>";  // Replace <DatasetName> with the name of your semantic model 
using (var workspace_readwrite = new Microsoft.AnalysisServices.Tabular.Server()) 
using (var workspace_readonly = new Microsoft.AnalysisServices.Tabular.Server()) 
{ 
    workspace_readwrite.Connect(workspaceUrl + "?readwrite"); 
    workspace_readonly.Connect(workspaceUrl + "?readonly"); 
    var datasetRW = workspace_readwrite.Databases.FindByName(datasetName); 
    var datasetRO = workspace_readonly.Databases.FindByName(datasetName); 

    if (datasetRW == null || datasetRO == null) 
    { 
        throw new ApplicationException("Database cannot be found!"); 
    } 

    string tmslRW = Microsoft.AnalysisServices.Tabular.JsonSerializer.SerializeDatabase(datasetRW); 
    string tmslRO = Microsoft.AnalysisServices.Tabular.JsonSerializer.SerializeDatabase(datasetRO); 

    if (tmslRW != tmslRO) 
    { 
        Console.WriteLine("The replicas are out of sync.\n"); 
    } 
    else 
    { 
        Console.WriteLine("The replicas are in sync.\n"); 
    } 
} 
Console.WriteLine("Test completed. Press any key to exit."); 
Console.Read(); 

Εφαρμογή 3 - Υποβολή ερωτήματος στα δεδομένα σημασιολογικού μοντέλου

Χρησιμοποιήστε ADOMD.NET το για να υποβάλετε ερωτήματα για τα δεδομένα στις αναπαραστάσεις. Αντικαταστήστε <WorkspaceUrl> το με τη διεύθυνση URL του χώρου εργασίας σας και <DatasetName> με το όνομα του σημασιολογικού μοντέλου σας.

string workspaceUrl = "<WorkspaceUrl>";  // Replace WorkspaceUrl with the URL of your workspace 
string datasetName = "<DatasetName>";  // Replace DatasetName with the name of your semantic model 
string daxQuery = "Evaluate SUMMARIZECOLUMNS(RefreshTimeTable[Time])"; 
using (var connectionRW = new Microsoft.AnalysisServices.AdomdClient.AdomdConnection()) 
using (var connectionRO = new Microsoft.AnalysisServices.AdomdClient.AdomdConnection()) 
{ 
    connectionRW.ConnectionString = $"Data Source={workspaceUrl}?readwrite;Catalog={datasetName}"; 
    connectionRO.ConnectionString = $"Data Source={workspaceUrl}?readonly;Catalog={datasetName}"; 
    connectionRW.Open(); 
    connectionRO.Open(); 
    var cmd = new Microsoft.AnalysisServices.AdomdClient.AdomdCommand(daxQuery); 
    string resultRW = string.Empty; 
    string resultRO = string.Empty; 
    cmd.Connection = connectionRW; 
    using (var reader = cmd.ExecuteReader()) 
    { 
        while (reader.Read()) 
        { 
            resultRW = reader.GetString(0); 
        } 
    } 

    cmd.Connection = connectionRO; 
    using (var reader = cmd.ExecuteReader()) 
    { 
        while (reader.Read()) 
        { 
            resultRO = reader.GetString(0); 
        } 
    } 

    if (resultRW != resultRO) 
    { 
        Console.WriteLine("The replicas are out of sync.\n"); 
    } 
    else 
    { 
        Console.WriteLine("The replicas are in sync.\n"); 
    } 
} 
Console.WriteLine("Test completed. Press any key to exit."); 
Console.Read();