Skip to content

Instantly share code, notes, and snippets.

@bjulius
Last active March 2, 2025 01:10
Show Gist options
  • Save bjulius/45edda84a1486eb2204d8c35daf684b7 to your computer and use it in GitHub Desktop.
Save bjulius/45edda84a1486eb2204d8c35daf684b7 to your computer and use it in GitHub Desktop.
C# script for Tabular Editor/TE3 to extract table, column, relationship, and measure info in json format from Power BI PBIX files
//C# script for Tabular Editor/TE3 to extract table, column, relationship, and measure info in json format from Power BI PBIX files
//Written by Brian Julius, 3 Oct 2024
// Specify the output file path
string outputFile = @"C:\Temp\PowerBI_Model_Info.txt"; // Change this to your desired path
using (var writer = new System.IO.StreamWriter(outputFile))
{
// TMSCHEMA_TABLES
writer.WriteLine("TMSCHEMA_TABLES");
var dsTables = ExecuteDax("SELECT * FROM $SYSTEM.TMSCHEMA_TABLES");
var dtTables = dsTables.Tables[0];
WriteDataTableToCsv(dtTables, writer);
writer.WriteLine(); // Add an empty line for readability
// TMSCHEMA_COLUMNS
writer.WriteLine("TMSCHEMA_COLUMNS");
var dsColumns = ExecuteDax("SELECT * FROM $SYSTEM.TMSCHEMA_COLUMNS");
var dtColumns = dsColumns.Tables[0];
WriteDataTableToCsv(dtColumns, writer);
writer.WriteLine();
// TMSCHEMA_RELATIONSHIPS
writer.WriteLine("TMSCHEMA_RELATIONSHIPS");
var dsRelationships = ExecuteDax("SELECT * FROM $SYSTEM.TMSCHEMA_RELATIONSHIPS");
var dtRelationships = dsRelationships.Tables[0];
WriteDataTableToCsv(dtRelationships, writer);
writer.WriteLine();
// TMSCHEMA_MEASURES
writer.WriteLine("TMSCHEMA_MEASURES");
var dsMeasures = ExecuteDax("SELECT * FROM $SYSTEM.TMSCHEMA_MEASURES");
var dtMeasures = dsMeasures.Tables[0];
WriteDataTableToCsv(dtMeasures, writer);
writer.WriteLine();
}
// Function to write DataTable to CSV
void WriteDataTableToCsv(System.Data.DataTable dt, System.IO.StreamWriter writer)
{
// Write the header row
for (int i = 0; i < dt.Columns.Count; i++)
{
writer.Write(dt.Columns[i].ColumnName);
if (i < dt.Columns.Count - 1)
writer.Write(",");
}
writer.WriteLine();
// Write data rows
foreach (System.Data.DataRow row in dt.Rows)
{
for (int i = 0; i < dt.Columns.Count; i++)
{
string value = row[i].ToString();
// Escape double quotes
value = value.Replace("\"", "\"\"");
// If value contains comma or quote, enclose in double quotes
if (value.Contains(",") || value.Contains("\""))
value = "\"" + value + "\"";
writer.Write(value);
if (i < dt.Columns.Count - 1)
writer.Write(",");
}
writer.WriteLine();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment