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