semantic-link-labs 0.8.3__tar.gz → 0.8.4__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 (198) hide show
  1. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/PKG-INFO +33 -8
  2. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/README.md +31 -6
  3. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/docs/source/conf.py +1 -1
  4. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/environment.yml +1 -1
  5. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/notebooks/Capacity Migration.ipynb +1 -1
  6. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/notebooks/Migration to Direct Lake.ipynb +1 -1
  7. semantic_link_labs-0.8.4/notebooks/Model Optimization.ipynb +1 -0
  8. semantic_link_labs-0.8.4/notebooks/SQL.ipynb +1 -0
  9. semantic_link_labs-0.8.4/notebooks/Semantic Model Refresh.ipynb +1 -0
  10. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/pyproject.toml +2 -2
  11. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/semantic_link_labs.egg-info/PKG-INFO +33 -8
  12. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/semantic_link_labs.egg-info/SOURCES.txt +3 -0
  13. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/semantic_link_labs.egg-info/requires.txt +1 -1
  14. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/__init__.py +24 -0
  15. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_am-ET.po +24 -5
  16. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_ar-AE.po +28 -4
  17. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_bg-BG.po +34 -4
  18. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_ca-ES.po +33 -4
  19. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_cs-CZ.po +31 -4
  20. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_da-DK.po +31 -4
  21. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_de-DE.po +34 -4
  22. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_el-GR.po +36 -4
  23. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_es-ES.po +90 -58
  24. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_fa-IR.po +31 -5
  25. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_fi-FI.po +31 -4
  26. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_fr-FR.po +34 -4
  27. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_ga-IE.po +34 -4
  28. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_he-IL.po +28 -4
  29. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_hi-IN.po +32 -4
  30. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_hu-HU.po +32 -4
  31. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_id-ID.po +32 -4
  32. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_is-IS.po +31 -4
  33. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_it-IT.po +34 -4
  34. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_ja-JP.po +24 -4
  35. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_ko-KR.po +72 -56
  36. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_mt-MT.po +34 -4
  37. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_nl-NL.po +34 -4
  38. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_pl-PL.po +95 -71
  39. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_pt-BR.po +32 -4
  40. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_pt-PT.po +32 -4
  41. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_ro-RO.po +33 -4
  42. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_ru-RU.po +34 -4
  43. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_sk-SK.po +31 -4
  44. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_sl-SL.po +32 -4
  45. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_sv-SE.po +32 -4
  46. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_ta-IN.po +32 -4
  47. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_te-IN.po +31 -4
  48. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_th-TH.po +31 -4
  49. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_tr-TR.po +32 -4
  50. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_uk-UA.po +100 -72
  51. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_zh-CN.po +23 -5
  52. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_bpa_translation/_model/_translations_zu-ZA.po +32 -4
  53. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_capacities.py +49 -14
  54. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_capacity_migration.py +1 -7
  55. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_data_pipelines.py +6 -0
  56. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_dataflows.py +4 -0
  57. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_deployment_pipelines.py +13 -7
  58. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_environments.py +6 -0
  59. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_eventhouses.py +6 -0
  60. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_eventstreams.py +6 -0
  61. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_external_data_shares.py +6 -4
  62. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_generate_semantic_model.py +26 -3
  63. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_git.py +14 -14
  64. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_helper_functions.py +172 -0
  65. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_icons.py +55 -22
  66. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_kql_databases.py +6 -0
  67. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_kql_querysets.py +6 -0
  68. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_list_functions.py +1 -1
  69. semantic_link_labs-0.8.4/src/sempy_labs/_managed_private_endpoints.py +166 -0
  70. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_mirrored_warehouses.py +2 -0
  71. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_ml_experiments.py +6 -0
  72. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_ml_models.py +6 -0
  73. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_model_bpa.py +6 -1
  74. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_model_bpa_bulk.py +11 -25
  75. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_model_bpa_rules.py +8 -3
  76. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_notebooks.py +107 -12
  77. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_query_scale_out.py +8 -6
  78. semantic_link_labs-0.8.4/src/sempy_labs/_refresh_semantic_model.py +425 -0
  79. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_spark.py +12 -5
  80. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_translations.py +2 -0
  81. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_vertipaq.py +58 -67
  82. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_warehouses.py +79 -0
  83. semantic_link_labs-0.8.4/src/sempy_labs/_workloads.py +128 -0
  84. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_workspace_identity.py +4 -4
  85. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_workspaces.py +14 -1
  86. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/admin/_basic_functions.py +85 -43
  87. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/admin/_domains.py +18 -18
  88. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/directlake/__init__.py +2 -0
  89. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/directlake/_directlake_schema_sync.py +2 -1
  90. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/directlake/_dl_helper.py +4 -1
  91. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/directlake/_get_shared_expression.py +7 -1
  92. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/directlake/_guardrails.py +2 -1
  93. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/directlake/_show_unsupported_directlake_objects.py +1 -7
  94. semantic_link_labs-0.8.4/src/sempy_labs/directlake/_update_directlake_model_lakehouse_connection.py +149 -0
  95. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/directlake/_update_directlake_partition_entity.py +13 -32
  96. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/lakehouse/_get_lakehouse_tables.py +6 -2
  97. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/lakehouse/_shortcuts.py +4 -0
  98. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/migration/_migrate_calctables_to_lakehouse.py +3 -2
  99. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/migration/_migrate_calctables_to_semantic_model.py +2 -0
  100. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/migration/_migrate_model_objects_to_semantic_model.py +2 -8
  101. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/migration/_migrate_tables_columns_to_semantic_model.py +17 -0
  102. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/migration/_migration_validation.py +2 -0
  103. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/migration/_refresh_calc_tables.py +1 -0
  104. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/__init__.py +4 -1
  105. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_generate_report.py +6 -0
  106. semantic_link_labs-0.8.4/src/sempy_labs/report/_paginated.py +74 -0
  107. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_report_functions.py +6 -0
  108. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_report_rebind.py +2 -0
  109. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/tom/_model.py +64 -33
  110. semantic_link_labs-0.8.3/notebooks/Model Optimization.ipynb +0 -1
  111. semantic_link_labs-0.8.3/notebooks/SQL.ipynb +0 -1
  112. semantic_link_labs-0.8.3/notebooks/Semantic Model Refresh.ipynb +0 -1
  113. semantic_link_labs-0.8.3/src/sempy_labs/_refresh_semantic_model.py +0 -175
  114. semantic_link_labs-0.8.3/src/sempy_labs/directlake/_update_directlake_model_lakehouse_connection.py +0 -71
  115. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  116. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  117. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/.github/ISSUE_TEMPLATE/issue--question---advice-needed.md +0 -0
  118. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/.github/workflows/build.yaml +0 -0
  119. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/.github/workflows/codeql.yaml +0 -0
  120. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/.gitignore +0 -0
  121. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/.readthedocs.yaml +0 -0
  122. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/.vscode/settings.json +0 -0
  123. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/CODE_OF_CONDUCT.md +0 -0
  124. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/LICENSE +0 -0
  125. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/SECURITY.md +0 -0
  126. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/SUPPORT.md +0 -0
  127. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/docs/Makefile +0 -0
  128. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/docs/make.bat +0 -0
  129. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/docs/requirements.txt +0 -0
  130. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/docs/source/index.rst +0 -0
  131. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/docs/source/modules.rst +0 -0
  132. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/notebooks/Best Practice Analyzer Report.ipynb +0 -0
  133. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/notebooks/Query Scale Out.ipynb +0 -0
  134. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/notebooks/Report Analysis.ipynb +0 -0
  135. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/notebooks/Tabular Object Model.ipynb +0 -0
  136. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/setup.cfg +0 -0
  137. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/semantic_link_labs.egg-info/dependency_links.txt +0 -0
  138. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/semantic_link_labs.egg-info/top_level.txt +0 -0
  139. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_ai.py +0 -0
  140. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_clear_cache.py +0 -0
  141. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_connections.py +0 -0
  142. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_dax.py +0 -0
  143. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_documentation.py +0 -0
  144. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_model_auto_build.py +0 -0
  145. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_model_dependencies.py +0 -0
  146. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_one_lake_integration.py +0 -0
  147. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/_sql.py +0 -0
  148. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/admin/__init__.py +0 -0
  149. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/directlake/_directlake_schema_compare.py +0 -0
  150. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/directlake/_generate_shared_expression.py +0 -0
  151. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/directlake/_get_directlake_lakehouse.py +0 -0
  152. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/directlake/_list_directlake_model_calc_tables.py +0 -0
  153. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/directlake/_warm_cache.py +0 -0
  154. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/lakehouse/__init__.py +0 -0
  155. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/lakehouse/_get_lakehouse_columns.py +0 -0
  156. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/lakehouse/_lakehouse.py +0 -0
  157. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/migration/__init__.py +0 -0
  158. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/migration/_create_pqt_file.py +0 -0
  159. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_BPAReportTemplate.json +0 -0
  160. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/.pbi/localSettings.json +0 -0
  161. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/.platform +0 -0
  162. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/StaticResources/SharedResources/BaseThemes/CY24SU06.json +0 -0
  163. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/page.json +0 -0
  164. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/1b08bce3bebabb0a27a8/visual.json +0 -0
  165. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/2f22ddb70c301693c165/visual.json +0 -0
  166. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/3b1182230aa6c600b43a/visual.json +0 -0
  167. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/58577ba6380c69891500/visual.json +0 -0
  168. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/a2a8fa5028b3b776c96c/visual.json +0 -0
  169. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/adfd47ef30652707b987/visual.json +0 -0
  170. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/b6a80ee459e716e170b1/visual.json +0 -0
  171. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/ce3130a721c020cc3d81/visual.json +0 -0
  172. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/page.json +0 -0
  173. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/visuals/66e60dfb526437cd78d1/visual.json +0 -0
  174. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/page.json +0 -0
  175. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/07deb8bce824e1be37d7/visual.json +0 -0
  176. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0b1c68838818b32ad03b/visual.json +0 -0
  177. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0c171de9d2683d10b930/visual.json +0 -0
  178. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0efa01be0510e40a645e/visual.json +0 -0
  179. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/6bf2f0eb830ab53cc668/visual.json +0 -0
  180. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/88d8141cb8500b60030c/visual.json +0 -0
  181. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/a753273590beed656a03/visual.json +0 -0
  182. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/b8fdc82cddd61ac447bc/visual.json +0 -0
  183. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/page.json +0 -0
  184. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/visuals/ce8532a7e25020271077/visual.json +0 -0
  185. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/pages.json +0 -0
  186. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/report.json +0 -0
  187. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition/version.json +0 -0
  188. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_bpareporttemplate/definition.pbir +0 -0
  189. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_report_bpa.py +0 -0
  190. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_report_bpa_rules.py +0 -0
  191. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_report_helper.py +0 -0
  192. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_report_list_functions.py +0 -0
  193. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/report/_reportwrapper.py +0 -0
  194. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/src/sempy_labs/tom/__init__.py +0 -0
  195. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/tests/__init__.py +0 -0
  196. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/tests/test_friendly_case.py +0 -0
  197. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/tests/test_shortcuts.py +0 -0
  198. {semantic_link_labs-0.8.3 → semantic_link_labs-0.8.4}/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.3
3
+ Version: 0.8.4
4
4
  Summary: Semantic Link Labs for Microsoft Fabric
5
5
  Author: Microsoft Corporation
6
6
  License: MIT License
@@ -15,7 +15,7 @@ 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.0
18
+ Requires-Dist: semantic-link-sempy>=0.8.1
19
19
  Requires-Dist: anytree
20
20
  Requires-Dist: powerbiclient
21
21
  Requires-Dist: polib
@@ -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.3&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
30
+ [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.8.4&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
 
@@ -37,6 +37,10 @@ Requires-Dist: pytest>=8.2.1; extra == "test"
37
37
 
38
38
  Semantic Link Labs is a Python library designed for use in [Microsoft Fabric notebooks](https://learn.microsoft.com/fabric/data-engineering/how-to-use-notebook). This library extends the capabilities of [Semantic Link](https://learn.microsoft.com/fabric/data-science/semantic-link-overview) offering additional functionalities to seamlessly integrate and work alongside it. The goal of Semantic Link Labs is to simplify technical processes, empowering people to focus on higher level activities and allowing tasks that are better suited for machines to be efficiently handled without human intervention.
39
39
 
40
+ If you encounter any issues, please [raise a bug](https://github.com/microsoft/semantic-link-labs/issues/new?assignees=&labels=&projects=&template=bug_report.md&title=).
41
+
42
+ If you have ideas for new features/functions, please [request a feature](https://github.com/microsoft/semantic-link-labs/issues/new?assignees=&labels=&projects=&template=feature_request.md&title=).
43
+
40
44
  ## Featured Scenarios
41
45
  * Semantic Models
42
46
  * [Migrating an import/DirectQuery semantic model to Direct Lake](https://github.com/microsoft/semantic-link-labs?tab=readme-ov-file#direct-lake-migration)
@@ -47,26 +51,46 @@ Semantic Link Labs is a Python library designed for use in [Microsoft Fabric not
47
51
  * [Check Direct Lake Guardrails](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.lakehouse.html#sempy_labs.lakehouse.get_lakehouse_tables)
48
52
  * [Refresh](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Semantic%20Model%20Refresh.ipynb), [clear cache](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.clear_cache), [backup](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.backup_semantic_model), [restore](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.restore_semantic_model), [copy backup files](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.copy_semantic_model_backup_file), [move/deploy across workspaces](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.deploy_semantic_model)
49
53
  * [Run DAX queries which impersonate a user](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.evaluate_dax_impersonation)
50
- * [Manage Query Scale Out](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Query%20Scale%20Out.ipynb).
54
+ * [Manage Query Scale Out](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Query%20Scale%20Out.ipynb)
51
55
  * [Auto-generate descriptions for any/all measures in bulk](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.tom.html#sempy_labs.tom.TOMWrapper.generate_measure_descriptions)
56
+ * [Warm the cache of a Direct Lake semantic model after a refresh (using columns currently in memory)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.directlake.html#sempy_labs.directlake.warm_direct_lake_cache_isresident)
57
+ * [Warm the cache of a Direct Lake semantic model (via perspective)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.directlake.html#sempy_labs.directlake.warm_direct_lake_cache_perspective)
58
+ * [Visualize a refresh](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Semantic%20Model%20Refresh.ipynb)
52
59
  * Reports
53
60
  * [Report Best Practice Analyzer (BPA)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.report.html#sempy_labs.report.run_report_bpa)
54
61
  * [View report metadata](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Report%20Analysis.ipynb)
55
62
  * [View semantic model objects most frequently used in Power BI reports](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.list_semantic_model_object_report_usage)
56
63
  * [View broken reports](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.list_report_semantic_model_objects)
64
+ * [Set a report theme](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.report.html#sempy_labs.report.ReportWrapper.set_theme)
65
+ * [Migrate report-level measures to the semantic model](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.report.html#sempy_labs.report.ReportWrapper.migrate_report_level_measures)
57
66
  * [Rebind reports](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.report.html#sempy_labs.report.report_rebind)
58
67
  * Capacities
59
68
  * [Migrating a Power BI Premium capacity (P sku) to a Fabric capacity (F sku)](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Capacity%20Migration.ipynb)
69
+ * [Migrating a Fabric Trial capacity (FT sku) to a Fabric capacity (F sku)](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Capacity%20Migration.ipynb)
60
70
  * [Create](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.create_fabric_capacity)/[update](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.update_fabric_capacity)/[suspend](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.suspend_fabric_capacity)/[resume](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.resume_fabric_capacity) Fabric capacities.
71
+ * Lakehouses
72
+ * [Optimize lakehouse tables](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.lakehouse.html#sempy_labs.lakehouse.optimize_lakehouse_tables)
73
+ * [Vacuum lakehouse tables](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.lakehouse.html#sempy_labs.lakehouse.vacuum_lakehouse_tables)
61
74
  * APIs
62
75
  * Wrapper functions for [Power BI](https://learn.microsoft.com/rest/api/power-bi/), [Fabric](https://learn.microsoft.com/rest/api/fabric/articles/using-fabric-apis), and [Azure (Fabric Capacity)](https://learn.microsoft.com/rest/api/microsoftfabric/fabric-capacities?view=rest-microsoftfabric-2023-11-01) APIs
63
76
 
77
+ ## Helper Notebooks
64
78
 
65
- ### Check out the [helper notebooks](https://github.com/microsoft/semantic-link-labs/tree/main/notebooks) for getting started!
79
+ Check out the [helper notebooks](https://github.com/microsoft/semantic-link-labs/tree/main/notebooks) for getting started!
80
+ Run the code below to load all the helper notebooks to the workspace of your choice at once.
81
+ ```python
82
+ import sempy_labs as labs
83
+ import requests
66
84
 
67
- If you encounter any issues, please [raise a bug](https://github.com/microsoft/semantic-link-labs/issues/new?assignees=&labels=&projects=&template=bug_report.md&title=).
85
+ workspace_name = None # Update this to the workspace in which you want to save the notebooks
86
+ api_url = "https://api.github.com/repos/microsoft/semantic-link-labs/contents/notebooks"
87
+ response = requests.get(api_url)
88
+ files = response.json()
89
+ notebook_files = {file['name'][:-6]: file['html_url'] for file in files if file['name'].endswith('.ipynb')}
68
90
 
69
- If you have ideas for new features/functions, please [request a feature](https://github.com/microsoft/semantic-link-labs/issues/new?assignees=&labels=&projects=&template=feature_request.md&title=).
91
+ for file_name, file_url in notebook_files.items():
92
+ labs.import_notebook_from_web(notebook_name=file_name, url=file_url, workspace=workspace_name)
93
+ ```
70
94
 
71
95
  ## Install the library in a Fabric notebook
72
96
  ```python
@@ -85,7 +109,7 @@ from sempy_labs import ConnectWarehouse
85
109
  from sempy_labs import ConnectLakehouse
86
110
  ```
87
111
 
88
- ## Load semantic-link-labs into a custom [Fabric environment](https://learn.microsoft.com/fabric/data-engineering/create-and-use-environment)
112
+ ## Load Semantic Link Labs into a custom [Fabric environment](https://learn.microsoft.com/fabric/data-engineering/create-and-use-environment)
89
113
  An even better way to ensure the semantic-link-labs library is available in your workspace/notebooks is to load it as a library in a custom Fabric environment. If you do this, you will not have to run the above '%pip install' code every time in your notebook. Please follow the steps below.
90
114
 
91
115
  #### Create a custom environment
@@ -106,6 +130,7 @@ An even better way to ensure the semantic-link-labs library is available in your
106
130
  2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
107
131
 
108
132
  ## Version History
133
+ * [0.8.4](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.4) (October 30, 2024)
109
134
  * [0.8.3](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.3) (October 14, 2024)
110
135
  * [0.8.2](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.2) (October 2, 2024)
111
136
  * [0.8.1](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.1) (October 2, 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.3&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
4
+ [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.8.4&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
 
@@ -11,6 +11,10 @@
11
11
 
12
12
  Semantic Link Labs is a Python library designed for use in [Microsoft Fabric notebooks](https://learn.microsoft.com/fabric/data-engineering/how-to-use-notebook). This library extends the capabilities of [Semantic Link](https://learn.microsoft.com/fabric/data-science/semantic-link-overview) offering additional functionalities to seamlessly integrate and work alongside it. The goal of Semantic Link Labs is to simplify technical processes, empowering people to focus on higher level activities and allowing tasks that are better suited for machines to be efficiently handled without human intervention.
13
13
 
14
+ If you encounter any issues, please [raise a bug](https://github.com/microsoft/semantic-link-labs/issues/new?assignees=&labels=&projects=&template=bug_report.md&title=).
15
+
16
+ If you have ideas for new features/functions, please [request a feature](https://github.com/microsoft/semantic-link-labs/issues/new?assignees=&labels=&projects=&template=feature_request.md&title=).
17
+
14
18
  ## Featured Scenarios
15
19
  * Semantic Models
16
20
  * [Migrating an import/DirectQuery semantic model to Direct Lake](https://github.com/microsoft/semantic-link-labs?tab=readme-ov-file#direct-lake-migration)
@@ -21,26 +25,46 @@ Semantic Link Labs is a Python library designed for use in [Microsoft Fabric not
21
25
  * [Check Direct Lake Guardrails](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.lakehouse.html#sempy_labs.lakehouse.get_lakehouse_tables)
22
26
  * [Refresh](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Semantic%20Model%20Refresh.ipynb), [clear cache](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.clear_cache), [backup](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.backup_semantic_model), [restore](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.restore_semantic_model), [copy backup files](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.copy_semantic_model_backup_file), [move/deploy across workspaces](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.deploy_semantic_model)
23
27
  * [Run DAX queries which impersonate a user](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.evaluate_dax_impersonation)
24
- * [Manage Query Scale Out](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Query%20Scale%20Out.ipynb).
28
+ * [Manage Query Scale Out](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Query%20Scale%20Out.ipynb)
25
29
  * [Auto-generate descriptions for any/all measures in bulk](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.tom.html#sempy_labs.tom.TOMWrapper.generate_measure_descriptions)
30
+ * [Warm the cache of a Direct Lake semantic model after a refresh (using columns currently in memory)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.directlake.html#sempy_labs.directlake.warm_direct_lake_cache_isresident)
31
+ * [Warm the cache of a Direct Lake semantic model (via perspective)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.directlake.html#sempy_labs.directlake.warm_direct_lake_cache_perspective)
32
+ * [Visualize a refresh](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Semantic%20Model%20Refresh.ipynb)
26
33
  * Reports
27
34
  * [Report Best Practice Analyzer (BPA)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.report.html#sempy_labs.report.run_report_bpa)
28
35
  * [View report metadata](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Report%20Analysis.ipynb)
29
36
  * [View semantic model objects most frequently used in Power BI reports](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.list_semantic_model_object_report_usage)
30
37
  * [View broken reports](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.list_report_semantic_model_objects)
38
+ * [Set a report theme](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.report.html#sempy_labs.report.ReportWrapper.set_theme)
39
+ * [Migrate report-level measures to the semantic model](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.report.html#sempy_labs.report.ReportWrapper.migrate_report_level_measures)
31
40
  * [Rebind reports](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.report.html#sempy_labs.report.report_rebind)
32
41
  * Capacities
33
42
  * [Migrating a Power BI Premium capacity (P sku) to a Fabric capacity (F sku)](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Capacity%20Migration.ipynb)
43
+ * [Migrating a Fabric Trial capacity (FT sku) to a Fabric capacity (F sku)](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Capacity%20Migration.ipynb)
34
44
  * [Create](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.create_fabric_capacity)/[update](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.update_fabric_capacity)/[suspend](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.suspend_fabric_capacity)/[resume](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.resume_fabric_capacity) Fabric capacities.
45
+ * Lakehouses
46
+ * [Optimize lakehouse tables](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.lakehouse.html#sempy_labs.lakehouse.optimize_lakehouse_tables)
47
+ * [Vacuum lakehouse tables](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.lakehouse.html#sempy_labs.lakehouse.vacuum_lakehouse_tables)
35
48
  * APIs
36
49
  * Wrapper functions for [Power BI](https://learn.microsoft.com/rest/api/power-bi/), [Fabric](https://learn.microsoft.com/rest/api/fabric/articles/using-fabric-apis), and [Azure (Fabric Capacity)](https://learn.microsoft.com/rest/api/microsoftfabric/fabric-capacities?view=rest-microsoftfabric-2023-11-01) APIs
37
50
 
51
+ ## Helper Notebooks
38
52
 
39
- ### Check out the [helper notebooks](https://github.com/microsoft/semantic-link-labs/tree/main/notebooks) for getting started!
53
+ Check out the [helper notebooks](https://github.com/microsoft/semantic-link-labs/tree/main/notebooks) for getting started!
54
+ Run the code below to load all the helper notebooks to the workspace of your choice at once.
55
+ ```python
56
+ import sempy_labs as labs
57
+ import requests
40
58
 
41
- If you encounter any issues, please [raise a bug](https://github.com/microsoft/semantic-link-labs/issues/new?assignees=&labels=&projects=&template=bug_report.md&title=).
59
+ workspace_name = None # Update this to the workspace in which you want to save the notebooks
60
+ api_url = "https://api.github.com/repos/microsoft/semantic-link-labs/contents/notebooks"
61
+ response = requests.get(api_url)
62
+ files = response.json()
63
+ notebook_files = {file['name'][:-6]: file['html_url'] for file in files if file['name'].endswith('.ipynb')}
42
64
 
43
- If you have ideas for new features/functions, please [request a feature](https://github.com/microsoft/semantic-link-labs/issues/new?assignees=&labels=&projects=&template=feature_request.md&title=).
65
+ for file_name, file_url in notebook_files.items():
66
+ labs.import_notebook_from_web(notebook_name=file_name, url=file_url, workspace=workspace_name)
67
+ ```
44
68
 
45
69
  ## Install the library in a Fabric notebook
46
70
  ```python
@@ -59,7 +83,7 @@ from sempy_labs import ConnectWarehouse
59
83
  from sempy_labs import ConnectLakehouse
60
84
  ```
61
85
 
62
- ## Load semantic-link-labs into a custom [Fabric environment](https://learn.microsoft.com/fabric/data-engineering/create-and-use-environment)
86
+ ## Load Semantic Link Labs into a custom [Fabric environment](https://learn.microsoft.com/fabric/data-engineering/create-and-use-environment)
63
87
  An even better way to ensure the semantic-link-labs library is available in your workspace/notebooks is to load it as a library in a custom Fabric environment. If you do this, you will not have to run the above '%pip install' code every time in your notebook. Please follow the steps below.
64
88
 
65
89
  #### Create a custom environment
@@ -80,6 +104,7 @@ An even better way to ensure the semantic-link-labs library is available in your
80
104
  2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
81
105
 
82
106
  ## Version History
107
+ * [0.8.4](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.4) (October 30, 2024)
83
108
  * [0.8.3](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.3) (October 14, 2024)
84
109
  * [0.8.2](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.2) (October 2, 2024)
85
110
  * [0.8.1](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.1) (October 2, 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.3'
16
+ release = '0.8.4'
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.0
9
+ - semantic-link-sempy>=0.8.1
10
10
  - azure-identity==1.7.1
11
11
  - azure-storage-blob>=12.9.0
12
12
  - pandas-stubs
@@ -1 +1 @@
1
- {"cells":[{"cell_type":"markdown","id":"5c27dfd1-4fe0-4a97-92e6-ddf78889aa93","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Install the latest .whl package\n","\n","Check [here](https://pypi.org/project/semantic-link-labs/) to see the latest version."]},{"cell_type":"code","execution_count":null,"id":"d5cae9db-cef9-48a8-a351-9c5fcc99645c","metadata":{"jupyter":{"outputs_hidden":true,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["%pip install semantic-link-labs"]},{"cell_type":"markdown","id":"2856d26d","metadata":{},"source":["### Requirements\n","* Must have an Azure Subscription\n","* Must [register an App](https://ms.portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade)\n"," * Permissions: Will need the Contributor role at the scope where the resources will be created, which is often the subscription level\n","* Azure Key Vault\n"," * [Set up](https://learn.microsoft.com/azure/key-vault/secrets/quick-create-portal) within the Azure Subscription\n"," * Save secrets for the Tenant ID, Client ID (Application ID), Client Secret\n"," * Permissions: Ensure the user who will be executing the notebooks has “Key Vault Secrets User”\n","* Fabric Permissions\n"," * User should be a tenant admin. This ensures they have the necessary authority to execute and manage the notebooks without encountering permission issues.\n","\n","### Result\n","* F skus are created for each (specified) capacity\n"," * Within the same region as the P SKU\n"," * Equivalent SKU size as the P SKU\n"," * Same admins as listed on the P SKU\n"," * All workspaces are migrated to the corresponding new capacity\n"," * Capacity settings from the P SKU are transferred to the F SKU\n"," * Capacity settings\n"," * Notification settings\n"," * Access settings\n"," * Disaster recovery settings\n"," * Spark settings\n"," * Delegated tenant settings\n","* The names of the newly created F SKU capacities will be an alphanumeric lowercase version of the P SKU capacity name, suffixed with 'fsku'. As an example: \"My capacity_3!\" -> \"mycapacity3fsku\"."]},{"cell_type":"markdown","id":"b195eae8","metadata":{},"source":["### Import the library and set the initial parameters"]},{"cell_type":"code","execution_count":null,"id":"1344e286","metadata":{},"outputs":[],"source":["import sempy_labs as labs\n","import sempy_labs.admin as admin\n","\n","azure_subscription_id = '' # Enter your Azure subscription ID\n","key_vault_uri = '' # Enter your Azure Key Vault URI\n","key_vault_tenant_id = '' # Enter the name of the Azure Key Vault secret which stores your Tenant ID\n","key_vault_client_id = '' # Enter the name of the Azure Key Vault secret which stores your Client ID (Application ID)\n","key_vault_client_secret = '' # Enter the name of the Azure Key Vault secret which stores your Client Secret\n","resource_group = '' # Enter the name of the resource group (to be used to create the new F skus)"]},{"cell_type":"markdown","id":"5a3fe6e8-b8aa-4447-812b-7931831e07fe","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Migrate a single P SKU -> F SKU\n","Set the 'capacities' parameter to the single P SKU."]},{"cell_type":"code","execution_count":null,"id":"3655dd88","metadata":{},"outputs":[],"source":["labs.migrate_capacities(\n"," azure_subscription_id = azure_subscription_id,\n"," key_vault_uri = key_vault_uri,\n"," key_vault_tenant_id = key_vault_tenant_id,\n"," key_vault_client_id = key_vault_client_id,\n"," key_vault_client_secret = key_vault_client_secret,\n"," resource_group = resource_group,\n"," capacities = 'CapacityA',\n"," p_sku_only = True,\n",")"]},{"cell_type":"markdown","id":"175a59b8","metadata":{},"source":["### Migrate a list of P SKUs to F SKUs\n","Set the 'capacities' parameter to a list of P SKUs."]},{"cell_type":"code","execution_count":null,"id":"3a7a80ec","metadata":{},"outputs":[],"source":["labs.migrate_capacities(\n"," azure_subscription_id = azure_subscription_id,\n"," key_vault_uri = key_vault_uri,\n"," key_vault_tenant_id = key_vault_tenant_id,\n"," key_vault_client_id = key_vault_client_id,\n"," key_vault_client_secret = key_vault_client_secret,\n"," resource_group = resource_group,\n"," capacities = ['CapacityA', 'CapacityB', 'CapacityC'],\n"," p_sku_only = True,\n",")"]},{"cell_type":"markdown","id":"30438799","metadata":{},"source":["### Migrate all P SKUs to F SKUs\n","Set the 'capacities' parameter to None."]},{"cell_type":"code","execution_count":null,"id":"315c2dc7","metadata":{},"outputs":[],"source":["labs.migrate_capacities(\n"," azure_subscription_id = azure_subscription_id,\n"," key_vault_uri = key_vault_uri,\n"," key_vault_tenant_id = key_vault_tenant_id,\n"," key_vault_client_id = key_vault_client_id,\n"," key_vault_client_secret = key_vault_client_secret,\n"," resource_group = resource_group,\n"," capacities = None,\n"," p_sku_only = True,\n",")"]},{"cell_type":"markdown","id":"1d8e73b2","metadata":{},"source":["### Migrate a list of P SKUs to F SKUs; associate each capacity with a specific resource group\n","This process ensures that each F SKU is created within the resource group specified in the resource_group_mapping dictionary."]},{"cell_type":"code","execution_count":null,"id":"2854bf8a","metadata":{},"outputs":[],"source":["resource_group_mapping = {\n"," \"CapacityA\": \"ResourceGroupA\",\n"," \"CapacityB\": \"ResourceGroupA\",\n"," \"CapacityC\": \"ResourceGroupB\",\n","}\n","\n","labs.migrate_capacities(\n"," azure_subscription_id = azure_subscription_id,\n"," key_vault_uri = key_vault_uri,\n"," key_vault_tenant_id = key_vault_tenant_id,\n"," key_vault_client_id = key_vault_client_id,\n"," key_vault_client_secret = key_vault_client_secret,\n"," resource_group = resource_group_mapping,\n"," capacities = ['CapacityA', 'CapacityB', 'CapacityC'],\n"," p_sku_only = True,\n",")"]},{"cell_type":"markdown","id":"c3f497c8","metadata":{},"source":["### Migrate a single source capacity to a target capacity (target capacity already created)"]},{"cell_type":"code","execution_count":null,"id":"a4f0b5a2","metadata":{},"outputs":[],"source":["source_capacity = '' # Enter the Source capacity name\n","target_capacity = '' # Enter the Target capacity name (already exists) \n","\n","admin.assign_workspaces_to_capacity(\n"," source_capacity=source_capacity,\n"," target_capacity=target_capacity,\n"," workspace=None,\n",")\n","\n","# Optionally migrate settings\n","\"\"\"\n","labs.migrate_capacity_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","labs.migrate_access_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","labs.migrate_delegated_tenant_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","labs.migrate_disaster_recovery_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","labs.migrate_notification_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","labs.migrate_spark_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","\"\"\""]},{"cell_type":"markdown","id":"e0db744b","metadata":{},"source":["### Migrate a list of source capacities to target capacities (target capacity already created)"]},{"cell_type":"code","execution_count":null,"id":"0e04d519","metadata":{},"outputs":[],"source":["capacity_mapping = {\n"," \"capacitya\": \"capacityanew\", # Format is \"Source SKU\": \"Target SKU\"\n"," \"capacityb\": \"capacitybnew\",\n"," \"capacityc\": \"capacitycnew\",\n","}\n","\n","capacities = list(capacity_mapping.keys())\n","\n","for capacity in capacities:\n"," admin.assign_workspaces_to_capacity(\n"," source_capacity=capacity,\n"," target_capacity=capacity_mapping.get(capacity),\n"," workspace=None,\n"," )\n"," # Optionally migrate settings\n"," \"\"\"\n"," labs.migrate_capacity_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," labs.migrate_access_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," labs.migrate_delegated_tenant_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," labs.migrate_disaster_recovery_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," labs.migrate_notification_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," labs.migrate_spark_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," \"\"\"\n"]},{"cell_type":"markdown","id":"67787c3a","metadata":{},"source":["### Migrate a Fabric Trial Capacity (FT1) to a Fabric Capacity (F SKU)"]},{"cell_type":"code","execution_count":null,"id":"4efb55b2","metadata":{},"outputs":[],"source":["labs.migrate_fabric_trial_capacity(\n"," azure_subscription_id = azure_subscription_id,\n"," key_vault_uri = key_vault_uri,\n"," key_vault_tenant_id = key_vault_tenant_id,\n"," key_vault_client_id = key_vault_client_id,\n"," key_vault_client_secret = key_vault_client_secret,\n"," resource_group = resource_group,\n"," source_capacity = '', # The name of the Trial capacity.\n"," target_capacity = '', # The name of Fabric capacity (if it does not exist it will be created).\n"," target_capacity_sku = \"F64\", # Defaults to F64 but can specify the required SKU.\n"," target_capacity_region = None, # Setting this not None will create the Fabric capacity in the same region as the Trial capacity.\n"," target_capacity_admin_members = None, # Setting this to None will use the same admin members as the Trial capacity.\n",")"]}],"metadata":{"kernel_info":{"name":"synapse_pyspark"},"kernelspec":{"display_name":"Synapse PySpark","language":"Python","name":"synapse_pyspark"},"language_info":{"name":"python"},"microsoft":{"language":"python"},"nteract":{"version":"nteract-front-end@1.0.0"},"spark_compute":{"compute_id":"/trident/default"},"synapse_widget":{"state":{},"version":"0.1"},"widgets":{}},"nbformat":4,"nbformat_minor":5}
1
+ {"cells":[{"cell_type":"markdown","id":"5c27dfd1-4fe0-4a97-92e6-ddf78889aa93","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Install the latest .whl package\n","\n","Check [here](https://pypi.org/project/semantic-link-labs/) to see the latest version."]},{"cell_type":"code","execution_count":null,"id":"d5cae9db-cef9-48a8-a351-9c5fcc99645c","metadata":{"jupyter":{"outputs_hidden":true,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["%pip install semantic-link-labs"]},{"cell_type":"markdown","id":"2856d26d","metadata":{},"source":["### Requirements\n","* Must have an Azure Subscription\n","* Must [register an App](https://ms.portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade)\n"," * Permissions: Will need the Contributor role at the scope where the resources will be created, which is often the subscription level\n","* Azure Key Vault\n"," * [Set up](https://learn.microsoft.com/azure/key-vault/secrets/quick-create-portal) within the Azure Subscription\n"," * Save secrets for the Tenant ID, Client ID (Application ID), Client Secret\n"," * Permissions: Ensure the user who will be executing the notebooks has “Key Vault Secrets User”\n","* Fabric Permissions\n"," * User should be a tenant admin. This ensures they have the necessary authority to execute and manage the notebooks without encountering permission issues.\n","\n","### Result\n","* F skus are created for each (specified) capacity\n"," * Within the same region as the P SKU\n"," * Equivalent SKU size as the P SKU\n"," * Same admins as listed on the P SKU\n"," * All workspaces are migrated to the corresponding new capacity\n"," * Capacity settings from the P SKU are transferred to the F SKU\n"," * Capacity settings\n"," * Notification settings\n"," * Access settings\n"," * Disaster recovery settings\n"," * Spark settings\n"," * Delegated tenant settings\n","* The names of the newly created F SKU capacities will be an alphanumeric lowercase version of the P SKU capacity name, suffixed with 'fsku'. As an example: \"My capacity_3!\" -> \"mycapacity3fsku\"."]},{"cell_type":"markdown","id":"b195eae8","metadata":{},"source":["### Import the library and set the initial parameters"]},{"cell_type":"code","execution_count":null,"id":"1344e286","metadata":{},"outputs":[],"source":["import sempy_labs as labs\n","import sempy_labs.admin as admin\n","\n","azure_subscription_id = '' # Enter your Azure subscription ID\n","key_vault_uri = '' # Enter your Azure Key Vault URI\n","key_vault_tenant_id = '' # Enter the name of the Azure Key Vault secret which stores your Tenant ID\n","key_vault_client_id = '' # Enter the name of the Azure Key Vault secret which stores your Client ID (Application ID)\n","key_vault_client_secret = '' # Enter the name of the Azure Key Vault secret which stores your Client Secret\n","resource_group = '' # Enter the name of the resource group (to be used to create the new F skus)"]},{"cell_type":"markdown","id":"5a3fe6e8-b8aa-4447-812b-7931831e07fe","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Migrate a single P SKU -> F SKU\n","Set the 'capacities' parameter to the single P SKU."]},{"cell_type":"code","execution_count":null,"id":"3655dd88","metadata":{},"outputs":[],"source":["labs.migrate_capacities(\n"," azure_subscription_id = azure_subscription_id,\n"," key_vault_uri = key_vault_uri,\n"," key_vault_tenant_id = key_vault_tenant_id,\n"," key_vault_client_id = key_vault_client_id,\n"," key_vault_client_secret = key_vault_client_secret,\n"," resource_group = resource_group,\n"," capacities = 'CapacityA',\n"," p_sku_only = True,\n",")"]},{"cell_type":"markdown","id":"175a59b8","metadata":{},"source":["### Migrate a list of P SKUs to F SKUs\n","Set the 'capacities' parameter to a list of P SKUs."]},{"cell_type":"code","execution_count":null,"id":"3a7a80ec","metadata":{},"outputs":[],"source":["labs.migrate_capacities(\n"," azure_subscription_id = azure_subscription_id,\n"," key_vault_uri = key_vault_uri,\n"," key_vault_tenant_id = key_vault_tenant_id,\n"," key_vault_client_id = key_vault_client_id,\n"," key_vault_client_secret = key_vault_client_secret,\n"," resource_group = resource_group,\n"," capacities = ['CapacityA', 'CapacityB', 'CapacityC'],\n"," p_sku_only = True,\n",")"]},{"cell_type":"markdown","id":"30438799","metadata":{},"source":["### Migrate all P SKUs to F SKUs\n","Set the 'capacities' parameter to None."]},{"cell_type":"code","execution_count":null,"id":"315c2dc7","metadata":{},"outputs":[],"source":["labs.migrate_capacities(\n"," azure_subscription_id = azure_subscription_id,\n"," key_vault_uri = key_vault_uri,\n"," key_vault_tenant_id = key_vault_tenant_id,\n"," key_vault_client_id = key_vault_client_id,\n"," key_vault_client_secret = key_vault_client_secret,\n"," resource_group = resource_group,\n"," capacities = None,\n"," p_sku_only = True,\n",")"]},{"cell_type":"markdown","id":"1d8e73b2","metadata":{},"source":["### Migrate a list of P SKUs to F SKUs; associate each capacity with a specific resource group\n","This process ensures that each F SKU is created within the resource group specified in the resource_group_mapping dictionary."]},{"cell_type":"code","execution_count":null,"id":"2854bf8a","metadata":{},"outputs":[],"source":["resource_group_mapping = {\n"," \"CapacityA\": \"ResourceGroupA\",\n"," \"CapacityB\": \"ResourceGroupA\",\n"," \"CapacityC\": \"ResourceGroupB\",\n","}\n","\n","labs.migrate_capacities(\n"," azure_subscription_id = azure_subscription_id,\n"," key_vault_uri = key_vault_uri,\n"," key_vault_tenant_id = key_vault_tenant_id,\n"," key_vault_client_id = key_vault_client_id,\n"," key_vault_client_secret = key_vault_client_secret,\n"," resource_group = resource_group_mapping,\n"," capacities = ['CapacityA', 'CapacityB', 'CapacityC'],\n"," p_sku_only = True,\n",")"]},{"cell_type":"markdown","id":"c3f497c8","metadata":{},"source":["### Migrate a single source capacity to a target capacity (target capacity already created)"]},{"cell_type":"code","execution_count":null,"id":"a4f0b5a2","metadata":{},"outputs":[],"source":["source_capacity = '' # Enter the Source capacity name\n","target_capacity = '' # Enter the Target capacity name (already exists) \n","\n","admin.assign_workspaces_to_capacity(\n"," source_capacity=source_capacity,\n"," target_capacity=target_capacity,\n"," workspace=None,\n",")\n","\n","# Optionally migrate settings\n","\"\"\"\n","labs.migrate_capacity_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","labs.migrate_access_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","labs.migrate_delegated_tenant_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","labs.migrate_disaster_recovery_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","labs.migrate_notification_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","labs.migrate_spark_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","\"\"\""]},{"cell_type":"markdown","id":"e0db744b","metadata":{},"source":["### Migrate a list of source capacities to target capacities (target capacity already created)"]},{"cell_type":"code","execution_count":null,"id":"0e04d519","metadata":{},"outputs":[],"source":["capacity_mapping = {\n"," \"capacitya\": \"capacityanew\", # Format is \"Source SKU\": \"Target SKU\"\n"," \"capacityb\": \"capacitybnew\",\n"," \"capacityc\": \"capacitycnew\",\n","}\n","\n","capacities = list(capacity_mapping.keys())\n","\n","for capacity in capacities:\n"," admin.assign_workspaces_to_capacity(\n"," source_capacity=capacity,\n"," target_capacity=capacity_mapping.get(capacity),\n"," workspace=None,\n"," )\n"," # Optionally migrate settings\n"," \"\"\"\n"," labs.migrate_capacity_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," labs.migrate_access_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," labs.migrate_delegated_tenant_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," labs.migrate_disaster_recovery_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," labs.migrate_notification_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," labs.migrate_spark_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," \"\"\"\n"]},{"cell_type":"markdown","id":"67787c3a","metadata":{},"source":["### Migrate a Fabric Trial Capacity (FT1) to a Fabric Capacity (F SKU)"]},{"cell_type":"code","execution_count":null,"id":"4efb55b2","metadata":{},"outputs":[],"source":["labs.migrate_fabric_trial_capacity(\n"," azure_subscription_id = azure_subscription_id,\n"," key_vault_uri = key_vault_uri,\n"," key_vault_tenant_id = key_vault_tenant_id,\n"," key_vault_client_id = key_vault_client_id,\n"," key_vault_client_secret = key_vault_client_secret,\n"," resource_group = resource_group,\n"," source_capacity = '', # The name of the Trial capacity.\n"," target_capacity = '', # The name of Fabric capacity (if it does not exist it will be created).\n"," target_capacity_sku = \"F64\", # Defaults to F64 but can specify the required SKU.\n"," target_capacity_admin_members = None, # Setting this to None will use the same admin members as the Trial capacity.\n",")"]}],"metadata":{"kernel_info":{"name":"synapse_pyspark"},"kernelspec":{"display_name":"Synapse PySpark","language":"Python","name":"synapse_pyspark"},"language_info":{"name":"python"},"microsoft":{"language":"python"},"nteract":{"version":"nteract-front-end@1.0.0"},"spark_compute":{"compute_id":"/trident/default"},"synapse_widget":{"state":{},"version":"0.1"},"widgets":{}},"nbformat":4,"nbformat_minor":5}
@@ -1 +1 @@
1
- {"cells":[{"cell_type":"markdown","id":"5c27dfd1-4fe0-4a97-92e6-ddf78889aa93","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Install the latest .whl package\n","\n","Check [here](https://pypi.org/project/semantic-link-labs/) to see the latest version."]},{"cell_type":"code","execution_count":null,"id":"d5cae9db-cef9-48a8-a351-9c5fcc99645c","metadata":{"jupyter":{"outputs_hidden":true,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["%pip install semantic-link-labs"]},{"cell_type":"markdown","id":"969a29bf","metadata":{},"source":["### Import the library and set initial parameters"]},{"cell_type":"code","execution_count":null,"id":"29c923f8","metadata":{},"outputs":[],"source":["import sempy_labs as labs\n","from sempy_labs import migration, directlake\n","import sempy_labs.report as rep\n","\n","dataset_name = '' #Enter the import/DQ semantic model name\n","workspace_name = None #Enter the workspace of the import/DQ semantic model. It set to none it will use the current workspace.\n","new_dataset_name = '' #Enter the new Direct Lake semantic model name\n","new_dataset_workspace_name = None #Enter the workspace where the Direct Lake model will be created. If set to None it will use the current workspace.\n","lakehouse_name = None #Enter the lakehouse to be used for the Direct Lake model. If set to None it will use the lakehouse attached to the notebook.\n","lakehouse_workspace_name = None #Enter the lakehouse workspace. If set to None it will use the new_dataset_workspace_name."]},{"cell_type":"markdown","id":"5a3fe6e8-b8aa-4447-812b-7931831e07fe","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Create the [Power Query Template](https://learn.microsoft.com/power-query/power-query-template) file\n","\n","This encapsulates all of the semantic model's Power Query logic into a single file."]},{"cell_type":"code","execution_count":null,"id":"cde43b47-4ecc-46ae-9125-9674819c7eab","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["migration.create_pqt_file(dataset = dataset_name, workspace = workspace_name)"]},{"cell_type":"markdown","id":"bf945d07-544c-4934-b7a6-cfdb90ca725e","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Import the Power Query Template to Dataflows Gen2\n","\n","- Open the [OneLake file explorer](https://www.microsoft.com/download/details.aspx?id=105222) and sync your files (right click -> Sync from OneLake)\n","\n","- Navigate to your lakehouse. From this window, create a new Dataflows Gen2 and import the Power Query Template file from OneLake (OneLake -> Workspace -> Lakehouse -> Files...), and publish the Dataflows Gen2.\n","\n","<div class=\"alert alert-block alert-info\">\n","<b>Important!</b> Make sure to create the Dataflows Gen2 from within the lakehouse window. That will ensure that all the tables automatically map to that lakehouse as the destination. Otherwise, you will have to manually map each table to its destination individually.\n","</div>"]},{"cell_type":"markdown","id":"9975db7d","metadata":{},"source":["### Create the Direct Lake model based on the import/DQ semantic model\n","\n","Calculated columns are not migrated to the Direct Lake model as they are not supported in Direct Lake mode."]},{"cell_type":"code","execution_count":null,"id":"0a3616b5-566e-414e-a225-fb850d6418dc","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["import time\n","labs.create_blank_semantic_model(dataset = new_dataset_name, workspace = new_dataset_workspace_name, overwrite=False)\n","\n","migration.migrate_calc_tables_to_lakehouse(\n"," dataset = dataset_name,\n"," new_dataset = new_dataset_name,\n"," workspace = workspace_name,\n"," new_dataset_workspace = new_dataset_workspace_name,\n"," lakehouse = lakehouse_name,\n"," lakehouse_workspace = lakehouse_workspace_name\n",")\n","migration.migrate_tables_columns_to_semantic_model(\n"," dataset = dataset_name,\n"," new_dataset = new_dataset_name,\n"," workspace = workspace_name,\n"," new_dataset_workspace = new_dataset_workspace_name,\n"," lakehouse = lakehouse_name,\n"," lakehouse_workspace = lakehouse_workspace_name\n",")\n","migration.migrate_calc_tables_to_semantic_model(\n"," dataset = dataset_name,\n"," new_dataset = new_dataset_name,\n"," workspace = workspace_name,\n"," new_dataset_workspace = new_dataset_workspace_name,\n"," lakehouse = lakehouse_name,\n"," lakehouse_workspace = lakehouse_workspace_name\n",")\n","migration.migrate_model_objects_to_semantic_model(\n"," dataset = dataset_name,\n"," new_dataset = new_dataset_name,\n"," workspace = workspace_name,\n"," new_dataset_workspace = new_dataset_workspace_name\n",")\n","migration.migrate_field_parameters(\n"," dataset = dataset_name,\n"," new_dataset = new_dataset_name,\n"," workspace = workspace_name,\n"," new_dataset_workspace = new_dataset_workspace_name\n",")\n","time.sleep(2)\n","labs.refresh_semantic_model(dataset = new_dataset_name, workspace = new_dataset_workspace_name)\n","migration.refresh_calc_tables(dataset = new_dataset_name, workspace = new_dataset_workspace_name)\n","labs.refresh_semantic_model(dataset = new_dataset_name, workspace = new_dataset_workspace_name)"]},{"cell_type":"markdown","id":"bb98bb13","metadata":{},"source":["### Show migrated/unmigrated objects"]},{"cell_type":"code","execution_count":null,"id":"5db2f22c","metadata":{},"outputs":[],"source":["migration.migration_validation(\n"," dataset = dataset_name,\n"," new_dataset = new_dataset_name, \n"," workspace = workspace_name, \n"," new_dataset_workspace = new_dataset_workspace_name\n",")"]},{"cell_type":"markdown","id":"fa244e9d-87c2-4a66-a7e0-be539a0ac7de","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Rebind all reports using the old semantic model to the new Direct Lake semantic model"]},{"cell_type":"code","execution_count":null,"id":"d4e867cc","metadata":{},"outputs":[],"source":["rep.report_rebind_all(\n"," dataset = dataset_name,\n"," dataset_workspace = workspace_name,\n"," new_dataset = new_dataset_name,\n"," new_dataset_workpace = new_dataset_workspace_name,\n"," report_workspace = None\n",")"]},{"cell_type":"markdown","id":"3365d20d","metadata":{},"source":["### Rebind reports one-by-one (optional)"]},{"cell_type":"code","execution_count":null,"id":"056b7180-d7ac-492c-87e7-ac7d0e4bb929","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["report_name = '' # Enter report name which you want to rebind to the new Direct Lake model\n","\n","rep.report_rebind(\n"," report = report_name,\n"," dataset = new_dataset_name,\n"," report_workspace=workspace_name,\n"," dataset_workspace = new_dataset_workspace_name)"]},{"cell_type":"markdown","id":"526f2327","metadata":{},"source":["### Show unsupported objects"]},{"cell_type":"code","execution_count":null,"id":"a47376d7","metadata":{},"outputs":[],"source":["dfT, dfC, dfR = directlake.show_unsupported_direct_lake_objects(dataset = dataset_name, workspace = workspace_name)\n","\n","print('Calculated Tables are not supported...')\n","display(dfT)\n","print(\"Learn more about Direct Lake limitations here: https://learn.microsoft.com/power-bi/enterprise/directlake-overview#known-issues-and-limitations\")\n","print('Calculated columns are not supported. Columns of binary data type are not supported.')\n","display(dfC)\n","print('Columns used for relationship cannot be of data type datetime and they also must be of the same data type.')\n","display(dfR)"]},{"cell_type":"markdown","id":"ed08ba4c","metadata":{},"source":["### Schema check between semantic model tables/columns and lakehouse tables/columns\n","\n","This will list any tables/columns which are in the new semantic model but do not exist in the lakehouse"]},{"cell_type":"code","execution_count":null,"id":"03889ba4","metadata":{},"outputs":[],"source":["directlake.direct_lake_schema_compare(dataset = new_dataset_name, workspace = new_dataset_workspace_name)"]},{"cell_type":"markdown","id":"2229963b","metadata":{},"source":["### Show calculated tables which have been migrated to the Direct Lake semantic model as regular tables"]},{"cell_type":"code","execution_count":null,"id":"dd537d90","metadata":{},"outputs":[],"source":["directlake.list_direct_lake_model_calc_tables(dataset = new_dataset_name, workspace = new_dataset_workspace_name)"]}],"metadata":{"kernel_info":{"name":"synapse_pyspark"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.12.3"},"microsoft":{"language":"python"},"nteract":{"version":"nteract-front-end@1.0.0"},"spark_compute":{"compute_id":"/trident/default"},"synapse_widget":{"state":{},"version":"0.1"},"widgets":{}},"nbformat":4,"nbformat_minor":5}
1
+ {"cells":[{"cell_type":"markdown","id":"5c27dfd1-4fe0-4a97-92e6-ddf78889aa93","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Install the latest .whl package\n","\n","Check [here](https://pypi.org/project/semantic-link-labs/) to see the latest version."]},{"cell_type":"code","execution_count":null,"id":"d5cae9db-cef9-48a8-a351-9c5fcc99645c","metadata":{"jupyter":{"outputs_hidden":true,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["%pip install semantic-link-labs"]},{"cell_type":"markdown","id":"969a29bf","metadata":{},"source":["### Import the library and set initial parameters"]},{"cell_type":"code","execution_count":null,"id":"29c923f8","metadata":{},"outputs":[],"source":["import sempy_labs as labs\n","from sempy_labs import migration, directlake\n","import sempy_labs.report as rep\n","\n","dataset_name = '' #Enter the import/DQ semantic model name\n","workspace_name = None #Enter the workspace of the import/DQ semantic model. It set to none it will use the current workspace.\n","new_dataset_name = '' #Enter the new Direct Lake semantic model name\n","new_dataset_workspace_name = None #Enter the workspace where the Direct Lake model will be created. If set to None it will use the current workspace.\n","lakehouse_name = None #Enter the lakehouse to be used for the Direct Lake model. If set to None it will use the lakehouse attached to the notebook.\n","lakehouse_workspace_name = None #Enter the lakehouse workspace. If set to None it will use the new_dataset_workspace_name."]},{"cell_type":"markdown","id":"5a3fe6e8-b8aa-4447-812b-7931831e07fe","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Create the [Power Query Template](https://learn.microsoft.com/power-query/power-query-template) file\n","\n","This encapsulates all of the semantic model's Power Query logic into a single file."]},{"cell_type":"code","execution_count":null,"id":"cde43b47-4ecc-46ae-9125-9674819c7eab","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["migration.create_pqt_file(dataset = dataset_name, workspace = workspace_name)"]},{"cell_type":"markdown","id":"bf945d07-544c-4934-b7a6-cfdb90ca725e","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Import the Power Query Template to Dataflows Gen2\n","\n","- Open the [OneLake file explorer](https://www.microsoft.com/download/details.aspx?id=105222) and sync your files (right click -> Sync from OneLake)\n","\n","- Navigate to your lakehouse. From this window, create a new Dataflows Gen2 and import the Power Query Template file from OneLake (OneLake -> Workspace -> Lakehouse -> Files...), and publish the Dataflows Gen2.\n","\n","<div class=\"alert alert-block alert-info\">\n","<b>Important!</b> Make sure to create the Dataflows Gen2 from within the lakehouse window. That will ensure that all the tables automatically map to that lakehouse as the destination. Otherwise, you will have to manually map each table to its destination individually.\n","</div>"]},{"cell_type":"markdown","id":"9975db7d","metadata":{},"source":["### Create the Direct Lake model based on the import/DQ semantic model\n","\n","Calculated columns are not migrated to the Direct Lake model as they are not supported in Direct Lake mode."]},{"cell_type":"code","execution_count":null,"id":"0a3616b5-566e-414e-a225-fb850d6418dc","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["import time\n","labs.create_blank_semantic_model(dataset = new_dataset_name, workspace = new_dataset_workspace_name, overwrite=False)\n","\n","migration.migrate_calc_tables_to_lakehouse(\n"," dataset = dataset_name,\n"," new_dataset = new_dataset_name,\n"," workspace = workspace_name,\n"," new_dataset_workspace = new_dataset_workspace_name,\n"," lakehouse = lakehouse_name,\n"," lakehouse_workspace = lakehouse_workspace_name\n",")\n","migration.migrate_tables_columns_to_semantic_model(\n"," dataset = dataset_name,\n"," new_dataset = new_dataset_name,\n"," workspace = workspace_name,\n"," new_dataset_workspace = new_dataset_workspace_name,\n"," lakehouse = lakehouse_name,\n"," lakehouse_workspace = lakehouse_workspace_name\n",")\n","migration.migrate_calc_tables_to_semantic_model(\n"," dataset = dataset_name,\n"," new_dataset = new_dataset_name,\n"," workspace = workspace_name,\n"," new_dataset_workspace = new_dataset_workspace_name,\n"," lakehouse = lakehouse_name,\n"," lakehouse_workspace = lakehouse_workspace_name\n",")\n","migration.migrate_model_objects_to_semantic_model(\n"," dataset = dataset_name,\n"," new_dataset = new_dataset_name,\n"," workspace = workspace_name,\n"," new_dataset_workspace = new_dataset_workspace_name\n",")\n","migration.migrate_field_parameters(\n"," dataset = dataset_name,\n"," new_dataset = new_dataset_name,\n"," workspace = workspace_name,\n"," new_dataset_workspace = new_dataset_workspace_name\n",")\n","time.sleep(2)\n","labs.refresh_semantic_model(dataset = new_dataset_name, workspace = new_dataset_workspace_name)\n","migration.refresh_calc_tables(dataset = new_dataset_name, workspace = new_dataset_workspace_name)\n","labs.refresh_semantic_model(dataset = new_dataset_name, workspace = new_dataset_workspace_name)"]},{"cell_type":"markdown","id":"bb98bb13","metadata":{},"source":["### Show migrated/unmigrated objects"]},{"cell_type":"code","execution_count":null,"id":"5db2f22c","metadata":{},"outputs":[],"source":["migration.migration_validation(\n"," dataset = dataset_name,\n"," new_dataset = new_dataset_name, \n"," workspace = workspace_name, \n"," new_dataset_workspace = new_dataset_workspace_name\n",")"]},{"cell_type":"markdown","id":"fa244e9d-87c2-4a66-a7e0-be539a0ac7de","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Rebind all reports using the old semantic model to the new Direct Lake semantic model"]},{"cell_type":"code","execution_count":null,"id":"d4e867cc","metadata":{},"outputs":[],"source":["rep.report_rebind_all(\n"," dataset = dataset_name,\n"," dataset_workspace = workspace_name,\n"," new_dataset = new_dataset_name,\n"," new_dataset_workpace = new_dataset_workspace_name,\n"," report_workspace = None\n",")"]},{"cell_type":"markdown","id":"3365d20d","metadata":{},"source":["### Rebind reports one-by-one (optional)"]},{"cell_type":"code","execution_count":null,"id":"056b7180-d7ac-492c-87e7-ac7d0e4bb929","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["report_name = '' # Enter report name which you want to rebind to the new Direct Lake model\n","\n","rep.report_rebind(\n"," report = report_name,\n"," dataset = new_dataset_name,\n"," report_workspace=workspace_name,\n"," dataset_workspace = new_dataset_workspace_name)"]},{"cell_type":"markdown","id":"526f2327","metadata":{},"source":["### Show unsupported objects"]},{"cell_type":"code","execution_count":null,"id":"a47376d7","metadata":{},"outputs":[],"source":["dfT, dfC, dfR = directlake.show_unsupported_direct_lake_objects(dataset = dataset_name, workspace = workspace_name)\n","\n","print('Calculated Tables are not supported...')\n","display(dfT)\n","print(\"Learn more about Direct Lake limitations here: https://learn.microsoft.com/power-bi/enterprise/directlake-overview#known-issues-and-limitations\")\n","print('Calculated columns are not supported. Columns of binary data type are not supported.')\n","display(dfC)\n","print('Columns used for relationship must be of the same data type.')\n","display(dfR)"]},{"cell_type":"markdown","id":"ed08ba4c","metadata":{},"source":["### Schema check between semantic model tables/columns and lakehouse tables/columns\n","\n","This will list any tables/columns which are in the new semantic model but do not exist in the lakehouse"]},{"cell_type":"code","execution_count":null,"id":"03889ba4","metadata":{},"outputs":[],"source":["directlake.direct_lake_schema_compare(dataset = new_dataset_name, workspace = new_dataset_workspace_name)"]},{"cell_type":"markdown","id":"2229963b","metadata":{},"source":["### Show calculated tables which have been migrated to the Direct Lake semantic model as regular tables"]},{"cell_type":"code","execution_count":null,"id":"dd537d90","metadata":{},"outputs":[],"source":["directlake.list_direct_lake_model_calc_tables(dataset = new_dataset_name, workspace = new_dataset_workspace_name)"]}],"metadata":{"kernel_info":{"name":"synapse_pyspark"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.12.3"},"microsoft":{"language":"python"},"nteract":{"version":"nteract-front-end@1.0.0"},"spark_compute":{"compute_id":"/trident/default"},"synapse_widget":{"state":{},"version":"0.1"},"widgets":{}},"nbformat":4,"nbformat_minor":5}
@@ -0,0 +1 @@
1
+ {"cells":[{"cell_type":"markdown","id":"5c27dfd1-4fe0-4a97-92e6-ddf78889aa93","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Install the latest .whl package\n","\n","Check [here](https://pypi.org/project/semantic-link-labs/) to see the latest version."]},{"cell_type":"code","execution_count":null,"id":"d5cae9db-cef9-48a8-a351-9c5fcc99645c","metadata":{"jupyter":{"outputs_hidden":true,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["%pip install semantic-link-labs"]},{"cell_type":"markdown","id":"cd8de5a0","metadata":{},"source":["### Import the library"]},{"cell_type":"code","execution_count":null,"id":"5cc6eedf","metadata":{},"outputs":[],"source":["import sempy_labs as labs\n","from sempy_labs import lakehouse as lake\n","from sempy_labs import directlake\n","import sempy_labs.report as rep\n","\n","dataset_name = ''\n","workspace_name = None"]},{"cell_type":"markdown","id":"5a3fe6e8-b8aa-4447-812b-7931831e07fe","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Vertipaq Analyzer"]},{"cell_type":"code","execution_count":null,"id":"cde43b47-4ecc-46ae-9125-9674819c7eab","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["labs.vertipaq_analyzer(dataset=dataset_name, workspace=workspace_name)"]},{"cell_type":"markdown","id":"419a348f","metadata":{},"source":["Export the Vertipaq Analyzer results to a .zip file in your lakehouse"]},{"cell_type":"code","execution_count":null,"id":"8aa239b3","metadata":{},"outputs":[],"source":["labs.vertipaq_analyzer(dataset=dataset_name, workspace=workspace_name, export='zip')"]},{"cell_type":"markdown","id":"2dce0f4f","metadata":{},"source":["Export the Vertipaq Analyzer results to append to delta tables in your lakehouse."]},{"cell_type":"code","execution_count":null,"id":"aef93fc8","metadata":{},"outputs":[],"source":["labs.vertipaq_analyzer(dataset=dataset_name, workspace=workspace_name, export='table')"]},{"cell_type":"markdown","id":"1c62a802","metadata":{},"source":["Visualize the contents of an exported Vertipaq Analyzer .zip file."]},{"cell_type":"code","execution_count":null,"id":"9e349954","metadata":{},"outputs":[],"source":["labs.import_vertipaq_analyzer(folder_path='', file_name='')"]},{"cell_type":"markdown","id":"456ce0ff","metadata":{},"source":["### Best Practice Analzyer\n","\n","This runs the [standard rules](https://github.com/microsoft/Analysis-Services/tree/master/BestPracticeRules) for semantic models posted on Microsoft's GitHub."]},{"cell_type":"code","execution_count":null,"id":"0a3616b5-566e-414e-a225-fb850d6418dc","metadata":{"jupyter":{"outputs_hidden":false,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["labs.run_model_bpa(dataset=dataset_name, workspace=workspace_name)"]},{"cell_type":"markdown","id":"6fb32a58","metadata":{},"source":["This runs the Best Practice Analyzer and exports the results to the 'modelbparesults' delta table in your Fabric lakehouse."]},{"cell_type":"code","execution_count":null,"id":"677851c3","metadata":{},"outputs":[],"source":["labs.run_model_bpa(dataset=dataset_name, workspace=workspace_name, export=True)"]},{"cell_type":"markdown","id":"64968a31","metadata":{},"source":["This runs the Best Practice Analyzer with the rules translated into Italian."]},{"cell_type":"code","execution_count":null,"id":"3c7d89e2","metadata":{},"outputs":[],"source":["labs.run_model_bpa(dataset=dataset_name, workspace=workspace_name, language ='italian')"]},{"cell_type":"markdown","id":"255c30bb","metadata":{},"source":["<div class=\"alert alert-block alert-info\">\n","<b>Note:</b> For analyzing model BPA results at scale, see the Best Practice Analyzer Report notebook (link below).\n","</div>\n","\n","[Best Practice Analyzer Notebook](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Best%20Practice%20Analyzer%20Report.ipynb)"]},{"cell_type":"markdown","id":"bab18a61","metadata":{},"source":["### Run BPA using your own best practice rules"]},{"cell_type":"code","execution_count":null,"id":"59b89387","metadata":{},"outputs":[],"source":["import sempy\n","sempy.fabric._client._utils._init_analysis_services()\n","import Microsoft.AnalysisServices.Tabular as TOM\n","import pandas as pd\n","\n","dataset_name = ''\n","workspace_name = ''\n","\n","rules = pd.DataFrame(\n"," [\n"," (\n"," \"Performance\",\n"," \"Table\",\n"," \"Warning\",\n"," \"Rule name...\",\n"," lambda obj, tom: tom.is_calculated_table(table_name=obj.Name),\n"," 'Rule description...',\n"," '',\n"," ),\n"," (\n"," \"Performance\",\n"," \"Column\",\n"," \"Warning\",\n"," \"Do not use floating point data types\",\n"," lambda obj, tom: obj.DataType == TOM.DataType.Double,\n"," 'The \"Double\" floating point data type should be avoided, as it can result in unpredictable roundoff errors and decreased performance in certain scenarios. Use \"Int64\" or \"Decimal\" where appropriate (but note that \"Decimal\" is limited to 4 digits after the decimal sign).',\n"," )\n"," ],\n"," columns=[\n"," \"Category\",\n"," \"Scope\",\n"," \"Severity\",\n"," \"Rule Name\",\n"," \"Expression\",\n"," \"Description\",\n"," \"URL\",\n"," ],\n",")\n","\n","labs.run_model_bpa(dataset=dataset_name, workspace=workspace_name, rules=rules)"]},{"cell_type":"markdown","id":"8126a1a1","metadata":{},"source":["### Direct Lake\n","\n","Check if any lakehouse tables will hit the [Direct Lake guardrails](https://learn.microsoft.com/power-bi/enterprise/directlake-overview#fallback)."]},{"cell_type":"code","execution_count":null,"id":"e7397b15","metadata":{},"outputs":[],"source":["lake.get_lakehouse_tables(lakehouse=None, workspace=None, extended=True, count_rows=False)"]},{"cell_type":"code","execution_count":null,"id":"b30074cf","metadata":{},"outputs":[],"source":["lake.get_lakehouse_tables(lakehouse=None, workspace=None, extended=True, count_rows=False, export=True)"]},{"cell_type":"markdown","id":"99b84f2b","metadata":{},"source":["Check if any tables in a Direct Lake semantic model will fall back to DirectQuery."]},{"cell_type":"code","execution_count":null,"id":"f837be58","metadata":{},"outputs":[],"source":["directlake.check_fallback_reason(dataset=dataset_name, workspace=workspace_name)"]},{"cell_type":"markdown","id":"8f6df93e","metadata":{},"source":["### [OPTIMIZE](https://docs.delta.io/latest/optimizations-oss.html) your lakehouse delta tables."]},{"cell_type":"code","execution_count":null,"id":"e0262c9e","metadata":{},"outputs":[],"source":["lake.optimize_lakehouse_tables(tables=['', ''], lakehouse=None, workspace=workspace_name)"]},{"cell_type":"markdown","id":"0091d6a0","metadata":{},"source":["Refresh/reframe your Direct Lake semantic model and restore the columns which were in memory prior to the refresh."]},{"cell_type":"code","execution_count":null,"id":"77eef082","metadata":{},"outputs":[],"source":["directlake.warm_direct_lake_cache_isresident(dataset=dataset_name, workspace=workspace_name)"]},{"cell_type":"markdown","id":"dae1a210","metadata":{},"source":["Ensure a warm cache for your users by putting the columns of a Direct Lake semantic model into memory based on the contents of a [perspective](https://learn.microsoft.com/analysis-services/tabular-models/perspectives-ssas-tabular?view=asallproducts-allversions).\n","\n","Perspectives can be created either in [Tabular Editor 3](https://github.com/TabularEditor/TabularEditor3/releases/latest) or in [Tabular Editor 2](https://github.com/TabularEditor/TabularEditor/releases/latest) using the [Perspective Editor](https://www.elegantbi.com/post/perspectiveeditor)."]},{"cell_type":"code","execution_count":null,"id":"43297001","metadata":{},"outputs":[],"source":["directlake.warm_direct_lake_cache_perspective(\n"," dataset=dataset_name,\n"," workspace=workspace_name,\n"," perspective='',\n"," add_dependencies=True\n",")"]}],"metadata":{"kernel_info":{"name":"synapse_pyspark"},"kernelspec":{"display_name":"Synapse PySpark","language":"Python","name":"synapse_pyspark"},"language_info":{"name":"python"},"microsoft":{"language":"python"},"nteract":{"version":"nteract-front-end@1.0.0"},"spark_compute":{"compute_id":"/trident/default"},"synapse_widget":{"state":{},"version":"0.1"},"widgets":{}},"nbformat":4,"nbformat_minor":5}
@@ -0,0 +1 @@
1
+ {"cells":[{"cell_type":"markdown","id":"5c27dfd1-4fe0-4a97-92e6-ddf78889aa93","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Install the latest .whl package\n","\n","Check [here](https://pypi.org/project/semantic-link-labs/) to see the latest version."]},{"cell_type":"code","execution_count":null,"id":"d5cae9db-cef9-48a8-a351-9c5fcc99645c","metadata":{"jupyter":{"outputs_hidden":true,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["%pip install semantic-link-labs"]},{"cell_type":"markdown","id":"b195eae8","metadata":{},"source":["### Import the library and necessary packages"]},{"cell_type":"code","execution_count":null,"id":"1344e286","metadata":{},"outputs":[],"source":["import sempy_labs as labs\n","from sempy_labs import ConnectWarehouse\n","from sempy_labs import ConnectLakehouse\n","\n","lakehouse_name = ''\n","lakehouse_workspace_name = ''\n","warehouse_name = ''\n","warehouse_workspace_name = ''"]},{"cell_type":"markdown","id":"55e5ca67","metadata":{},"source":["### Run a SQL query (or queries) against a Fabric warehouse"]},{"cell_type":"code","execution_count":null,"id":"a9f984e9","metadata":{},"outputs":[],"source":["with ConnectWarehouse(warehouse=warehouse_name, workspace=warehouse_workspace_name) as sql:\n"," df = sql.query(\"SELECT * FROM Product\")\n"," display(df)"]},{"cell_type":"code","execution_count":null,"id":"865ac4a1","metadata":{},"outputs":[],"source":["with ConnectWarehouse(warehouse=warehouse_name, workspace=warehouse_workspace_name) as sql:\n"," dfs = sql.query([\"SELECT * FROM Product\", \"SELECT DISTINCT [Category] FROM Product\"])\n","\n","for df in dfs:\n"," display(df)"]},{"cell_type":"markdown","id":"bca53cd8","metadata":{},"source":["#### See the tables in a warehouse"]},{"cell_type":"code","execution_count":null,"id":"9af2cce7","metadata":{},"outputs":[],"source":["labs.get_warehouse_tables(warehouse=warehouse_name, workspace=warehouse_workspace_name)"]},{"cell_type":"markdown","id":"765f99ae","metadata":{},"source":["#### See the columns in each table in a warehouse"]},{"cell_type":"code","execution_count":null,"id":"1fabe168","metadata":{},"outputs":[],"source":["labs.get_warehouse_columns(warehouse=warehouse_name, workspace=warehouse_workspace_name)"]},{"cell_type":"markdown","id":"634700c3","metadata":{},"source":["### Run a T-SQL query (or queries) against a Fabric warehouse"]},{"cell_type":"code","execution_count":null,"id":"5dbf34f3","metadata":{},"outputs":[],"source":["with ConnectWarehouse(warehouse=warehouse_name, workspace=warehouse_workspace_name) as sql:\n"," sql.query(\"CREATE SCHEMA [Business]\")"]},{"cell_type":"code","execution_count":null,"id":"ec8ddb81","metadata":{},"outputs":[],"source":["with ConnectWarehouse(warehouse=warehouse_name, workspace=warehouse_workspace_name) as sql:\n"," sql.query([\"CREATE SCHEMA [Business]\", \"CREATE SCHEMA [Marketing]\"])"]},{"cell_type":"markdown","id":"d5b090da","metadata":{},"source":["### Run a SQL query (or queries) against a Fabric lakehouse"]},{"cell_type":"code","execution_count":null,"id":"4dca7f4a","metadata":{},"outputs":[],"source":["with ConnectLakehouse(lakehouse=lakehouse_name, workspace=lakehouse_workspace_name) as sql:\n"," df = sql.query(\"SELECT * FROM Product\")\n"," display(df)"]},{"cell_type":"code","execution_count":null,"id":"b9606ae8","metadata":{},"outputs":[],"source":["with ConnectLakehouse(lakehouse=lakehouse_name, workspace=lakehouse_workspace_name) as sql:\n"," dfs = sql.query([\"SELECT * FROM Product\", \"SELECT DISTINCT [Category] FROM Product\"])\n","\n","for df in dfs:\n"," display(df)"]}],"metadata":{"kernel_info":{"name":"synapse_pyspark"},"kernelspec":{"display_name":"Synapse PySpark","language":"Python","name":"synapse_pyspark"},"language_info":{"name":"python"},"microsoft":{"language":"python"},"nteract":{"version":"nteract-front-end@1.0.0"},"spark_compute":{"compute_id":"/trident/default"},"synapse_widget":{"state":{},"version":"0.1"},"widgets":{}},"nbformat":4,"nbformat_minor":5}
@@ -0,0 +1 @@
1
+ {"cells":[{"cell_type":"markdown","id":"5c27dfd1-4fe0-4a97-92e6-ddf78889aa93","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Install the latest .whl package\n","\n","Check [here](https://pypi.org/project/semantic-link-labs/) to see the latest version."]},{"cell_type":"code","execution_count":null,"id":"d5cae9db-cef9-48a8-a351-9c5fcc99645c","metadata":{"jupyter":{"outputs_hidden":true,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["%pip install semantic-link-labs"]},{"cell_type":"markdown","id":"b195eae8","metadata":{},"source":["### Import the library and set the initial parameters"]},{"cell_type":"code","execution_count":null,"id":"1344e286","metadata":{},"outputs":[],"source":["import sempy.fabric as fabric\n","import sempy_labs as labs\n","dataset = '' # Enter your dataset name\n","workspace = None # Enter your workspace name (if set to None it will use the workspace in which the notebook is running)"]},{"cell_type":"markdown","id":"5a3fe6e8-b8aa-4447-812b-7931831e07fe","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Refresh a semantic model"]},{"cell_type":"code","execution_count":null,"id":"9e349954","metadata":{},"outputs":[],"source":["labs.refresh_semantic_model(dataset=dataset, workspace=workspace)"]},{"cell_type":"markdown","id":"65db8187","metadata":{},"source":["#### Visualize the refresh of a semantic model\n","The resulting dataframe returns the trace logs capturing the details of the refresh operation"]},{"cell_type":"code","execution_count":null,"id":"24de391e","metadata":{},"outputs":[],"source":["df = labs.refresh_semantic_model(dataset=dataset, workspace=workspace, visualize=True)"]},{"cell_type":"markdown","id":"113b04a7","metadata":{},"source":["#### Refresh specific tables"]},{"cell_type":"code","execution_count":null,"id":"b4e1296b","metadata":{},"outputs":[],"source":["labs.refresh_semantic_model(dataset=dataset, workspace=workspace, tables=['Sales', 'Geography'])"]},{"cell_type":"markdown","id":"7f94b13a","metadata":{},"source":["#### Refresh specific partitions"]},{"cell_type":"code","execution_count":null,"id":"17565d35","metadata":{},"outputs":[],"source":["labs.refresh_semantic_model(dataset=dataset, workspace=workspace, partitions=[\"'Sales'[Sales FY20]\", \"'Sales'[Sales FY21]\"])"]},{"cell_type":"markdown","id":"aab5ca7c","metadata":{},"source":["#### Refresh a combination of tables and partitions"]},{"cell_type":"code","execution_count":null,"id":"e5818bd1","metadata":{},"outputs":[],"source":["labs.refresh_semantic_model(dataset=dataset, workspace=workspace, tables=['Geography', 'Calendar'], partitions=[\"'Sales'[Sales FY20]\", \"'Sales'[Sales FY21]\"])"]},{"cell_type":"markdown","id":"7f7074ea","metadata":{},"source":["#### Clear the values of a table"]},{"cell_type":"code","execution_count":null,"id":"3b1eb772","metadata":{},"outputs":[],"source":["labs.refresh_semantic_model(dataset=dataset, workspace=workspace, refresh_type='clearValues')"]},{"cell_type":"markdown","id":"29afede1","metadata":{},"source":["### View semantic model refreshes"]},{"cell_type":"code","execution_count":null,"id":"95c52cc0","metadata":{},"outputs":[],"source":["fabric.list_refresh_requests(dataset=dataset, workspace=workspace)"]},{"cell_type":"markdown","id":"fa7c525c","metadata":{},"source":["### Cancel a semantic model refresh"]},{"cell_type":"code","execution_count":null,"id":"5bb6f79f","metadata":{},"outputs":[],"source":["labs.cancel_dataset_refresh(dataset=dataset, workspace=workspace)"]},{"cell_type":"code","execution_count":null,"id":"acd34900","metadata":{},"outputs":[],"source":["# Specify the request_id based on a value from list_refresh_requests\n","labs.cancel_dataset_refresh(dataset=dataset, workspace=workspace, request_id='')"]},{"cell_type":"markdown","id":"26300103","metadata":{},"source":["### View a semantic model's refresh history"]},{"cell_type":"code","execution_count":null,"id":"60cec3f8","metadata":{},"outputs":[],"source":["labs.get_semantic_model_refresh_history(dataset=dataset, workspace=workspace)"]},{"cell_type":"markdown","id":"538d5f1e","metadata":{},"source":["### View details of a specific semantic model refresh"]},{"cell_type":"code","execution_count":null,"id":"c043f9bc","metadata":{},"outputs":[],"source":["labs.get_semantic_model_refresh_history(dataset=dataset, workspace=workspace, request_id='')"]}],"metadata":{"kernel_info":{"name":"synapse_pyspark"},"kernelspec":{"display_name":"Synapse PySpark","language":"Python","name":"synapse_pyspark"},"language_info":{"name":"python"},"microsoft":{"language":"python"},"nteract":{"version":"nteract-front-end@1.0.0"},"spark_compute":{"compute_id":"/trident/default"},"synapse_widget":{"state":{},"version":"0.1"},"widgets":{}},"nbformat":4,"nbformat_minor":5}
@@ -7,7 +7,7 @@ name="semantic-link-labs"
7
7
  authors = [
8
8
  { name = "Microsoft Corporation" },
9
9
  ]
10
- version="0.8.3"
10
+ version="0.8.4"
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.0",
26
+ "semantic-link-sempy>=0.8.1",
27
27
  "anytree",
28
28
  "powerbiclient",
29
29
  "polib",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: semantic-link-labs
3
- Version: 0.8.3
3
+ Version: 0.8.4
4
4
  Summary: Semantic Link Labs for Microsoft Fabric
5
5
  Author: Microsoft Corporation
6
6
  License: MIT License
@@ -15,7 +15,7 @@ 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.0
18
+ Requires-Dist: semantic-link-sempy>=0.8.1
19
19
  Requires-Dist: anytree
20
20
  Requires-Dist: powerbiclient
21
21
  Requires-Dist: polib
@@ -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.3&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
30
+ [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.8.4&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
 
@@ -37,6 +37,10 @@ Requires-Dist: pytest>=8.2.1; extra == "test"
37
37
 
38
38
  Semantic Link Labs is a Python library designed for use in [Microsoft Fabric notebooks](https://learn.microsoft.com/fabric/data-engineering/how-to-use-notebook). This library extends the capabilities of [Semantic Link](https://learn.microsoft.com/fabric/data-science/semantic-link-overview) offering additional functionalities to seamlessly integrate and work alongside it. The goal of Semantic Link Labs is to simplify technical processes, empowering people to focus on higher level activities and allowing tasks that are better suited for machines to be efficiently handled without human intervention.
39
39
 
40
+ If you encounter any issues, please [raise a bug](https://github.com/microsoft/semantic-link-labs/issues/new?assignees=&labels=&projects=&template=bug_report.md&title=).
41
+
42
+ If you have ideas for new features/functions, please [request a feature](https://github.com/microsoft/semantic-link-labs/issues/new?assignees=&labels=&projects=&template=feature_request.md&title=).
43
+
40
44
  ## Featured Scenarios
41
45
  * Semantic Models
42
46
  * [Migrating an import/DirectQuery semantic model to Direct Lake](https://github.com/microsoft/semantic-link-labs?tab=readme-ov-file#direct-lake-migration)
@@ -47,26 +51,46 @@ Semantic Link Labs is a Python library designed for use in [Microsoft Fabric not
47
51
  * [Check Direct Lake Guardrails](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.lakehouse.html#sempy_labs.lakehouse.get_lakehouse_tables)
48
52
  * [Refresh](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Semantic%20Model%20Refresh.ipynb), [clear cache](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.clear_cache), [backup](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.backup_semantic_model), [restore](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.restore_semantic_model), [copy backup files](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.copy_semantic_model_backup_file), [move/deploy across workspaces](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.deploy_semantic_model)
49
53
  * [Run DAX queries which impersonate a user](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.evaluate_dax_impersonation)
50
- * [Manage Query Scale Out](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Query%20Scale%20Out.ipynb).
54
+ * [Manage Query Scale Out](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Query%20Scale%20Out.ipynb)
51
55
  * [Auto-generate descriptions for any/all measures in bulk](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.tom.html#sempy_labs.tom.TOMWrapper.generate_measure_descriptions)
56
+ * [Warm the cache of a Direct Lake semantic model after a refresh (using columns currently in memory)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.directlake.html#sempy_labs.directlake.warm_direct_lake_cache_isresident)
57
+ * [Warm the cache of a Direct Lake semantic model (via perspective)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.directlake.html#sempy_labs.directlake.warm_direct_lake_cache_perspective)
58
+ * [Visualize a refresh](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Semantic%20Model%20Refresh.ipynb)
52
59
  * Reports
53
60
  * [Report Best Practice Analyzer (BPA)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.report.html#sempy_labs.report.run_report_bpa)
54
61
  * [View report metadata](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Report%20Analysis.ipynb)
55
62
  * [View semantic model objects most frequently used in Power BI reports](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.list_semantic_model_object_report_usage)
56
63
  * [View broken reports](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.list_report_semantic_model_objects)
64
+ * [Set a report theme](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.report.html#sempy_labs.report.ReportWrapper.set_theme)
65
+ * [Migrate report-level measures to the semantic model](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.report.html#sempy_labs.report.ReportWrapper.migrate_report_level_measures)
57
66
  * [Rebind reports](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.report.html#sempy_labs.report.report_rebind)
58
67
  * Capacities
59
68
  * [Migrating a Power BI Premium capacity (P sku) to a Fabric capacity (F sku)](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Capacity%20Migration.ipynb)
69
+ * [Migrating a Fabric Trial capacity (FT sku) to a Fabric capacity (F sku)](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Capacity%20Migration.ipynb)
60
70
  * [Create](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.create_fabric_capacity)/[update](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.update_fabric_capacity)/[suspend](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.suspend_fabric_capacity)/[resume](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.resume_fabric_capacity) Fabric capacities.
71
+ * Lakehouses
72
+ * [Optimize lakehouse tables](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.lakehouse.html#sempy_labs.lakehouse.optimize_lakehouse_tables)
73
+ * [Vacuum lakehouse tables](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.lakehouse.html#sempy_labs.lakehouse.vacuum_lakehouse_tables)
61
74
  * APIs
62
75
  * Wrapper functions for [Power BI](https://learn.microsoft.com/rest/api/power-bi/), [Fabric](https://learn.microsoft.com/rest/api/fabric/articles/using-fabric-apis), and [Azure (Fabric Capacity)](https://learn.microsoft.com/rest/api/microsoftfabric/fabric-capacities?view=rest-microsoftfabric-2023-11-01) APIs
63
76
 
77
+ ## Helper Notebooks
64
78
 
65
- ### Check out the [helper notebooks](https://github.com/microsoft/semantic-link-labs/tree/main/notebooks) for getting started!
79
+ Check out the [helper notebooks](https://github.com/microsoft/semantic-link-labs/tree/main/notebooks) for getting started!
80
+ Run the code below to load all the helper notebooks to the workspace of your choice at once.
81
+ ```python
82
+ import sempy_labs as labs
83
+ import requests
66
84
 
67
- If you encounter any issues, please [raise a bug](https://github.com/microsoft/semantic-link-labs/issues/new?assignees=&labels=&projects=&template=bug_report.md&title=).
85
+ workspace_name = None # Update this to the workspace in which you want to save the notebooks
86
+ api_url = "https://api.github.com/repos/microsoft/semantic-link-labs/contents/notebooks"
87
+ response = requests.get(api_url)
88
+ files = response.json()
89
+ notebook_files = {file['name'][:-6]: file['html_url'] for file in files if file['name'].endswith('.ipynb')}
68
90
 
69
- If you have ideas for new features/functions, please [request a feature](https://github.com/microsoft/semantic-link-labs/issues/new?assignees=&labels=&projects=&template=feature_request.md&title=).
91
+ for file_name, file_url in notebook_files.items():
92
+ labs.import_notebook_from_web(notebook_name=file_name, url=file_url, workspace=workspace_name)
93
+ ```
70
94
 
71
95
  ## Install the library in a Fabric notebook
72
96
  ```python
@@ -85,7 +109,7 @@ from sempy_labs import ConnectWarehouse
85
109
  from sempy_labs import ConnectLakehouse
86
110
  ```
87
111
 
88
- ## Load semantic-link-labs into a custom [Fabric environment](https://learn.microsoft.com/fabric/data-engineering/create-and-use-environment)
112
+ ## Load Semantic Link Labs into a custom [Fabric environment](https://learn.microsoft.com/fabric/data-engineering/create-and-use-environment)
89
113
  An even better way to ensure the semantic-link-labs library is available in your workspace/notebooks is to load it as a library in a custom Fabric environment. If you do this, you will not have to run the above '%pip install' code every time in your notebook. Please follow the steps below.
90
114
 
91
115
  #### Create a custom environment
@@ -106,6 +130,7 @@ An even better way to ensure the semantic-link-labs library is available in your
106
130
  2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
107
131
 
108
132
  ## Version History
133
+ * [0.8.4](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.4) (October 30, 2024)
109
134
  * [0.8.3](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.3) (October 14, 2024)
110
135
  * [0.8.2](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.2) (October 2, 2024)
111
136
  * [0.8.1](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.1) (October 2, 2024)
@@ -55,6 +55,7 @@ src/sempy_labs/_icons.py
55
55
  src/sempy_labs/_kql_databases.py
56
56
  src/sempy_labs/_kql_querysets.py
57
57
  src/sempy_labs/_list_functions.py
58
+ src/sempy_labs/_managed_private_endpoints.py
58
59
  src/sempy_labs/_mirrored_warehouses.py
59
60
  src/sempy_labs/_ml_experiments.py
60
61
  src/sempy_labs/_ml_models.py
@@ -72,6 +73,7 @@ src/sempy_labs/_sql.py
72
73
  src/sempy_labs/_translations.py
73
74
  src/sempy_labs/_vertipaq.py
74
75
  src/sempy_labs/_warehouses.py
76
+ src/sempy_labs/_workloads.py
75
77
  src/sempy_labs/_workspace_identity.py
76
78
  src/sempy_labs/_workspaces.py
77
79
  src/sempy_labs/_bpa_translation/_model/_translations_am-ET.po
@@ -144,6 +146,7 @@ src/sempy_labs/migration/_refresh_calc_tables.py
144
146
  src/sempy_labs/report/_BPAReportTemplate.json
145
147
  src/sempy_labs/report/__init__.py
146
148
  src/sempy_labs/report/_generate_report.py
149
+ src/sempy_labs/report/_paginated.py
147
150
  src/sempy_labs/report/_report_bpa.py
148
151
  src/sempy_labs/report/_report_bpa_rules.py
149
152
  src/sempy_labs/report/_report_functions.py
@@ -1,4 +1,4 @@
1
- semantic-link-sempy>=0.8.0
1
+ semantic-link-sempy>=0.8.1
2
2
  anytree
3
3
  powerbiclient
4
4
  polib