1.0.0-rc.2+20220703
Pre-release
Pre-release
- #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)"
}