semantic-link-labs 0.9.6__tar.gz → 0.9.7__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 (231) hide show
  1. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/PKG-INFO +7 -5
  2. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/README.md +3 -2
  3. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/docs/source/conf.py +1 -1
  4. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/environment.yml +1 -1
  5. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/pyproject.toml +2 -2
  6. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/semantic_link_labs.egg-info/PKG-INFO +7 -5
  7. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/semantic_link_labs.egg-info/SOURCES.txt +4 -2
  8. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/semantic_link_labs.egg-info/requires.txt +1 -1
  9. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/__init__.py +4 -0
  10. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_ai.py +3 -1
  11. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_capacities.py +0 -1
  12. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_dax_query_view.py +2 -0
  13. semantic_link_labs-0.9.7/src/sempy_labs/_delta_analyzer_history.py +298 -0
  14. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_helper_functions.py +171 -15
  15. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_icons.py +6 -6
  16. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_list_functions.py +3 -1
  17. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_model_bpa_bulk.py +10 -11
  18. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_model_bpa_rules.py +1 -1
  19. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/_basic_functions.py +28 -2
  20. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/_reports.py +1 -1
  21. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/_scanner.py +0 -2
  22. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/_tenant.py +8 -3
  23. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/directlake/_generate_shared_expression.py +9 -1
  24. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/directlake/_update_directlake_model_lakehouse_connection.py +82 -36
  25. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/directlake/_update_directlake_partition_entity.py +3 -0
  26. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/graph/_groups.py +6 -0
  27. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/graph/_teams.py +2 -0
  28. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/graph/_users.py +4 -0
  29. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/lakehouse/__init__.py +12 -3
  30. semantic_link_labs-0.9.7/src/sempy_labs/lakehouse/_blobs.py +231 -0
  31. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/lakehouse/_shortcuts.py +22 -3
  32. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/migration/_direct_lake_to_import.py +47 -10
  33. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/__init__.py +4 -0
  34. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_report_functions.py +3 -3
  35. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_report_helper.py +17 -5
  36. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_reportwrapper.py +17 -8
  37. semantic_link_labs-0.9.7/src/sempy_labs/report/_save_report.py +147 -0
  38. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/tom/_model.py +154 -23
  39. semantic_link_labs-0.9.6/tests/test_tom.py +0 -39
  40. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  41. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  42. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/.github/ISSUE_TEMPLATE/issue--question---advice-needed.md +0 -0
  43. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/.github/workflows/build.yaml +0 -0
  44. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/.github/workflows/codeql.yaml +0 -0
  45. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/.gitignore +0 -0
  46. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/.readthedocs.yaml +0 -0
  47. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/.vscode/settings.json +0 -0
  48. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/CODE_OF_CONDUCT.md +0 -0
  49. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/LICENSE +0 -0
  50. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/SECURITY.md +0 -0
  51. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/SUPPORT.md +0 -0
  52. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/docs/Makefile +0 -0
  53. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/docs/make.bat +0 -0
  54. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/docs/requirements.txt +0 -0
  55. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/docs/source/index.rst +0 -0
  56. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/docs/source/modules.rst +0 -0
  57. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/notebooks/Best Practice Analyzer Report.ipynb +0 -0
  58. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/notebooks/Capacity Migration.ipynb +0 -0
  59. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/notebooks/Delta Analyzer.ipynb +0 -0
  60. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/notebooks/Migration to Direct Lake.ipynb +0 -0
  61. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/notebooks/Model Optimization.ipynb +0 -0
  62. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/notebooks/Query Scale Out.ipynb +0 -0
  63. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/notebooks/Report Analysis.ipynb +0 -0
  64. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/notebooks/SQL.ipynb +0 -0
  65. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/notebooks/Semantic Model Management.ipynb +0 -0
  66. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/notebooks/Semantic Model Refresh.ipynb +0 -0
  67. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/notebooks/Service Principal.ipynb +0 -0
  68. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/notebooks/Tabular Object Model.ipynb +0 -0
  69. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/setup.cfg +0 -0
  70. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/semantic_link_labs.egg-info/dependency_links.txt +0 -0
  71. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/semantic_link_labs.egg-info/top_level.txt +0 -0
  72. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_authentication.py +0 -0
  73. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_am-ET.po +0 -0
  74. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_ar-AE.po +0 -0
  75. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_bg-BG.po +0 -0
  76. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_ca-ES.po +0 -0
  77. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_cs-CZ.po +0 -0
  78. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_da-DK.po +0 -0
  79. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_de-DE.po +0 -0
  80. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_el-GR.po +0 -0
  81. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_es-ES.po +0 -0
  82. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_fa-IR.po +0 -0
  83. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_fi-FI.po +0 -0
  84. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_fr-FR.po +0 -0
  85. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_ga-IE.po +0 -0
  86. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_he-IL.po +0 -0
  87. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_hi-IN.po +0 -0
  88. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_hu-HU.po +0 -0
  89. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_id-ID.po +0 -0
  90. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_is-IS.po +0 -0
  91. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_it-IT.po +0 -0
  92. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_ja-JP.po +0 -0
  93. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_ko-KR.po +0 -0
  94. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_mt-MT.po +0 -0
  95. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_nl-NL.po +0 -0
  96. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_pl-PL.po +0 -0
  97. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_pt-BR.po +0 -0
  98. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_pt-PT.po +0 -0
  99. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_ro-RO.po +0 -0
  100. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_ru-RU.po +0 -0
  101. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_sk-SK.po +0 -0
  102. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_sl-SL.po +0 -0
  103. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_sv-SE.po +0 -0
  104. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_ta-IN.po +0 -0
  105. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_te-IN.po +0 -0
  106. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_th-TH.po +0 -0
  107. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_tr-TR.po +0 -0
  108. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_uk-UA.po +0 -0
  109. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_zh-CN.po +0 -0
  110. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_bpa_translation/_model/_translations_zu-ZA.po +0 -0
  111. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_capacity_migration.py +0 -0
  112. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_clear_cache.py +0 -0
  113. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_connections.py +0 -0
  114. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_dashboards.py +0 -0
  115. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_data_pipelines.py +0 -0
  116. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_dataflows.py +0 -0
  117. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_dax.py +0 -0
  118. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_delta_analyzer.py +0 -0
  119. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_deployment_pipelines.py +0 -0
  120. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_documentation.py +0 -0
  121. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_environments.py +0 -0
  122. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_eventhouses.py +0 -0
  123. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_eventstreams.py +0 -0
  124. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_external_data_shares.py +0 -0
  125. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_gateways.py +0 -0
  126. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_generate_semantic_model.py +0 -0
  127. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_git.py +0 -0
  128. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_graphQL.py +0 -0
  129. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_job_scheduler.py +0 -0
  130. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_kql_databases.py +0 -0
  131. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_kql_querysets.py +0 -0
  132. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_managed_private_endpoints.py +0 -0
  133. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_mirrored_databases.py +0 -0
  134. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_mirrored_warehouses.py +0 -0
  135. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_ml_experiments.py +0 -0
  136. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_ml_models.py +0 -0
  137. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_model_auto_build.py +0 -0
  138. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_model_bpa.py +0 -0
  139. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_model_dependencies.py +0 -0
  140. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_mounted_data_factories.py +0 -0
  141. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_notebooks.py +0 -0
  142. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_one_lake_integration.py +0 -0
  143. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_query_scale_out.py +0 -0
  144. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_refresh_semantic_model.py +0 -0
  145. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_semantic_models.py +0 -0
  146. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_spark.py +0 -0
  147. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_sql.py +0 -0
  148. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_sqldatabase.py +0 -0
  149. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_translations.py +0 -0
  150. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_utils.py +0 -0
  151. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_vertipaq.py +0 -0
  152. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_warehouses.py +0 -0
  153. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_workloads.py +0 -0
  154. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_workspace_identity.py +0 -0
  155. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/_workspaces.py +0 -0
  156. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/__init__.py +0 -0
  157. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/_activities.py +0 -0
  158. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/_apps.py +0 -0
  159. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/_artifacts.py +0 -0
  160. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/_capacities.py +0 -0
  161. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/_datasets.py +0 -0
  162. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/_domains.py +0 -0
  163. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/_external_data_share.py +0 -0
  164. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/_git.py +0 -0
  165. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/_items.py +0 -0
  166. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/_shared.py +0 -0
  167. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/_users.py +0 -0
  168. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/admin/_workspaces.py +0 -0
  169. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/directlake/__init__.py +0 -0
  170. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/directlake/_directlake_schema_compare.py +0 -0
  171. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/directlake/_directlake_schema_sync.py +0 -0
  172. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/directlake/_dl_helper.py +0 -0
  173. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/directlake/_get_directlake_lakehouse.py +0 -0
  174. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/directlake/_get_shared_expression.py +0 -0
  175. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/directlake/_guardrails.py +0 -0
  176. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/directlake/_list_directlake_model_calc_tables.py +0 -0
  177. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/directlake/_show_unsupported_directlake_objects.py +0 -0
  178. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/directlake/_warm_cache.py +0 -0
  179. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/graph/__init__.py +0 -0
  180. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/lakehouse/_get_lakehouse_columns.py +0 -0
  181. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/lakehouse/_get_lakehouse_tables.py +0 -0
  182. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/lakehouse/_lakehouse.py +0 -0
  183. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/migration/__init__.py +0 -0
  184. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/migration/_create_pqt_file.py +0 -0
  185. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/migration/_migrate_calctables_to_lakehouse.py +0 -0
  186. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/migration/_migrate_calctables_to_semantic_model.py +0 -0
  187. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/migration/_migrate_model_objects_to_semantic_model.py +0 -0
  188. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/migration/_migrate_tables_columns_to_semantic_model.py +0 -0
  189. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/migration/_migration_validation.py +0 -0
  190. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/migration/_refresh_calc_tables.py +0 -0
  191. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_BPAReportTemplate.json +0 -0
  192. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/.pbi/localSettings.json +0 -0
  193. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/.platform +0 -0
  194. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/StaticResources/SharedResources/BaseThemes/CY24SU06.json +0 -0
  195. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/page.json +0 -0
  196. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/1b08bce3bebabb0a27a8/visual.json +0 -0
  197. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/2f22ddb70c301693c165/visual.json +0 -0
  198. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/3b1182230aa6c600b43a/visual.json +0 -0
  199. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/58577ba6380c69891500/visual.json +0 -0
  200. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/a2a8fa5028b3b776c96c/visual.json +0 -0
  201. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/adfd47ef30652707b987/visual.json +0 -0
  202. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/b6a80ee459e716e170b1/visual.json +0 -0
  203. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/ce3130a721c020cc3d81/visual.json +0 -0
  204. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/page.json +0 -0
  205. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/visuals/66e60dfb526437cd78d1/visual.json +0 -0
  206. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/page.json +0 -0
  207. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/07deb8bce824e1be37d7/visual.json +0 -0
  208. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0b1c68838818b32ad03b/visual.json +0 -0
  209. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0c171de9d2683d10b930/visual.json +0 -0
  210. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0efa01be0510e40a645e/visual.json +0 -0
  211. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/6bf2f0eb830ab53cc668/visual.json +0 -0
  212. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/88d8141cb8500b60030c/visual.json +0 -0
  213. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/a753273590beed656a03/visual.json +0 -0
  214. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/b8fdc82cddd61ac447bc/visual.json +0 -0
  215. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/page.json +0 -0
  216. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/visuals/ce8532a7e25020271077/visual.json +0 -0
  217. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/pages/pages.json +0 -0
  218. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/report.json +0 -0
  219. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition/version.json +0 -0
  220. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_bpareporttemplate/definition.pbir +0 -0
  221. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_download_report.py +0 -0
  222. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_export_report.py +0 -0
  223. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_generate_report.py +0 -0
  224. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_paginated.py +0 -0
  225. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_report_bpa.py +0 -0
  226. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_report_bpa_rules.py +0 -0
  227. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_report_list_functions.py +0 -0
  228. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/report/_report_rebind.py +0 -0
  229. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/src/sempy_labs/tom/__init__.py +0 -0
  230. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/tests/__init__.py +0 -0
  231. {semantic_link_labs-0.9.6 → semantic_link_labs-0.9.7}/tests/test_friendly_case.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: semantic-link-labs
3
- Version: 0.9.6
3
+ Version: 0.9.7
4
4
  Summary: Semantic Link Labs for Microsoft Fabric
5
5
  Author: Microsoft Corporation
6
6
  License: MIT License
@@ -15,18 +15,19 @@ Classifier: Framework :: Jupyter
15
15
  Requires-Python: <3.12,>=3.10
16
16
  Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
- Requires-Dist: semantic-link-sempy>=0.8.5
18
+ Requires-Dist: semantic-link-sempy>=0.9.3
19
19
  Requires-Dist: anytree
20
20
  Requires-Dist: powerbiclient
21
21
  Requires-Dist: polib
22
22
  Requires-Dist: jsonpath_ng
23
23
  Provides-Extra: test
24
24
  Requires-Dist: pytest>=8.2.1; extra == "test"
25
+ Dynamic: license-file
25
26
 
26
27
  # Semantic Link Labs
27
28
 
28
29
  [![PyPI version](https://badge.fury.io/py/semantic-link-labs.svg)](https://badge.fury.io/py/semantic-link-labs)
29
- [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.9.6&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
30
+ [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.9.7&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
30
31
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
31
32
  [![Downloads](https://static.pepy.tech/badge/semantic-link-labs)](https://pepy.tech/project/semantic-link-labs)
32
33
 
@@ -148,6 +149,7 @@ An even better way to ensure the semantic-link-labs library is available in your
148
149
  2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
149
150
 
150
151
  ## Version History
152
+ * [0.9.7](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.7) (April 1, 2025)
151
153
  * [0.9.6](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.6) (March 12, 2025)
152
154
  * [0.9.5](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.5) (March 7, 2025)
153
155
  * [0.9.4](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.4) (February 27, 2025)
@@ -309,7 +311,7 @@ We use [black](github.com/psf/black) formatting as a code formatting standard. M
309
311
 
310
312
  Run this code to install black
311
313
  ```cli
312
- pip install black
314
+ pip install black==25.1.0
313
315
  ```
314
316
 
315
317
  Run this code to format your code using black
@@ -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.9.6&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
4
+ [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.9.7&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
 
@@ -123,6 +123,7 @@ An even better way to ensure the semantic-link-labs library is available in your
123
123
  2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
124
124
 
125
125
  ## Version History
126
+ * [0.9.7](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.7) (April 1, 2025)
126
127
  * [0.9.6](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.6) (March 12, 2025)
127
128
  * [0.9.5](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.5) (March 7, 2025)
128
129
  * [0.9.4](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.4) (February 27, 2025)
@@ -284,7 +285,7 @@ We use [black](github.com/psf/black) formatting as a code formatting standard. M
284
285
 
285
286
  Run this code to install black
286
287
  ```cli
287
- pip install black
288
+ pip install black==25.1.0
288
289
  ```
289
290
 
290
291
  Run this code to format your code using black
@@ -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.9.6'
16
+ release = '0.9.7'
17
17
 
18
18
  # -- General configuration ---------------------------------------------------
19
19
  # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
@@ -6,7 +6,7 @@ dependencies:
6
6
  - pytest-cov
7
7
  - pytest-mock
8
8
  - pip:
9
- - semantic-link-sempy>=0.8.5
9
+ - semantic-link-sempy>=0.9.3
10
10
  - azure-identity==1.7.1
11
11
  - azure-storage-blob>=12.9.0
12
12
  - pandas-stubs
@@ -7,7 +7,7 @@ name="semantic-link-labs"
7
7
  authors = [
8
8
  { name = "Microsoft Corporation" },
9
9
  ]
10
- version="0.9.6"
10
+ version="0.9.7"
11
11
  description="Semantic Link Labs for Microsoft Fabric"
12
12
  readme="README.md"
13
13
  requires-python=">=3.10,<3.12"
@@ -23,7 +23,7 @@ classifiers = [
23
23
  license= { text = "MIT License" }
24
24
 
25
25
  dependencies = [
26
- "semantic-link-sempy>=0.8.5",
26
+ "semantic-link-sempy>=0.9.3",
27
27
  "anytree",
28
28
  "powerbiclient",
29
29
  "polib",
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: semantic-link-labs
3
- Version: 0.9.6
3
+ Version: 0.9.7
4
4
  Summary: Semantic Link Labs for Microsoft Fabric
5
5
  Author: Microsoft Corporation
6
6
  License: MIT License
@@ -15,18 +15,19 @@ Classifier: Framework :: Jupyter
15
15
  Requires-Python: <3.12,>=3.10
16
16
  Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
- Requires-Dist: semantic-link-sempy>=0.8.5
18
+ Requires-Dist: semantic-link-sempy>=0.9.3
19
19
  Requires-Dist: anytree
20
20
  Requires-Dist: powerbiclient
21
21
  Requires-Dist: polib
22
22
  Requires-Dist: jsonpath_ng
23
23
  Provides-Extra: test
24
24
  Requires-Dist: pytest>=8.2.1; extra == "test"
25
+ Dynamic: license-file
25
26
 
26
27
  # Semantic Link Labs
27
28
 
28
29
  [![PyPI version](https://badge.fury.io/py/semantic-link-labs.svg)](https://badge.fury.io/py/semantic-link-labs)
29
- [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.9.6&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
30
+ [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.9.7&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
30
31
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
31
32
  [![Downloads](https://static.pepy.tech/badge/semantic-link-labs)](https://pepy.tech/project/semantic-link-labs)
32
33
 
@@ -148,6 +149,7 @@ An even better way to ensure the semantic-link-labs library is available in your
148
149
  2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
149
150
 
150
151
  ## Version History
152
+ * [0.9.7](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.7) (April 1, 2025)
151
153
  * [0.9.6](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.6) (March 12, 2025)
152
154
  * [0.9.5](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.5) (March 7, 2025)
153
155
  * [0.9.4](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.4) (February 27, 2025)
@@ -309,7 +311,7 @@ We use [black](github.com/psf/black) formatting as a code formatting standard. M
309
311
 
310
312
  Run this code to install black
311
313
  ```cli
312
- pip install black
314
+ pip install black==25.1.0
313
315
  ```
314
316
 
315
317
  Run this code to format your code using black
@@ -49,6 +49,7 @@ src/sempy_labs/_dataflows.py
49
49
  src/sempy_labs/_dax.py
50
50
  src/sempy_labs/_dax_query_view.py
51
51
  src/sempy_labs/_delta_analyzer.py
52
+ src/sempy_labs/_delta_analyzer_history.py
52
53
  src/sempy_labs/_deployment_pipelines.py
53
54
  src/sempy_labs/_documentation.py
54
55
  src/sempy_labs/_environments.py
@@ -164,6 +165,7 @@ src/sempy_labs/graph/_groups.py
164
165
  src/sempy_labs/graph/_teams.py
165
166
  src/sempy_labs/graph/_users.py
166
167
  src/sempy_labs/lakehouse/__init__.py
168
+ src/sempy_labs/lakehouse/_blobs.py
167
169
  src/sempy_labs/lakehouse/_get_lakehouse_columns.py
168
170
  src/sempy_labs/lakehouse/_get_lakehouse_tables.py
169
171
  src/sempy_labs/lakehouse/_lakehouse.py
@@ -190,6 +192,7 @@ src/sempy_labs/report/_report_helper.py
190
192
  src/sempy_labs/report/_report_list_functions.py
191
193
  src/sempy_labs/report/_report_rebind.py
192
194
  src/sempy_labs/report/_reportwrapper.py
195
+ src/sempy_labs/report/_save_report.py
193
196
  src/sempy_labs/report/_bpareporttemplate/.platform
194
197
  src/sempy_labs/report/_bpareporttemplate/definition.pbir
195
198
  src/sempy_labs/report/_bpareporttemplate/.pbi/localSettings.json
@@ -222,5 +225,4 @@ src/sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/v
222
225
  src/sempy_labs/tom/__init__.py
223
226
  src/sempy_labs/tom/_model.py
224
227
  tests/__init__.py
225
- tests/test_friendly_case.py
226
- tests/test_tom.py
228
+ tests/test_friendly_case.py
@@ -1,4 +1,4 @@
1
- semantic-link-sempy>=0.8.5
1
+ semantic-link-sempy>=0.9.3
2
2
  anytree
3
3
  powerbiclient
4
4
  polib
@@ -1,3 +1,6 @@
1
+ from sempy_labs._delta_analyzer_history import (
2
+ delta_analyzer_history,
3
+ )
1
4
  from sempy_labs._dax_query_view import (
2
5
  generate_dax_query_view_url,
3
6
  )
@@ -554,4 +557,5 @@ __all__ = [
554
557
  "create_sql_database",
555
558
  "delete_sql_database",
556
559
  "list_sql_databases",
560
+ "delta_analyzer_history",
557
561
  ]
@@ -216,7 +216,9 @@ def generate_aggs(
216
216
  f"{icons.green_dot} The '{aggLakeTName}' table has been created/updated in the lakehouse."
217
217
 
218
218
  # Create/update semantic model agg table
219
- tom_server = fabric.create_tom_server(readonly=False, workspace=workspace)
219
+ tom_server = fabric.create_tom_server(
220
+ dataset=dataset, readonly=False, workspace=workspace
221
+ )
220
222
  m = tom_server.Databases.GetByName(dataset).Model
221
223
  print(f"\n{icons.in_progress} Updating the '{dataset}' semantic model...")
222
224
  dfC_agg = dfC[dfC["Table Name"] == aggTableName]
@@ -1,4 +1,3 @@
1
- import sempy.fabric as fabric
2
1
  from typing import Optional, List, Tuple
3
2
  from sempy._utils._log import log
4
3
  import sempy_labs._icons as icons
@@ -5,11 +5,13 @@ from sempy_labs._helper_functions import (
5
5
  _get_fabric_context_setting,
6
6
  resolve_workspace_id,
7
7
  )
8
+ from sempy._utils._log import log
8
9
  import gzip
9
10
  import base64
10
11
  import urllib.parse
11
12
 
12
13
 
14
+ @log
13
15
  def generate_dax_query_view_url(
14
16
  dataset: str | UUID, dax_string: str, workspace: Optional[str | UUID] = None
15
17
  ):
@@ -0,0 +1,298 @@
1
+ import pandas as pd
2
+ from typing import Optional
3
+ import pyarrow.parquet as pq
4
+ from sempy_labs._helper_functions import (
5
+ create_abfss_path,
6
+ resolve_workspace_id,
7
+ resolve_lakehouse_id,
8
+ _mount,
9
+ )
10
+ from sempy._utils._log import log
11
+ from tqdm.auto import tqdm
12
+ from uuid import UUID
13
+ from datetime import datetime
14
+
15
+
16
+ @log
17
+ def delta_analyzer_history(
18
+ table_name: str,
19
+ schema: Optional[str] = None,
20
+ lakehouse: Optional[str | UUID] = None,
21
+ workspace: Optional[str | UUID] = None,
22
+ ) -> pd.DataFrame:
23
+ """
24
+ Analyzes the transaction log for a specified delta table and shows the results in dataframe. One row per data modification operation.
25
+
26
+ Keeps track on the number of Parquet files, rowgroups, file size and #rows impacted by each change.
27
+
28
+ Incremental Framing effect: 100% = highly effective, 0% = no benefit at all
29
+
30
+ Parameters
31
+ ----------
32
+ table_name : str
33
+ The delta table name.
34
+ schema : str, default=None
35
+ The schema name of the delta table.
36
+ lakehouse : str | uuid.UUID, default=None
37
+ The Fabric lakehouse name or ID.
38
+ Defaults to None which resolves to the lakehouse attached to the notebook.
39
+ workspace : str | uuid.UUID, default=None
40
+ The Fabric workspace name or ID used by the lakehouse.
41
+ Defaults to None which resolves to the workspace of the attached lakehouse
42
+ or if no lakehouse attached, resolves to the workspace of the notebook.
43
+
44
+ Returns
45
+ -------
46
+ pandas.DataFrame
47
+ Displays a gantt visual showing a timeline for individual parquet files.
48
+ """
49
+
50
+ import notebookutils
51
+ from IPython.display import display, HTML
52
+
53
+ workspace_id = resolve_workspace_id(workspace=workspace)
54
+ lakehouse_id = resolve_lakehouse_id(lakehouse=lakehouse, workspace=workspace)
55
+
56
+ table_path = create_abfss_path(lakehouse_id, workspace_id, table_name, schema)
57
+ local_path = _mount(lakehouse=lakehouse, workspace=workspace)
58
+ table_path_local = f"{local_path}/Tables/{table_name}"
59
+ delta_table_path = f"{table_path}/_delta_log"
60
+
61
+ files = notebookutils.fs.ls(delta_table_path)
62
+ json_files = [file.name for file in files if file.name.endswith(".json")]
63
+
64
+ element_version = total_size = total_rows = total_files = total_rowgroups = 0
65
+ changes_array = []
66
+ parquet_files = []
67
+ my_date_time_format = "%Y-%m-%d %H:%M:%S.%f"
68
+ now_to_epoch = datetime.now().strftime(my_date_time_format)
69
+ num_latest_files = len(json_files)
70
+
71
+ for idx, file in enumerate(bar := tqdm(json_files), start=1):
72
+ bar.set_description(
73
+ f"Analyzing the '{file}' parquet file ({idx}/{num_latest_files})..."
74
+ )
75
+
76
+ change_timestamp = datetime.strptime(
77
+ "2001-01-01 12:00:00.000", my_date_time_format
78
+ )
79
+ df = pd.read_json(f"{delta_table_path}/{file}", lines=True)
80
+
81
+ rows_added = size_added = rows_deleted = size_deleted = files_added = (
82
+ files_removed
83
+ ) = row_groups_added = row_groups_removed = 0
84
+ total_files_before_change = total_files
85
+ total_row_groups_before_change = total_rowgroups
86
+ operation = predicate = tags = ""
87
+
88
+ for _, row in df.iterrows():
89
+ add_row = row.get("add")
90
+ remove_row = row.get("remove")
91
+ commit_row = row.get("commitInfo")
92
+
93
+ if isinstance(add_row, dict):
94
+ file_name = add_row["path"]
95
+ fs_filename = f"{table_path}/{file_name}"
96
+ size_added += add_row["size"]
97
+ files_added += 1
98
+ filerows_added = 0
99
+
100
+ if notebookutils.fs.exists(fs_filename):
101
+ parquet_file = pq.ParquetFile(table_path_local + f"/{file_name}")
102
+ for i in range(parquet_file.num_row_groups):
103
+ row_group = parquet_file.metadata.row_group(i)
104
+ num_rows = row_group.num_rows
105
+ filerows_added += num_rows
106
+ rows_added += num_rows
107
+
108
+ row_groups_added += parquet_file.num_row_groups
109
+
110
+ start = str(
111
+ datetime.fromtimestamp(add_row["modificationTime"] / 1000.0)
112
+ )
113
+ parquet_files.append(
114
+ {
115
+ "file": file_name,
116
+ "start": start,
117
+ "end": now_to_epoch,
118
+ "rows": filerows_added,
119
+ "isCurrent": 1,
120
+ }
121
+ )
122
+
123
+ if isinstance(remove_row, dict):
124
+ file_name = remove_row["path"]
125
+ fs_filename = f"{table_path}/{file_name}"
126
+
127
+ if notebookutils.fs.exists(fs_filename):
128
+ parquet_file = pq.ParquetFile(table_path_local + f"/{file_name}")
129
+ for i in range(parquet_file.num_row_groups):
130
+ row_group = parquet_file.metadata.row_group(i)
131
+ num_rows = row_group.num_rows
132
+ rows_deleted += num_rows
133
+
134
+ files_removed += 1
135
+ size_deleted += remove_row.get("size", 0)
136
+ row_groups_removed += parquet_file.num_row_groups
137
+
138
+ result = next(
139
+ (row for row in parquet_files if row["file"] == file_name), None
140
+ )
141
+ if result:
142
+ result.update(
143
+ {
144
+ "isCurrent": 0,
145
+ "end": str(
146
+ datetime.fromtimestamp(
147
+ remove_row["deletionTimestamp"] / 1000.0
148
+ )
149
+ ),
150
+ }
151
+ )
152
+
153
+ if isinstance(commit_row, dict):
154
+ operation = commit_row.get("operation")
155
+ tags = commit_row.get("tags")
156
+ predicate = commit_row.get("operationParameters", {}).get("predicate")
157
+
158
+ if operation == "VACUUM START":
159
+ operation_metrics = commit_row.get("operationMetrics", {})
160
+ total_files -= int(operation_metrics.get("numFilesToDelete", 0))
161
+ total_size -= int(operation_metrics.get("sizeOfDataToDelete", 0))
162
+
163
+ change_timestamp = datetime.fromtimestamp(
164
+ commit_row["timestamp"] / 1000.0
165
+ )
166
+
167
+ total_size += size_added - size_deleted
168
+ total_rows += rows_added - rows_deleted
169
+ total_files += files_added - files_removed
170
+ total_rowgroups += row_groups_added - row_groups_removed
171
+
172
+ incremental_framing_effect = 1
173
+ if size_deleted != 0:
174
+ incremental_framing_effect = (
175
+ int((total_size - size_added * 1.0) / total_size * 100000) / 1000
176
+ )
177
+ # incrementalFramingEffect = round(
178
+ # (totalSize - sizeAdded * 1.0) / totalSize, 4
179
+ # )
180
+
181
+ changes_array.append(
182
+ [
183
+ element_version,
184
+ operation,
185
+ predicate,
186
+ change_timestamp,
187
+ incremental_framing_effect,
188
+ files_added,
189
+ files_removed,
190
+ total_files_before_change - files_removed,
191
+ total_files,
192
+ size_added,
193
+ size_deleted,
194
+ total_size,
195
+ row_groups_added,
196
+ row_groups_removed,
197
+ total_row_groups_before_change - row_groups_removed,
198
+ total_rowgroups,
199
+ rows_added,
200
+ rows_deleted,
201
+ rows_added - rows_deleted,
202
+ total_rows,
203
+ tags,
204
+ ]
205
+ )
206
+
207
+ element_version += 1
208
+
209
+ # /********************************************************************************************************************
210
+ # Display Gantt Chart of files
211
+ # ********************************************************************************************************************/
212
+ spec: str = (
213
+ """{
214
+ "$$schema": 'https://vega.github.io/schema/vega-lite/v2.json',
215
+ "description": "A simple bar chart with ranged data (aka Gantt Chart).",
216
+ "width" : 1024 ,
217
+ "data": {
218
+ "values": %s
219
+ },
220
+ "layer":[
221
+ {"mark": "bar"},
222
+ {"mark": {
223
+ "type": "text",
224
+ "align": "center",
225
+ "baseline": "middle",
226
+ "dx": 40
227
+ },
228
+ "encoding": {
229
+ "text": {"field": "rows", "type": "quantitative", "format":","},
230
+ "color":{
231
+ "condition": {"test": "datum['isCurrent'] == 1", "value": "black"},
232
+ "value": "black"
233
+ }
234
+ }
235
+ }],
236
+ "encoding": {
237
+ "y": {"field": "file", "type": "ordinal","sort": "isCurrent","title":null,"axis":{"labelPadding":15,"labelLimit":360}},
238
+ "x": {"field": "start", "type": "temporal","title":null},
239
+ "x2": {"field": "end", "type": "temporal","title":null},
240
+ "color": {
241
+ "field": "isCurrent",
242
+ "scale": {"range": ["silver", "#ca8861"]}
243
+ }
244
+ }
245
+ }"""
246
+ % (parquet_files)
247
+ )
248
+
249
+ display(
250
+ HTML(
251
+ """
252
+ <!DOCTYPE html>
253
+ <html>
254
+ <head>
255
+ <script src="https://cdn.jsdelivr.net/npm/vega@5"></script>
256
+ <script src="https://cdn.jsdelivr.net/npm/vega-lite@5"></script>
257
+ <script src="https://cdn.jsdelivr.net/npm/vega-embed@6"></script>
258
+ </head>
259
+ <body>
260
+ <div id="vis"></div>
261
+ <script type="text/javascript">
262
+ var spec = """
263
+ + spec
264
+ + """;
265
+ var opt = {"renderer": "canvas", "actions": false};
266
+ vegaEmbed("#vis", spec, opt);
267
+ </script>
268
+ </body>
269
+ </html>"""
270
+ )
271
+ )
272
+
273
+ return pd.DataFrame(
274
+ changes_array,
275
+ columns=[
276
+ "Change Number",
277
+ "Change Type",
278
+ "Predicate",
279
+ "Modification Time",
280
+ "Incremental Effect",
281
+ "Files Added",
282
+ "Files Removed",
283
+ "Files Preserved",
284
+ "Files After Change",
285
+ "Size Added",
286
+ "Sized Removed",
287
+ "Size After Change",
288
+ "Rowgroups Added",
289
+ "Rowgroups Removed",
290
+ "Rowgroups Preserved",
291
+ "Rowgroups After Change",
292
+ "Rows Added",
293
+ "Rows Removed",
294
+ "Rows Delta",
295
+ "Rows After Change",
296
+ "Tags",
297
+ ],
298
+ )