MCPcopy Create free account
hub / github.com/Litishkumar/AnalyticaX / PowerBIMetadataParser

Class PowerBIMetadataParser

metadata_parser.py:15–275  ·  view source on GitHub ↗

Parses Power BI dashboard metadata exported as JSON

Source from the content-addressed store, hash-verified

13
14
15class PowerBIMetadataParser:
16 """
17 Parses Power BI dashboard metadata exported as JSON
18 """
19
20 def __init__(self, metadata_path: Optional[str] = None):
21 self.metadata = {}
22 self.kpis = []
23 self.visualizations = []
24 self.filters = {}
25
26 if metadata_path:
27 self.load_metadata(metadata_path)
28
29 def load_metadata(self, metadata_path: str) -> Dict[str, Any]:
30 """
31 Load Power BI metadata from JSON file
32
33 Args:
34 metadata_path: Path to metadata JSON file
35
36 Returns:
37 Parsed metadata dictionary
38 """
39 logger.info(f"Loading Power BI metadata from {metadata_path}")
40
41 with open(metadata_path, 'r') as f:
42 self.metadata = json.load(f)
43
44 # Parse components
45 self.kpis = self.metadata.get('kpis', [])
46 self.visualizations = self.metadata.get('visualizations', [])
47 self.filters = self.metadata.get('filters', {})
48
49 logger.info(f"Loaded {len(self.kpis)} KPIs and {len(self.visualizations)} visualizations")
50
51 return self.metadata
52
53 def get_kpi(self, kpi_name: str) -> Optional[Dict[str, Any]]:
54 """
55 Get specific KPI by name
56
57 Args:
58 kpi_name: Name of the KPI
59
60 Returns:
61 KPI dictionary or None
62 """
63 for kpi in self.kpis:
64 if kpi.get('name', '').lower() == kpi_name.lower():
65 return kpi
66 return None
67
68 def get_all_kpis(self) -> List[Dict[str, Any]]:
69 """
70 Get all KPIs
71
72 Returns:

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected