Skip to content

1.0.0-rc.2+20220703

Pre-release
Pre-release
Compare
Choose a tag to compare
@mthierba mthierba released this 03 Jul 23:47
39ed030
  • #97 Model Deployments
  • #26 Bookmarks (PbixProj v0.12 schema)
  • Fixed #109 'pbi-tools info' no longer fails when another instance of SSAS runs on the same machine
  • #153 Make "CreateOrOverwrite" default import mode
  • Fixed #127 Folder or File sources containing spaces aren't matched (Desktop edition only)
  • Fixed #102 (x-plat conform resolution of TEMP path)
  • Fixed #111 Deployment fails in model-only mode (due to logging)
  • Libraries updated: TOM 19.42.0.4, MSAL 4.45
  • Tested with PBI Desktop 2.106 (June '22)

System params expansion (#157)

  • Explicit manifest parameters can now reference system parameters, including {{ENVIRONMENT}}, {{PBITOOLS_VERSION}}, {{FILE_NAME}}, {{FILE_NAME_WITHOUT_EXT}}, {{PBIXPROJ_FOLDER}}

Example:

  "parameters": {
    "[Version]": "1.1.0",
    "[Environment]": "{{ENVIRONMENT}}",
    "[PBITOOLS_VERSION]": "{{PBITOOLS_VERSION}}",
    "[GH-Branch]": "%GITHUB_REF_NAME%",
    "[GH-RunId]": "%GITHUB_RUN_ID%",
    "[GH-SHA]": "%GITHUB_SHA%",
    "[FilterDate]": null
  }

Refresh Tracing and Refresh Summary Stats (#147)

  • Retrieves traces during XMLA refresh, emits live logs and generates a refresh summary
  • Tracing can be entirely disabled
  • If enabled, events can be logged to the console. Any number of filter expressions are allowed. Filters are evaluated against composite keys: "{EventClass}|{EventSubclass}|{ObjectType}". Wildcards ('*', '?') are allowed.
  • Furthermore, a refresh summary can be produced, either as a console output and/or into a UTF-8 csv file. Summary stats allow filtering by event and object type.
  • All configuration for refresh tracing is held in options/refresh/tracing
  • Possible values for EventSubclass (referenced in logEvents/filter and summary/events) are listed here: https://docs.microsoft.com/en-us/analysis-services/trace-events/progress-reports-data-columns?view=sql-analysis-services-2022

Example config section:

"options": {
  "refresh": {
    "method": "XMLA",
    "type": "Full",
    "tracing": {
      "enabled": true,
      "logEvents": {
        "filter": [
          "*|TabularRefresh|Partition",
          "*|ReadData|Partition"
        ]
      },
      "summary": {
        "events": [
          "TabularRefresh",
          "Process",
          "ReadData",
          "ExecuteSql"
        ],
        "objectTypes": [
          "Partition"
        ],
        "outPath": "refresh_stats.csv",
        "console": true
      }
    }
  }

Example output (Summary table by partition):

┌───────────────────┬────────────────┬────────────┬───────────────────────────────────────────┬──────────┬──────────────────┬──────────┬──────────┬─────────┐
│ Table             │ Event          │ ObjectType │ ObjectName                                │ ObjectID │ Elapsed          │ RowCount │ Duration │ CpuTime │
├───────────────────┼────────────────┼────────────┼───────────────────────────────────────────┼──────────┼──────────────────┼──────────┼──────────┼─────────┤
│ Customer          │ ExecuteSql     │ Partition  │ Customer                                  │ 162      │ 00:00:01.2159821 │ 0        │ 203      │ 0       │
│ Customer          │ Process        │ Partition  │ Customer                                  │ 162      │ 00:00:02.8379674 │ 0        │ 766      │ 484     │
│ Customer          │ ReadData       │ Partition  │ Customer                                  │ 162      │ 00:00:02.8359509 │ 18863    │ 719      │ 453     │
│ Customer          │ TabularRefresh │ Partition  │ Customer                                  │ 162      │ 00:00:02.8399309 │ 0        │ 1031     │ 484     │
│ Date              │ ExecuteSql     │ Partition  │ Date                                      │ 161      │ 00:00:01.1984361 │ 0        │ 62       │ 0       │
│ Date              │ Process        │ Partition  │ Date                                      │ 161      │ 00:00:01.8289703 │ 0        │ 219      │ 109     │
│ Date              │ ReadData       │ Partition  │ Date                                      │ 161      │ 00:00:01.2193614 │ 2556     │ 203      │ 94      │
│ Date              │ TabularRefresh │ Partition  │ Date                                      │ 161      │ 00:00:01.8346024 │ 0        │ 391      │ 109     │
│ Info              │ ExecuteSql     │ Partition  │ Info-f44d74ec-0372-4982-8ace-63656474683c │ 164      │ 00:00:01.1726938 │ 0        │ 94       │ 0       │
│ Info              │ Process        │ Partition  │ Info-f44d74ec-0372-4982-8ace-63656474683c │ 164      │ 00:00:01.1789545 │ 0        │ 0        │ 0       │
│ Info              │ ReadData       │ Partition  │ Info-f44d74ec-0372-4982-8ace-63656474683c │ 164      │ 00:00:01.1785561 │ 7        │ 0        │ 0       │
│ Info              │ TabularRefresh │ Partition  │ Info-f44d74ec-0372-4982-8ace-63656474683c │ 164      │ 00:00:01.1820839 │ 0        │ 109      │ 0       │
│ Metric            │ Process        │ Partition  │ Partition                                 │ 157      │ 00:00:01.1569016 │ 0        │ 16       │ 0       │
│ Metric            │ ReadData       │ Partition  │ Partition                                 │ 157      │ 00:00:01.1553189 │ 4        │ 0        │ 0       │
│ Metric            │ TabularRefresh │ Partition  │ Partition                                 │ 157      │ 00:00:01.1586907 │ 0        │ 63       │ 0       │
│ Product           │ ExecuteSql     │ Partition  │ Product                                   │ 163      │ 00:00:01.1959310 │ 0        │ 47       │ 0       │
│ Product           │ Process        │ Partition  │ Product                                   │ 163      │ 00:00:01.2121320 │ 0        │ 63       │ 47      │
│ Product           │ ReadData       │ Partition  │ Product                                   │ 163      │ 00:00:01.2108727 │ 2517     │ 47       │ 47      │
│ Product           │ TabularRefresh │ Partition  │ Product                                   │ 163      │ 00:00:01.2136322 │ 0        │ 156      │ 47      │
│ Promotion         │ ExecuteSql     │ Partition  │ Promotion                                 │ 158      │ 00:00:01.1864264 │ 0        │ 31       │ 0       │
│ Promotion         │ Process        │ Partition  │ Promotion                                 │ 158      │ 00:00:01.1915294 │ 0        │ 16       │ 16      │
│ Promotion         │ ReadData       │ Partition  │ Promotion                                 │ 158      │ 00:00:01.1905647 │ 28       │ 16       │ 16      │
│ Promotion         │ TabularRefresh │ Partition  │ Promotion                                 │ 158      │ 00:00:01.1933003 │ 0        │ 62       │ 16      │
│ Sales             │ ExecuteSql     │ Partition  │ Sales                                     │ 160      │ 00:00:02.8224084 │ 0        │ 391      │ 0       │
│ Sales             │ Process        │ Partition  │ Sales                                     │ 160      │ 00:00:04.9684400 │ 0        │ 2993     │ 953     │
│ Sales             │ ReadData       │ Partition  │ Sales                                     │ 160      │ 00:00:04.9676671 │ 100231   │ 2884     │ 906     │
│ Sales             │ TabularRefresh │ Partition  │ Sales                                     │ 160      │ 00:00:04.9703950 │ 0        │ 3478     │ 969     │
│ Store             │ ExecuteSql     │ Partition  │ Store                                     │ 165      │ 00:00:01.1907236 │ 0        │ 47       │ 0       │
│ Store             │ Process        │ Partition  │ Store                                     │ 165      │ 00:00:01.2066130 │ 0        │ 47       │ 31      │
│ Store             │ ReadData       │ Partition  │ Store                                     │ 165      │ 00:00:01.2021887 │ 306      │ 31       │ 16      │
│ Store             │ TabularRefresh │ Partition  │ Store                                     │ 165      │ 00:00:01.2086600 │ 0        │ 219      │ 31      │
│ Time Intelligence │ Process        │ Partition  │ Partition                                 │ 159      │ 00:00:01.1710781 │ 0        │ 47       │ 0       │
│ Time Intelligence │ ReadData       │ Partition  │ Partition                                 │ 159      │ 00:00:01.1706971 │ 4        │ 0        │ 0       │
│ Time Intelligence │ TabularRefresh │ Partition  │ Partition                                 │ 159      │ 00:00:01.1725205 │ 0        │ 109      │ 0       │
└───────────────────┴────────────────┴────────────┴───────────────────────────────────────────┴──────────┴──────────────────┴──────────┴──────────┴─────────┘

Deploy embedded report alongside dataset (#141)

  • Allows deploying report from a PbixProj folder alongside dataset from same project
  • Report is automatically bound to dataset. This happens offline, ensuring the PBIX has a valid dataset reference
  • Custom connections.json template can be specified via manifest/options/report/customConnectionsTemplate (HTTP url or relative file path). The template must contain the "{{DATASET_ID}}" placeholder and must be valid json.
  • Initial support for 'pbiServiceLive' connections only

Enabled as part of manifest/options/dataset:

  "options": {
    "dataset": {
      "deployEmbeddedReport": true
    }
  }

Report name and destination are derived from dataset, but can be customized via environment settings. Parameter replacement supported for 'workspace' and 'displayName':

  "UAT": {
    "workspace": "Datasets [PROD]",
    "displayName": "{{PBIXPROJ_FOLDER}} [UAT]",
    "refresh": true,
    "report": {
      "skip": false,
      "workspace": "Name-or-ID",
      "displayName": "Report Name.pbix"
    }
  }

Those changes provide the foundation for #66

Non-string deployment parameters (#145)

  • Support text, number, bool, null, expression parameters
  • Fixed '"' escaping in text params

Example payload:

{
    "Number": 1,
    "Number2": 0.4,
    "Null": null,
    "String": "foo",
    "Bool": true,
    "Date": "#date(2022, 6, 1)",
    "Duration": "#duration(5, 0, 0, 0)"
}