semantic-link-labs 0.7.3__py3-none-any.whl → 0.8.0__py3-none-any.whl

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 (75) hide show
  1. {semantic_link_labs-0.7.3.dist-info → semantic_link_labs-0.8.0.dist-info}/METADATA +19 -4
  2. {semantic_link_labs-0.7.3.dist-info → semantic_link_labs-0.8.0.dist-info}/RECORD +75 -50
  3. {semantic_link_labs-0.7.3.dist-info → semantic_link_labs-0.8.0.dist-info}/WHEEL +1 -1
  4. sempy_labs/__init__.py +109 -31
  5. sempy_labs/_bpa_translation/{_translations_am-ET.po → _model/_translations_am-ET.po} +22 -0
  6. sempy_labs/_bpa_translation/{_translations_ar-AE.po → _model/_translations_ar-AE.po} +24 -0
  7. sempy_labs/_bpa_translation/_model/_translations_bg-BG.po +938 -0
  8. sempy_labs/_bpa_translation/_model/_translations_ca-ES.po +934 -0
  9. sempy_labs/_bpa_translation/{_translations_cs-CZ.po → _model/_translations_cs-CZ.po} +179 -157
  10. sempy_labs/_bpa_translation/{_translations_da-DK.po → _model/_translations_da-DK.po} +24 -0
  11. sempy_labs/_bpa_translation/{_translations_de-DE.po → _model/_translations_de-DE.po} +77 -52
  12. sempy_labs/_bpa_translation/{_translations_el-GR.po → _model/_translations_el-GR.po} +25 -0
  13. sempy_labs/_bpa_translation/{_translations_es-ES.po → _model/_translations_es-ES.po} +67 -43
  14. sempy_labs/_bpa_translation/{_translations_fa-IR.po → _model/_translations_fa-IR.po} +24 -0
  15. sempy_labs/_bpa_translation/_model/_translations_fi-FI.po +915 -0
  16. sempy_labs/_bpa_translation/{_translations_fr-FR.po → _model/_translations_fr-FR.po} +83 -57
  17. sempy_labs/_bpa_translation/{_translations_ga-IE.po → _model/_translations_ga-IE.po} +25 -0
  18. sempy_labs/_bpa_translation/{_translations_he-IL.po → _model/_translations_he-IL.po} +23 -0
  19. sempy_labs/_bpa_translation/{_translations_hi-IN.po → _model/_translations_hi-IN.po} +24 -0
  20. sempy_labs/_bpa_translation/{_translations_hu-HU.po → _model/_translations_hu-HU.po} +25 -0
  21. sempy_labs/_bpa_translation/_model/_translations_id-ID.po +918 -0
  22. sempy_labs/_bpa_translation/{_translations_is-IS.po → _model/_translations_is-IS.po} +25 -0
  23. sempy_labs/_bpa_translation/{_translations_it-IT.po → _model/_translations_it-IT.po} +25 -0
  24. sempy_labs/_bpa_translation/{_translations_ja-JP.po → _model/_translations_ja-JP.po} +21 -0
  25. sempy_labs/_bpa_translation/_model/_translations_ko-KR.po +823 -0
  26. sempy_labs/_bpa_translation/_model/_translations_mt-MT.po +937 -0
  27. sempy_labs/_bpa_translation/{_translations_nl-NL.po → _model/_translations_nl-NL.po} +80 -56
  28. sempy_labs/_bpa_translation/{_translations_pl-PL.po → _model/_translations_pl-PL.po} +101 -76
  29. sempy_labs/_bpa_translation/{_translations_pt-BR.po → _model/_translations_pt-BR.po} +25 -0
  30. sempy_labs/_bpa_translation/{_translations_pt-PT.po → _model/_translations_pt-PT.po} +25 -0
  31. sempy_labs/_bpa_translation/_model/_translations_ro-RO.po +939 -0
  32. sempy_labs/_bpa_translation/{_translations_ru-RU.po → _model/_translations_ru-RU.po} +25 -0
  33. sempy_labs/_bpa_translation/_model/_translations_sk-SK.po +925 -0
  34. sempy_labs/_bpa_translation/_model/_translations_sl-SL.po +922 -0
  35. sempy_labs/_bpa_translation/{_translations_ta-IN.po → _model/_translations_ta-IN.po} +26 -0
  36. sempy_labs/_bpa_translation/{_translations_te-IN.po → _model/_translations_te-IN.po} +24 -0
  37. sempy_labs/_bpa_translation/{_translations_th-TH.po → _model/_translations_th-TH.po} +24 -0
  38. sempy_labs/_bpa_translation/_model/_translations_tr-TR.po +925 -0
  39. sempy_labs/_bpa_translation/_model/_translations_uk-UA.po +933 -0
  40. sempy_labs/_bpa_translation/{_translations_zh-CN.po → _model/_translations_zh-CN.po} +116 -97
  41. sempy_labs/_bpa_translation/{_translations_zu-ZA.po → _model/_translations_zu-ZA.po} +25 -0
  42. sempy_labs/_capacities.py +577 -0
  43. sempy_labs/_capacity_migration.py +624 -0
  44. sempy_labs/_clear_cache.py +8 -8
  45. sempy_labs/_connections.py +140 -0
  46. sempy_labs/_environments.py +156 -0
  47. sempy_labs/_git.py +20 -21
  48. sempy_labs/_helper_functions.py +151 -10
  49. sempy_labs/_icons.py +62 -0
  50. sempy_labs/_list_functions.py +232 -887
  51. sempy_labs/_model_bpa.py +8 -32
  52. sempy_labs/_notebooks.py +143 -0
  53. sempy_labs/_query_scale_out.py +30 -8
  54. sempy_labs/_spark.py +460 -0
  55. sempy_labs/_sql.py +88 -19
  56. sempy_labs/_translations.py +3 -0
  57. sempy_labs/_vertipaq.py +162 -99
  58. sempy_labs/_workspaces.py +294 -0
  59. sempy_labs/admin/__init__.py +53 -0
  60. sempy_labs/admin/_basic_functions.py +806 -0
  61. sempy_labs/admin/_domains.py +411 -0
  62. sempy_labs/directlake/_directlake_schema_sync.py +1 -2
  63. sempy_labs/directlake/_generate_shared_expression.py +11 -14
  64. sempy_labs/directlake/_update_directlake_model_lakehouse_connection.py +14 -24
  65. sempy_labs/report/__init__.py +9 -6
  66. sempy_labs/report/_report_bpa.py +359 -0
  67. sempy_labs/report/_report_bpa_rules.py +113 -0
  68. sempy_labs/report/_report_helper.py +254 -0
  69. sempy_labs/report/_report_list_functions.py +95 -0
  70. sempy_labs/report/_report_rebind.py +0 -4
  71. sempy_labs/report/_reportwrapper.py +2039 -0
  72. sempy_labs/tom/_model.py +83 -5
  73. {semantic_link_labs-0.7.3.dist-info → semantic_link_labs-0.8.0.dist-info}/LICENSE +0 -0
  74. {semantic_link_labs-0.7.3.dist-info → semantic_link_labs-0.8.0.dist-info}/top_level.txt +0 -0
  75. /sempy_labs/_bpa_translation/{_translations_sv-SE.po → _model/_translations_sv-SE.po} +0 -0
sempy_labs/tom/_model.py CHANGED
@@ -230,7 +230,10 @@ class TOMWrapper:
230
230
  description: Optional[str] = None,
231
231
  display_folder: Optional[str] = None,
232
232
  format_string_expression: Optional[str] = None,
233
+ data_category: Optional[str] = None,
234
+ lineage_tag: Optional[str] = None,
233
235
  source_lineage_tag: Optional[str] = None,
236
+ detail_rows_expression: Optional[str] = None,
234
237
  ):
235
238
  """
236
239
  Adds a measure to the semantic model.
@@ -253,8 +256,14 @@ class TOMWrapper:
253
256
  The display folder in which the measure will reside.
254
257
  format_string_expression : str, default=None
255
258
  The format string expression.
259
+ data_category : str, default=None
260
+ Specifies the type of data contained in the measure so that you can add custom behaviors based on measure type.
261
+ lineage_tag : str, default=None
262
+ A tag that represents the lineage of the object.
256
263
  source_lineage_tag : str, default=None
257
264
  A tag that represents the lineage of the source for the object.
265
+ detail_rows_expression : str, default=None
266
+ The detail rows expression.
258
267
  """
259
268
  import Microsoft.AnalysisServices.Tabular as TOM
260
269
 
@@ -272,8 +281,16 @@ class TOMWrapper:
272
281
  fsd = TOM.FormatStringDefinition()
273
282
  fsd.Expression = format_string_expression
274
283
  obj.FormatStringDefinition = fsd
284
+ if lineage_tag is not None:
285
+ obj.LineageTag = lineage_tag
275
286
  if source_lineage_tag is not None:
276
287
  obj.SourceLineageTag = source_lineage_tag
288
+ if detail_rows_expression is not None:
289
+ drd = TOM.DetailRowsDefinition()
290
+ drd.Expression = detail_rows_expression
291
+ obj.DetailRowsDefinition = drd
292
+ if data_category is not None:
293
+ obj.DataCategory = data_category
277
294
 
278
295
  self.model.Tables[table_name].Measures.Add(obj)
279
296
 
@@ -290,6 +307,7 @@ class TOMWrapper:
290
307
  data_category: Optional[str] = None,
291
308
  key: Optional[bool] = False,
292
309
  summarize_by: Optional[str] = None,
310
+ lineage_tag: Optional[str] = None,
293
311
  source_lineage_tag: Optional[str] = None,
294
312
  ):
295
313
  """
@@ -320,6 +338,8 @@ class TOMWrapper:
320
338
  summarize_by : str, default=None
321
339
  Sets the value for the Summarize By property of the column.
322
340
  Defaults to None resolves to 'Default'.
341
+ lineage_tag : str, default=None
342
+ A tag that represents the lineage of the object.
323
343
  source_lineage_tag : str, default=None
324
344
  A tag that represents the lineage of the source for the object.
325
345
  """
@@ -354,6 +374,8 @@ class TOMWrapper:
354
374
  obj.DisplayFolder = display_folder
355
375
  if data_category is not None:
356
376
  obj.DataCategory = data_category
377
+ if lineage_tag is not None:
378
+ obj.LineageTag = lineage_tag
357
379
  if source_lineage_tag is not None:
358
380
  obj.SourceLineageTag = source_lineage_tag
359
381
  self.model.Tables[table_name].Columns.Add(obj)
@@ -371,6 +393,7 @@ class TOMWrapper:
371
393
  data_category: Optional[str] = None,
372
394
  key: Optional[bool] = False,
373
395
  summarize_by: Optional[str] = None,
396
+ lineage_tag: Optional[str] = None,
374
397
  source_lineage_tag: Optional[str] = None,
375
398
  ):
376
399
  """
@@ -401,6 +424,8 @@ class TOMWrapper:
401
424
  summarize_by : str, default=None
402
425
  Sets the value for the Summarize By property of the column.
403
426
  Defaults to None resolves to 'Default'.
427
+ lineage_tag : str, default=None
428
+ A tag that represents the lineage of the object.
404
429
  source_lineage_tag : str, default=None
405
430
  A tag that represents the lineage of the source for the object.
406
431
  """
@@ -435,6 +460,8 @@ class TOMWrapper:
435
460
  obj.DisplayFolder = display_folder
436
461
  if data_category is not None:
437
462
  obj.DataCategory = data_category
463
+ if lineage_tag is not None:
464
+ obj.LineageTag = lineage_tag
438
465
  if source_lineage_tag is not None:
439
466
  obj.SourceLineageTag = source_lineage_tag
440
467
  self.model.Tables[table_name].Columns.Add(obj)
@@ -452,6 +479,7 @@ class TOMWrapper:
452
479
  data_category: Optional[str] = None,
453
480
  key: Optional[bool] = False,
454
481
  summarize_by: Optional[str] = None,
482
+ lineage_tag: Optional[str] = None,
455
483
  source_lineage_tag: Optional[str] = None,
456
484
  ):
457
485
  """
@@ -482,6 +510,8 @@ class TOMWrapper:
482
510
  summarize_by : str, default=None
483
511
  Sets the value for the Summarize By property of the column.
484
512
  Defaults to None which resolves to 'Default'.
513
+ lineage_tag : str, default=None
514
+ A tag that represents the lineage of the object.
485
515
  source_lineage_tag : str, default=None
486
516
  A tag that represents the lineage of the source for the object.
487
517
  """
@@ -516,6 +546,8 @@ class TOMWrapper:
516
546
  obj.DisplayFolder = display_folder
517
547
  if data_category is not None:
518
548
  obj.DataCategory = data_category
549
+ if lineage_tag is not None:
550
+ obj.LineageTag = lineage_tag
519
551
  if source_lineage_tag is not None:
520
552
  obj.SourceLineageTag = source_lineage_tag
521
553
  self.model.Tables[table_name].Columns.Add(obj)
@@ -677,6 +709,7 @@ class TOMWrapper:
677
709
  levels: Optional[List[str]] = None,
678
710
  hierarchy_description: Optional[str] = None,
679
711
  hierarchy_hidden: Optional[bool] = False,
712
+ lineage_tag: Optional[str] = None,
680
713
  source_lineage_tag: Optional[str] = None,
681
714
  ):
682
715
  """
@@ -696,6 +729,8 @@ class TOMWrapper:
696
729
  A description of the hierarchy.
697
730
  hierarchy_hidden : bool, default=False
698
731
  Whether the hierarchy is visible or hidden.
732
+ lineage_tag : str, default=None
733
+ A tag that represents the lineage of the object.
699
734
  source_lineage_tag : str, default=None
700
735
  A tag that represents the lineage of the source for the object.
701
736
  """
@@ -724,6 +759,8 @@ class TOMWrapper:
724
759
  obj.IsHidden = hierarchy_hidden
725
760
  if hierarchy_description is not None:
726
761
  obj.Description = hierarchy_description
762
+ if lineage_tag is not None:
763
+ obj.LineageTag = lineage_tag
727
764
  if source_lineage_tag is not None:
728
765
  obj.SourceLineageTag = source_lineage_tag
729
766
  self.model.Tables[table_name].Hierarchies.Add(obj)
@@ -871,7 +908,12 @@ class TOMWrapper:
871
908
  self.model.Tables.Add(tbl)
872
909
 
873
910
  def add_expression(
874
- self, name: str, expression: str, description: Optional[str] = None, source_lineage_tag: Optional[str] = None,
911
+ self,
912
+ name: str,
913
+ expression: str,
914
+ description: Optional[str] = None,
915
+ lineage_tag: Optional[str] = None,
916
+ source_lineage_tag: Optional[str] = None,
875
917
  ):
876
918
  """
877
919
  Adds an `expression <https://learn.microsoft.com/dotnet/api/microsoft.analysisservices.tabular.namedexpression?view=analysisservices-dotnet>`_ to a semantic model.
@@ -884,6 +926,8 @@ class TOMWrapper:
884
926
  The M expression of the expression.
885
927
  description : str, default=None
886
928
  A description of the expression.
929
+ lineage_tag : str, default=None
930
+ A tag that represents the lineage of the object.
887
931
  source_lineage_tag : str, default=None
888
932
  A tag that represents the lineage of the source for the object.
889
933
  """
@@ -893,6 +937,8 @@ class TOMWrapper:
893
937
  exp.Name = name
894
938
  if description is not None:
895
939
  exp.Description = description
940
+ if lineage_tag is not None:
941
+ exp.LineageTag = lineage_tag
896
942
  if source_lineage_tag is not None:
897
943
  exp.SourceLineageTag = source_lineage_tag
898
944
  exp.Kind = TOM.ExpressionKind.M
@@ -988,6 +1034,7 @@ class TOMWrapper:
988
1034
  entity_name: str,
989
1035
  expression: Optional[str] = None,
990
1036
  description: Optional[str] = None,
1037
+ schema_name: Optional[str] = None,
991
1038
  ):
992
1039
  """
993
1040
  Adds an entity partition to a table within a semantic model.
@@ -997,12 +1044,14 @@ class TOMWrapper:
997
1044
  table_name : str
998
1045
  Name of the table.
999
1046
  entity_name : str
1000
- Name of the lakehouse table.
1047
+ Name of the lakehouse/warehouse table.
1001
1048
  expression : TOM Object, default=None
1002
1049
  The expression used by the table.
1003
1050
  Defaults to None which resolves to the 'DatabaseQuery' expression.
1004
1051
  description : str, default=None
1005
1052
  A description for the partition.
1053
+ schema_name : str, default=None
1054
+ The schema name.
1006
1055
  """
1007
1056
  import Microsoft.AnalysisServices.Tabular as TOM
1008
1057
 
@@ -1013,6 +1062,8 @@ class TOMWrapper:
1013
1062
  ep.ExpressionSource = self.model.Expressions["DatabaseQuery"]
1014
1063
  else:
1015
1064
  ep.ExpressionSource = self.model.Expressions[expression]
1065
+ if schema_name is not None:
1066
+ ep.SchemaName = schema_name
1016
1067
  p = TOM.Partition()
1017
1068
  p.Name = table_name
1018
1069
  p.Source = ep
@@ -1601,13 +1652,25 @@ class TOMWrapper:
1601
1652
  objType = object.ObjectType
1602
1653
 
1603
1654
  # Have to remove translations and perspectives on the object before removing it.
1604
- if objType in ["Table", "Column", "Measure", "Hierarchy", "Level"]:
1655
+ if objType in [
1656
+ TOM.ObjectType.Table,
1657
+ TOM.ObjectType.Column,
1658
+ TOM.ObjectType.Measure,
1659
+ TOM.ObjectType.Hierarchy,
1660
+ TOM.ObjectType.Level,
1661
+ ]:
1605
1662
  for lang in object.Model.Cultures:
1606
1663
  try:
1607
1664
  self.remove_translation(object=object, language=lang.Name)
1608
1665
  except Exception:
1609
1666
  pass
1610
- if objType in ["Table", "Column", "Measure", "Hierarchy"]:
1667
+ if objType in [
1668
+ TOM.ObjectType.Table,
1669
+ TOM.ObjectType.Column,
1670
+ TOM.ObjectType.Measure,
1671
+ TOM.ObjectType.Hierarchy,
1672
+ TOM.ObjectType.Level,
1673
+ ]:
1611
1674
  for persp in object.Model.Perspectives:
1612
1675
  try:
1613
1676
  self.remove_from_perspective(
@@ -2524,6 +2587,7 @@ class TOMWrapper:
2524
2587
  description: Optional[str] = None,
2525
2588
  data_category: Optional[str] = None,
2526
2589
  hidden: Optional[bool] = False,
2590
+ lineage_tag: Optional[str] = None,
2527
2591
  source_lineage_tag: Optional[str] = None,
2528
2592
  ):
2529
2593
  """
@@ -2539,6 +2603,8 @@ class TOMWrapper:
2539
2603
  The data category for the table.
2540
2604
  hidden : bool, default=False
2541
2605
  Whether the table is hidden or visible.
2606
+ lineage_tag : str, default=None
2607
+ A tag that represents the lineage of the object.
2542
2608
  source_lineage_tag : str, default=None
2543
2609
  A tag that represents the lineage of the source for the object.
2544
2610
  """
@@ -2550,6 +2616,8 @@ class TOMWrapper:
2550
2616
  t.Description = description
2551
2617
  if data_category is not None:
2552
2618
  t.DataCategory = data_category
2619
+ if lineage_tag is not None:
2620
+ t.LineageTag = lineage_tag
2553
2621
  if source_lineage_tag is not None:
2554
2622
  t.SourceLineageTag = source_lineage_tag
2555
2623
  t.Hidden = hidden
@@ -2562,6 +2630,8 @@ class TOMWrapper:
2562
2630
  description: Optional[str] = None,
2563
2631
  data_category: Optional[str] = None,
2564
2632
  hidden: Optional[bool] = False,
2633
+ lineage_tag: Optional[bool] = None,
2634
+ source_lineage_tag: Optional[bool] = None,
2565
2635
  ):
2566
2636
  """
2567
2637
  Adds a calculated table to the semantic model.
@@ -2578,6 +2648,10 @@ class TOMWrapper:
2578
2648
  The data category for the table.
2579
2649
  hidden : bool, default=False
2580
2650
  Whether the table is hidden or visible.
2651
+ lineage_tag : str, default=None
2652
+ A tag that represents the lineage of the object.
2653
+ source_lineage_tag : str, default=None
2654
+ A tag that represents the lineage of the source for the object.
2581
2655
  """
2582
2656
  import Microsoft.AnalysisServices.Tabular as TOM
2583
2657
 
@@ -2594,6 +2668,10 @@ class TOMWrapper:
2594
2668
  t.Description = description
2595
2669
  if data_category is not None:
2596
2670
  t.DataCategory = data_category
2671
+ if lineage_tag is not None:
2672
+ t.LineageTag = lineage_tag
2673
+ if source_lineage_tag is not None:
2674
+ t.SourceLineageTag = source_lineage_tag
2597
2675
  t.Hidden = hidden
2598
2676
  t.Partitions.Add(par)
2599
2677
  self.model.Tables.Add(t)
@@ -3937,7 +4015,7 @@ class TOMWrapper:
3937
4015
  import Microsoft.AnalysisServices.Tabular as TOM
3938
4016
  import System
3939
4017
 
3940
- c = self.model.Tables[table_name].Measures[column_name]
4018
+ c = self.model.Tables[table_name].Columns[column_name]
3941
4019
  if c.Type == TOM.ColumnType.Data:
3942
4020
  if source_column is not None:
3943
4021
  c.SourceColumn = source_column