@diarworld/powerbi-tom-parser
v1.0.0
Published
Node.js library to extract Power BI / Analysis Services Tabular Model metadata from .bim files
Maintainers
Readme
powerbi-tom-parser
Node.js library to extract Power BI / Analysis Services Tabular Model metadata from .bim files.
Features
- Parse Power BI
.bimJSON files - Extract tables, columns, partitions, measures, and relationships
- Support for various partition source types (Query, M, Calculated)
- Automatic encoding detection (UTF-8, UTF-16 LE/BE)
- Full TypeScript support with type definitions
Installation
npm install powerbi-tom-parserUsage
Parse a .bim file
import { parseBimFile } from 'powerbi-tom-parser';
const model = await parseBimFile('./model.bim');
console.log('Tables:', model.tables.map(t => t.name));
console.log('Relationships:', model.relationships.length);Parse JSON directly
import { parseBimJson } from 'powerbi-tom-parser';
const bim = {
model: {
name: 'SalesModel',
compatibilityLevel: 1500,
tables: [
{
name: 'Sales',
columns: [
{ name: 'Id', dataType: 'Int64' },
{ name: 'Amount', dataType: 'Decimal' }
],
partitions: [
{ name: 'Sales', source: { type: 'query', query: 'SELECT * FROM Sales' } }
],
measures: [
{ name: 'Total Sales', expression: 'SUM(Sales[Amount])' }
]
}
],
relationships: []
}
};
const model = parseBimJson(bim);Options
const model = await parseBimFile('./model.bim', {
includeAnnotations: true, // Include model annotations (default: true)
includeHiddenObjects: false // Exclude hidden tables/columns/measures
});TypeScript Types
The library provides full TypeScript type definitions:
import {
TabularModel,
DataModelSchema,
Table,
Column,
Partition,
Measure,
Relationship,
DataType,
PartitionSourceType,
RelationshipCardinality,
CrossFilteringBehavior
} from 'powerbi-tom-parser';Data Types
DataType.Int64,DataType.Double,DataType.Boolean,DataType.String,DataType.DateTime,DataType.Decimal, etc.
Partition Source Types
PartitionSourceType.Query- SQL query partitionPartitionSourceType.M- Power Query (M) partitionPartitionSourceType.Calculated- Calculated partitionPartitionSourceType.None- No source
Relationship Cardinality
RelationshipCardinality.OneToOneRelationshipCardinality.OneToManyRelationshipCardinality.ManyToOne
Error Handling
import { parseBimFile, TomParserError } from 'powerbi-tom-parser';
try {
const model = await parseBimFile('./model.bim');
} catch (error) {
if (error instanceof TomParserError) {
console.log('Error code:', error.code);
console.log('Message:', error.message);
}
}Error codes:
FILE_NOT_FOUND- BIM file not foundINVALID_JSON- Invalid JSON in fileMISSING_REQUIRED_FIELD- Required field missingUNKNOWN_DATA_TYPE- Unknown data typeMALFORMED_RELATIONSHIP- Invalid relationship
Development
# Install dependencies
npm install
# Build
npm run build
# Test
npm test
# Clean
npm run cleanLicense
MIT
