semantic-link-labs 0.8.7__tar.gz → 0.8.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of semantic-link-labs might be problematic. Click here for more details.

Files changed (201) hide show
  1. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/PKG-INFO +4 -2
  2. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/README.md +3 -1
  3. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/docs/source/conf.py +1 -1
  4. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/pyproject.toml +1 -1
  5. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/semantic_link_labs.egg-info/PKG-INFO +4 -2
  6. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/__init__.py +2 -0
  7. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_connections.py +1 -1
  8. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_dax.py +69 -54
  9. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_generate_semantic_model.py +72 -17
  10. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_model_bpa_bulk.py +2 -2
  11. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_model_dependencies.py +5 -1
  12. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_translations.py +80 -148
  13. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_workspaces.py +1 -1
  14. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/admin/__init__.py +2 -0
  15. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/admin/_basic_functions.py +86 -40
  16. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/admin/_domains.py +3 -2
  17. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/admin/_scanner.py +1 -1
  18. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_reportwrapper.py +14 -9
  19. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/tom/_model.py +1 -1
  20. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  21. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  22. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/.github/ISSUE_TEMPLATE/issue--question---advice-needed.md +0 -0
  23. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/.github/workflows/build.yaml +0 -0
  24. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/.github/workflows/codeql.yaml +0 -0
  25. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/.gitignore +0 -0
  26. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/.readthedocs.yaml +0 -0
  27. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/.vscode/settings.json +0 -0
  28. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/CODE_OF_CONDUCT.md +0 -0
  29. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/LICENSE +0 -0
  30. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/SECURITY.md +0 -0
  31. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/SUPPORT.md +0 -0
  32. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/docs/Makefile +0 -0
  33. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/docs/make.bat +0 -0
  34. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/docs/requirements.txt +0 -0
  35. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/docs/source/index.rst +0 -0
  36. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/docs/source/modules.rst +0 -0
  37. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/environment.yml +0 -0
  38. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/notebooks/Best Practice Analyzer Report.ipynb +0 -0
  39. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/notebooks/Capacity Migration.ipynb +0 -0
  40. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/notebooks/Migration to Direct Lake.ipynb +0 -0
  41. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/notebooks/Model Optimization.ipynb +0 -0
  42. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/notebooks/Query Scale Out.ipynb +0 -0
  43. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/notebooks/Report Analysis.ipynb +0 -0
  44. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/notebooks/SQL.ipynb +0 -0
  45. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/notebooks/Semantic Model Refresh.ipynb +0 -0
  46. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/notebooks/Tabular Object Model.ipynb +0 -0
  47. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/setup.cfg +0 -0
  48. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/semantic_link_labs.egg-info/SOURCES.txt +0 -0
  49. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/semantic_link_labs.egg-info/dependency_links.txt +0 -0
  50. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/semantic_link_labs.egg-info/requires.txt +0 -0
  51. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/semantic_link_labs.egg-info/top_level.txt +0 -0
  52. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_ai.py +0 -0
  53. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_authentication.py +0 -0
  54. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_am-ET.po +0 -0
  55. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_ar-AE.po +0 -0
  56. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_bg-BG.po +0 -0
  57. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_ca-ES.po +0 -0
  58. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_cs-CZ.po +0 -0
  59. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_da-DK.po +0 -0
  60. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_de-DE.po +0 -0
  61. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_el-GR.po +0 -0
  62. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_es-ES.po +0 -0
  63. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_fa-IR.po +0 -0
  64. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_fi-FI.po +0 -0
  65. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_fr-FR.po +0 -0
  66. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_ga-IE.po +0 -0
  67. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_he-IL.po +0 -0
  68. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_hi-IN.po +0 -0
  69. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_hu-HU.po +0 -0
  70. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_id-ID.po +0 -0
  71. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_is-IS.po +0 -0
  72. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_it-IT.po +0 -0
  73. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_ja-JP.po +0 -0
  74. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_ko-KR.po +0 -0
  75. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_mt-MT.po +0 -0
  76. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_nl-NL.po +0 -0
  77. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_pl-PL.po +0 -0
  78. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_pt-BR.po +0 -0
  79. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_pt-PT.po +0 -0
  80. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_ro-RO.po +0 -0
  81. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_ru-RU.po +0 -0
  82. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_sk-SK.po +0 -0
  83. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_sl-SL.po +0 -0
  84. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_sv-SE.po +0 -0
  85. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_ta-IN.po +0 -0
  86. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_te-IN.po +0 -0
  87. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_th-TH.po +0 -0
  88. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_tr-TR.po +0 -0
  89. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_uk-UA.po +0 -0
  90. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_zh-CN.po +0 -0
  91. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_bpa_translation/_model/_translations_zu-ZA.po +0 -0
  92. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_capacities.py +0 -0
  93. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_capacity_migration.py +0 -0
  94. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_clear_cache.py +0 -0
  95. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_data_pipelines.py +0 -0
  96. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_dataflows.py +0 -0
  97. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_deployment_pipelines.py +0 -0
  98. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_documentation.py +0 -0
  99. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_environments.py +0 -0
  100. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_eventhouses.py +0 -0
  101. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_eventstreams.py +0 -0
  102. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_external_data_shares.py +0 -0
  103. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_gateways.py +0 -0
  104. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_git.py +0 -0
  105. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_helper_functions.py +0 -0
  106. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_icons.py +0 -0
  107. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_kql_databases.py +0 -0
  108. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_kql_querysets.py +0 -0
  109. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_list_functions.py +0 -0
  110. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_managed_private_endpoints.py +0 -0
  111. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_mirrored_databases.py +0 -0
  112. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_mirrored_warehouses.py +0 -0
  113. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_ml_experiments.py +0 -0
  114. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_ml_models.py +0 -0
  115. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_model_auto_build.py +0 -0
  116. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_model_bpa.py +0 -0
  117. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_model_bpa_rules.py +0 -0
  118. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_notebooks.py +0 -0
  119. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_one_lake_integration.py +0 -0
  120. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_query_scale_out.py +0 -0
  121. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_refresh_semantic_model.py +0 -0
  122. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_spark.py +0 -0
  123. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_sql.py +0 -0
  124. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_vertipaq.py +0 -0
  125. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_warehouses.py +0 -0
  126. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_workloads.py +0 -0
  127. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/_workspace_identity.py +0 -0
  128. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/admin/_external_data_share.py +0 -0
  129. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/admin/_git.py +0 -0
  130. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/admin/_items.py +0 -0
  131. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/directlake/__init__.py +0 -0
  132. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/directlake/_directlake_schema_compare.py +0 -0
  133. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/directlake/_directlake_schema_sync.py +0 -0
  134. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/directlake/_dl_helper.py +0 -0
  135. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/directlake/_generate_shared_expression.py +0 -0
  136. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/directlake/_get_directlake_lakehouse.py +0 -0
  137. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/directlake/_get_shared_expression.py +0 -0
  138. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/directlake/_guardrails.py +0 -0
  139. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/directlake/_list_directlake_model_calc_tables.py +0 -0
  140. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/directlake/_show_unsupported_directlake_objects.py +0 -0
  141. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/directlake/_update_directlake_model_lakehouse_connection.py +0 -0
  142. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/directlake/_update_directlake_partition_entity.py +0 -0
  143. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/directlake/_warm_cache.py +0 -0
  144. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/lakehouse/__init__.py +0 -0
  145. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/lakehouse/_get_lakehouse_columns.py +0 -0
  146. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/lakehouse/_get_lakehouse_tables.py +0 -0
  147. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/lakehouse/_lakehouse.py +0 -0
  148. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/lakehouse/_shortcuts.py +0 -0
  149. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/migration/__init__.py +0 -0
  150. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/migration/_create_pqt_file.py +0 -0
  151. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/migration/_migrate_calctables_to_lakehouse.py +0 -0
  152. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/migration/_migrate_calctables_to_semantic_model.py +0 -0
  153. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/migration/_migrate_model_objects_to_semantic_model.py +0 -0
  154. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/migration/_migrate_tables_columns_to_semantic_model.py +0 -0
  155. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/migration/_migration_validation.py +0 -0
  156. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/migration/_refresh_calc_tables.py +0 -0
  157. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_BPAReportTemplate.json +0 -0
  158. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/__init__.py +0 -0
  159. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/.pbi/localSettings.json +0 -0
  160. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/.platform +0 -0
  161. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/StaticResources/SharedResources/BaseThemes/CY24SU06.json +0 -0
  162. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/page.json +0 -0
  163. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/1b08bce3bebabb0a27a8/visual.json +0 -0
  164. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/2f22ddb70c301693c165/visual.json +0 -0
  165. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/3b1182230aa6c600b43a/visual.json +0 -0
  166. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/58577ba6380c69891500/visual.json +0 -0
  167. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/a2a8fa5028b3b776c96c/visual.json +0 -0
  168. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/adfd47ef30652707b987/visual.json +0 -0
  169. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/b6a80ee459e716e170b1/visual.json +0 -0
  170. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/ce3130a721c020cc3d81/visual.json +0 -0
  171. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/page.json +0 -0
  172. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/visuals/66e60dfb526437cd78d1/visual.json +0 -0
  173. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/page.json +0 -0
  174. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/07deb8bce824e1be37d7/visual.json +0 -0
  175. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0b1c68838818b32ad03b/visual.json +0 -0
  176. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0c171de9d2683d10b930/visual.json +0 -0
  177. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0efa01be0510e40a645e/visual.json +0 -0
  178. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/6bf2f0eb830ab53cc668/visual.json +0 -0
  179. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/88d8141cb8500b60030c/visual.json +0 -0
  180. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/a753273590beed656a03/visual.json +0 -0
  181. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/b8fdc82cddd61ac447bc/visual.json +0 -0
  182. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/page.json +0 -0
  183. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/visuals/ce8532a7e25020271077/visual.json +0 -0
  184. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/pages/pages.json +0 -0
  185. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/report.json +0 -0
  186. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition/version.json +0 -0
  187. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_bpareporttemplate/definition.pbir +0 -0
  188. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_download_report.py +0 -0
  189. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_generate_report.py +0 -0
  190. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_paginated.py +0 -0
  191. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_report_bpa.py +0 -0
  192. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_report_bpa_rules.py +0 -0
  193. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_report_functions.py +0 -0
  194. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_report_helper.py +0 -0
  195. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_report_list_functions.py +0 -0
  196. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/report/_report_rebind.py +0 -0
  197. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/src/sempy_labs/tom/__init__.py +0 -0
  198. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/tests/__init__.py +0 -0
  199. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/tests/test_friendly_case.py +0 -0
  200. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/tests/test_shortcuts.py +0 -0
  201. {semantic_link_labs-0.8.7 → semantic_link_labs-0.8.9}/tests/test_tom.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: semantic-link-labs
3
- Version: 0.8.7
3
+ Version: 0.8.9
4
4
  Summary: Semantic Link Labs for Microsoft Fabric
5
5
  Author: Microsoft Corporation
6
6
  License: MIT License
@@ -27,7 +27,7 @@ Requires-Dist: pytest>=8.2.1; extra == "test"
27
27
  # Semantic Link Labs
28
28
 
29
29
  [![PyPI version](https://badge.fury.io/py/semantic-link-labs.svg)](https://badge.fury.io/py/semantic-link-labs)
30
- [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.8.7&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
30
+ [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.8.9&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
31
31
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
32
32
  [![Downloads](https://static.pepy.tech/badge/semantic-link-labs)](https://pepy.tech/project/semantic-link-labs)
33
33
 
@@ -141,6 +141,8 @@ An even better way to ensure the semantic-link-labs library is available in your
141
141
  2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
142
142
 
143
143
  ## Version History
144
+ * [0.8.9](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.9) (December 4, 2024)
145
+ * [0.8.8](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.8) (November 28, 2024)
144
146
  * [0.8.7](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.7) (November 27, 2024)
145
147
  * [0.8.6](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.6) (November 14, 2024)
146
148
  * [0.8.5](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.5) (November 13, 2024)
@@ -1,7 +1,7 @@
1
1
  # Semantic Link Labs
2
2
 
3
3
  [![PyPI version](https://badge.fury.io/py/semantic-link-labs.svg)](https://badge.fury.io/py/semantic-link-labs)
4
- [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.8.7&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
4
+ [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.8.9&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
5
5
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
6
6
  [![Downloads](https://static.pepy.tech/badge/semantic-link-labs)](https://pepy.tech/project/semantic-link-labs)
7
7
 
@@ -115,6 +115,8 @@ An even better way to ensure the semantic-link-labs library is available in your
115
115
  2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
116
116
 
117
117
  ## Version History
118
+ * [0.8.9](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.9) (December 4, 2024)
119
+ * [0.8.8](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.8) (November 28, 2024)
118
120
  * [0.8.7](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.7) (November 27, 2024)
119
121
  * [0.8.6](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.6) (November 14, 2024)
120
122
  * [0.8.5](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.5) (November 13, 2024)
@@ -13,7 +13,7 @@ sys.path.insert(0, os.path.abspath('../../src/'))
13
13
  project = 'semantic-link-labs'
14
14
  copyright = '2024, Microsoft and community'
15
15
  author = 'Microsoft and community'
16
- release = '0.8.7'
16
+ release = '0.8.9'
17
17
 
18
18
  # -- General configuration ---------------------------------------------------
19
19
  # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
@@ -7,7 +7,7 @@ name="semantic-link-labs"
7
7
  authors = [
8
8
  { name = "Microsoft Corporation" },
9
9
  ]
10
- version="0.8.7"
10
+ version="0.8.9"
11
11
  description="Semantic Link Labs for Microsoft Fabric"
12
12
  readme="README.md"
13
13
  requires-python=">=3.10,<3.12"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: semantic-link-labs
3
- Version: 0.8.7
3
+ Version: 0.8.9
4
4
  Summary: Semantic Link Labs for Microsoft Fabric
5
5
  Author: Microsoft Corporation
6
6
  License: MIT License
@@ -27,7 +27,7 @@ Requires-Dist: pytest>=8.2.1; extra == "test"
27
27
  # Semantic Link Labs
28
28
 
29
29
  [![PyPI version](https://badge.fury.io/py/semantic-link-labs.svg)](https://badge.fury.io/py/semantic-link-labs)
30
- [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.8.7&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
30
+ [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.8.9&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
31
31
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
32
32
  [![Downloads](https://static.pepy.tech/badge/semantic-link-labs)](https://pepy.tech/project/semantic-link-labs)
33
33
 
@@ -141,6 +141,8 @@ An even better way to ensure the semantic-link-labs library is available in your
141
141
  2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
142
142
 
143
143
  ## Version History
144
+ * [0.8.9](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.9) (December 4, 2024)
145
+ * [0.8.8](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.8) (November 28, 2024)
144
146
  * [0.8.7](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.7) (November 27, 2024)
145
147
  * [0.8.6](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.6) (November 14, 2024)
146
148
  * [0.8.5](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.5) (November 13, 2024)
@@ -190,6 +190,7 @@ from sempy_labs._generate_semantic_model import (
190
190
  get_semantic_model_bim,
191
191
  get_semantic_model_size,
192
192
  update_semantic_model_from_bim,
193
+ get_semantic_model_definition,
193
194
  )
194
195
  from sempy_labs._list_functions import (
195
196
  list_reports_using_semantic_model,
@@ -456,4 +457,5 @@ __all__ = [
456
457
  "create_vnet_gateway",
457
458
  "update_vnet_gateway",
458
459
  "update_on_premises_gateway",
460
+ "get_semantic_model_definition",
459
461
  ]
@@ -237,7 +237,7 @@ def list_item_connections(
237
237
  )
238
238
 
239
239
  client = fabric.FabricRestClient()
240
- response = client.post(f"/v1/workspaces/{workspace_id}/items/{item_id}/connections")
240
+ response = client.get(f"/v1/workspaces/{workspace_id}/items/{item_id}/connections")
241
241
 
242
242
  df = pd.DataFrame(
243
243
  columns=[
@@ -6,7 +6,7 @@ from sempy_labs._helper_functions import (
6
6
  format_dax_object_name,
7
7
  )
8
8
  from sempy_labs._model_dependencies import get_model_calc_dependencies
9
- from typing import Optional
9
+ from typing import Optional, List
10
10
  from sempy._utils._log import log
11
11
  from tqdm.auto import tqdm
12
12
 
@@ -67,8 +67,9 @@ def evaluate_dax_impersonation(
67
67
  @log
68
68
  def get_dax_query_dependencies(
69
69
  dataset: str,
70
- dax_string: str,
70
+ dax_string: str | List[str],
71
71
  put_in_memory: bool = False,
72
+ show_vertipaq_stats: bool = True,
72
73
  workspace: Optional[str] = None,
73
74
  ) -> pd.DataFrame:
74
75
  """
@@ -78,10 +79,12 @@ def get_dax_query_dependencies(
78
79
  ----------
79
80
  dataset : str
80
81
  Name of the semantic model.
81
- dax_string : str
82
- The DAX query.
82
+ dax_string : str | List[str]
83
+ The DAX query or list of DAX queries.
83
84
  put_in_memory : bool, default=False
84
85
  If True, ensures that the dependent columns are put into memory in order to give realistic Vertipaq stats (i.e. Total Size etc.).
86
+ show_vertipaq_stats : bool, default=True
87
+ If True, shows vertipaq stats (i.e. Total Size, Data Size, Dictionary Size, Hierarchy Size)
85
88
  workspace : str, default=None
86
89
  The Fabric workspace name.
87
90
  Defaults to None which resolves to the workspace of the attached lakehouse
@@ -96,67 +99,79 @@ def get_dax_query_dependencies(
96
99
  if workspace is None:
97
100
  workspace = fabric.resolve_workspace_name(workspace)
98
101
 
99
- # Escape quotes in dax
100
- dax_string = dax_string.replace('"', '""')
101
- final_query = f"""
102
- EVALUATE
103
- VAR source_query = "{dax_string}"
104
- VAR all_dependencies = SELECTCOLUMNS(
105
- INFO.CALCDEPENDENCY("QUERY", source_query),
106
- "Referenced Object Type",[REFERENCED_OBJECT_TYPE],
107
- "Referenced Table", [REFERENCED_TABLE],
108
- "Referenced Object", [REFERENCED_OBJECT]
109
- )
110
- RETURN all_dependencies
111
- """
112
- dep = fabric.evaluate_dax(
113
- dataset=dataset, workspace=workspace, dax_string=final_query
114
- )
102
+ if isinstance(dax_string, str):
103
+ dax_string = [dax_string]
115
104
 
116
- # Clean up column names and values (remove outside square brackets, underscorees in object type)
117
- dep.columns = dep.columns.map(lambda x: x[1:-1])
118
- dep["Referenced Object Type"] = (
119
- dep["Referenced Object Type"].str.replace("_", " ").str.title()
120
- )
121
- dep
122
-
123
- # Dataframe df will contain the output of all dependencies of the objects used in the query
124
- df = dep.copy()
105
+ final_df = pd.DataFrame(columns=["Object Type", "Table", "Object"])
125
106
 
126
107
  cd = get_model_calc_dependencies(dataset=dataset, workspace=workspace)
127
108
 
128
- for _, r in dep.iterrows():
129
- ot = r["Referenced Object Type"]
130
- object_name = r["Referenced Object"]
131
- table_name = r["Referenced Table"]
132
- cd_filt = cd[
133
- (cd["Object Type"] == ot)
134
- & (cd["Object Name"] == object_name)
135
- & (cd["Table Name"] == table_name)
136
- ]
137
-
138
- # Adds in the dependencies of each object used in the query (i.e. relationship etc.)
139
- if len(cd_filt) > 0:
140
- subset = cd_filt[
141
- ["Referenced Object Type", "Referenced Table", "Referenced Object"]
109
+ for dax in dax_string:
110
+ # Escape quotes in dax
111
+ dax = dax.replace('"', '""')
112
+ final_query = f"""
113
+ EVALUATE
114
+ VAR source_query = "{dax}"
115
+ VAR all_dependencies = SELECTCOLUMNS(
116
+ INFO.CALCDEPENDENCY("QUERY", source_query),
117
+ "Referenced Object Type",[REFERENCED_OBJECT_TYPE],
118
+ "Referenced Table", [REFERENCED_TABLE],
119
+ "Referenced Object", [REFERENCED_OBJECT]
120
+ )
121
+ RETURN all_dependencies
122
+ """
123
+ dep = fabric.evaluate_dax(
124
+ dataset=dataset, workspace=workspace, dax_string=final_query
125
+ )
126
+
127
+ # Clean up column names and values (remove outside square brackets, underscorees in object type)
128
+ dep.columns = dep.columns.map(lambda x: x[1:-1])
129
+ dep["Referenced Object Type"] = (
130
+ dep["Referenced Object Type"].str.replace("_", " ").str.title()
131
+ )
132
+
133
+ # Dataframe df will contain the output of all dependencies of the objects used in the query
134
+ df = dep.copy()
135
+
136
+ for _, r in dep.iterrows():
137
+ ot = r["Referenced Object Type"]
138
+ object_name = r["Referenced Object"]
139
+ table_name = r["Referenced Table"]
140
+ cd_filt = cd[
141
+ (cd["Object Type"] == ot)
142
+ & (cd["Object Name"] == object_name)
143
+ & (cd["Table Name"] == table_name)
142
144
  ]
143
- df = pd.concat([df, subset], ignore_index=True)
144
-
145
- df.columns = df.columns.map(lambda x: x.replace("Referenced ", ""))
146
- # Remove duplicates
147
- df = df.drop_duplicates().reset_index(drop=True)
148
- # Only show columns and remove the rownumber column
149
- df = df[
150
- (df["Object Type"].isin(["Column", "Calc Column"]))
151
- & (~df["Object"].str.startswith("RowNumber-"))
145
+
146
+ # Adds in the dependencies of each object used in the query (i.e. relationship etc.)
147
+ if len(cd_filt) > 0:
148
+ subset = cd_filt[
149
+ ["Referenced Object Type", "Referenced Table", "Referenced Object"]
150
+ ]
151
+ df = pd.concat([df, subset], ignore_index=True)
152
+
153
+ df.columns = df.columns.map(lambda x: x.replace("Referenced ", ""))
154
+ final_df = pd.concat([df, final_df], ignore_index=True)
155
+
156
+ final_df = final_df[
157
+ (final_df["Object Type"].isin(["Column", "Calc Column"]))
158
+ & (~final_df["Object"].str.startswith("RowNumber-"))
152
159
  ]
160
+ final_df = final_df.drop_duplicates().reset_index(drop=True)
161
+ final_df = final_df.rename(columns={"Table": "Table Name", "Object": "Column Name"})
162
+ final_df.drop(columns=["Object Type"], inplace=True)
163
+
164
+ if not show_vertipaq_stats:
165
+ return final_df
153
166
 
154
167
  # Get vertipaq stats, filter to just the objects in the df dataframe
155
- df["Full Object"] = format_dax_object_name(df["Table"], df["Object"])
168
+ final_df["Full Object"] = format_dax_object_name(
169
+ final_df["Table Name"], final_df["Column Name"]
170
+ )
156
171
  dfC = fabric.list_columns(dataset=dataset, workspace=workspace, extended=True)
157
172
  dfC["Full Object"] = format_dax_object_name(dfC["Table Name"], dfC["Column Name"])
158
173
 
159
- dfC_filtered = dfC[dfC["Full Object"].isin(df["Full Object"].values)][
174
+ dfC_filtered = dfC[dfC["Full Object"].isin(final_df["Full Object"].values)][
160
175
  [
161
176
  "Table Name",
162
177
  "Column Name",
@@ -2,7 +2,7 @@ import sempy.fabric as fabric
2
2
  import pandas as pd
3
3
  import json
4
4
  import os
5
- from typing import Optional
5
+ from typing import Optional, List
6
6
  from sempy_labs._helper_functions import (
7
7
  resolve_lakehouse_name,
8
8
  resolve_workspace_name_and_id,
@@ -329,8 +329,6 @@ def get_semantic_model_bim(
329
329
  """
330
330
  Extracts the Model.bim file for a given semantic model.
331
331
 
332
- This is a wrapper function for the following API: `Items - Get Semantic Model Definition <https://learn.microsoft.com/rest/api/fabric/semanticmodel/items/get-semantic-model-definition>`_.
333
-
334
332
  Parameters
335
333
  ----------
336
334
  dataset : str
@@ -352,20 +350,9 @@ def get_semantic_model_bim(
352
350
  The Model.bim file for the semantic model.
353
351
  """
354
352
 
355
- (workspace, workspace_id) = resolve_workspace_name_and_id(workspace)
356
-
357
- fmt = "TMSL"
358
- client = fabric.FabricRestClient()
359
- dataset_id = resolve_dataset_id(dataset=dataset, workspace=workspace)
360
- response = client.post(
361
- f"/v1/workspaces/{workspace_id}/semanticModels/{dataset_id}/getDefinition?format={fmt}",
353
+ bimJson = get_semantic_model_definition(
354
+ dataset=dataset, workspace=workspace, format="TMSL", return_dataframe=False
362
355
  )
363
- result = lro(client, response).json()
364
- df_items = pd.json_normalize(result["definition"]["parts"])
365
- df_items_filt = df_items[df_items["path"] == "model.bim"]
366
- payload = df_items_filt["payload"].iloc[0]
367
- bimFile = _decode_b64(payload)
368
- bimJson = json.loads(bimFile)
369
356
 
370
357
  if save_to_file_name is not None:
371
358
  if not lakehouse_attached():
@@ -384,12 +371,80 @@ def get_semantic_model_bim(
384
371
  with open(filePath, "w") as json_file:
385
372
  json.dump(bimJson, json_file, indent=4)
386
373
  print(
387
- f"{icons.green_dot} The .bim file for the '{dataset}' semantic model has been saved to the '{lakehouse}' in this location: '{filePath}'.\n\n"
374
+ f"{icons.green_dot} The {fileExt} file for the '{dataset}' semantic model has been saved to the '{lakehouse}' in this location: '{filePath}'.\n\n"
388
375
  )
389
376
 
390
377
  return bimJson
391
378
 
392
379
 
380
+ def get_semantic_model_definition(
381
+ dataset: str,
382
+ format: str = "TMSL",
383
+ workspace: Optional[str] = None,
384
+ return_dataframe: bool = True,
385
+ ) -> pd.DataFrame | dict | List:
386
+ """
387
+ Extracts the semantic model definition.
388
+
389
+ This is a wrapper function for the following API: `Items - Get Semantic Model Definition <https://learn.microsoft.com/rest/api/fabric/semanticmodel/items/get-semantic-model-definition>`_.
390
+
391
+ Parameters
392
+ ----------
393
+ dataset : str
394
+ Name of the semantic model.
395
+ format : str, default="TMSL"
396
+ The output format. Valid options are "TMSL" or "TMDL". "TMSL" returns the .bim file whereas "TMDL" returns the collection of TMDL files. Can also enter 'bim' for the TMSL version.
397
+ workspace : str, default=None
398
+ The Fabric workspace name in which the semantic model resides.
399
+ Defaults to None which resolves to the workspace of the attached lakehouse
400
+ or if no lakehouse attached, resolves to the workspace of the notebook.
401
+ return_dataframe : bool, default=True
402
+ If True, returns a dataframe.
403
+ If False, returns the .bim file for TMSL format. Returns a list of the TMDL files (decoded) for TMDL format.
404
+
405
+ Returns
406
+ -------
407
+ pandas.DataFrame | dict | List
408
+ A pandas dataframe with the semantic model definition or the file or files comprising the semantic model definition.
409
+ """
410
+
411
+ valid_formats = ["TMSL", "TMDL"]
412
+
413
+ format = format.upper()
414
+ if format == "BIM":
415
+ format = "TMSL"
416
+ if format not in valid_formats:
417
+ raise ValueError(
418
+ f"{icons.red_dot} Invalid format. Valid options: {valid_formats}."
419
+ )
420
+
421
+ (workspace, workspace_id) = resolve_workspace_name_and_id(workspace)
422
+
423
+ client = fabric.FabricRestClient()
424
+ dataset_id = resolve_dataset_id(dataset=dataset, workspace=workspace)
425
+ response = client.post(
426
+ f"/v1/workspaces/{workspace_id}/semanticModels/{dataset_id}/getDefinition?format={format}",
427
+ )
428
+ result = lro(client, response).json()
429
+
430
+ files = result["definition"]["parts"]
431
+
432
+ if return_dataframe:
433
+ return pd.json_normalize(files)
434
+ elif format == "TMSL":
435
+ payload = next(
436
+ (part["payload"] for part in files if part["path"] == "model.bim"), None
437
+ )
438
+ return json.loads(_decode_b64(payload))
439
+ else:
440
+ decoded_parts = [
441
+ {"file_name": part["path"], "content": _decode_b64(part["payload"])}
442
+ for part in files
443
+ ]
444
+
445
+ return decoded_parts
446
+
447
+
393
448
  def get_semantic_model_size(dataset: str, workspace: Optional[str] = None):
394
449
 
395
450
  workspace = fabric.resolve_workspace_name(workspace)
@@ -82,7 +82,7 @@ def run_model_bpa_bulk(
82
82
  if isinstance(workspace, str):
83
83
  workspace = [workspace]
84
84
 
85
- dfW = fabric.list_workspaces()
85
+ dfW = fabric.list_workspaces("type ne 'AdminInsights'")
86
86
  if workspace is None:
87
87
  dfW_filt = dfW.copy()
88
88
  else:
@@ -150,7 +150,7 @@ def run_model_bpa_bulk(
150
150
 
151
151
  if df.empty:
152
152
  df = bpa_df
153
- if not bpa_df.empty:
153
+ elif not bpa_df.empty:
154
154
  df = pd.concat([df, bpa_df], ignore_index=True)
155
155
  print(
156
156
  f"{icons.green_dot} Collected Model BPA stats for the '{dataset_name}' semantic model within the '{wksp}' workspace."
@@ -198,7 +198,11 @@ def get_model_calc_dependencies(
198
198
  incomplete_rows = df[df["Done"] == False]
199
199
  for _, row in incomplete_rows.iterrows():
200
200
  referenced_full_name = row["Referenced Full Object Name"]
201
- dep_filt = dep[dep["Full Object Name"] == referenced_full_name]
201
+ referenced_object_type = row["Referenced Object Type"]
202
+ dep_filt = dep[
203
+ (dep["Full Object Name"] == referenced_full_name)
204
+ & (dep["Object Type"] == referenced_object_type)
205
+ ]
202
206
  # Expand dependencies and update 'Done' status as needed
203
207
  new_rows = []
204
208
  for _, dependency in dep_filt.iterrows():