Analysis-Services/BestPracticeRules/README.md

102 lines
5.6 KiB
Markdown
Raw Normal View History

2021-02-05 04:08:52 +08:00
# Best Practice Rules
2021-02-05 04:05:59 +08:00
Make sure to also check out the [PowerBI.com blog post](https://powerbi.microsoft.com/en-us/blog/best-practice-rules-to-improve-your-models-performance/ "PowerBI.com blog post") on this topic!
2021-05-20 18:18:37 +08:00
And, check out the new [PowerBI.com blog post on v1.1](https://powerbi.microsoft.com/en-us/blog/best-practice-rules-to-improve-your-models-performance-and-design-v1-1/, "PowerBI.com blog post").
2021-03-05 18:06:01 +08:00
Also, check out this [post](https://www.elegantbi.com/post/bestpracticerulesavings "Best Practice Rule Savings") for quantifying the savings of following specific Best Practice Rules.
2021-02-03 19:47:26 +08:00
## Purpose
2021-02-03 19:18:07 +08:00
2021-02-03 19:47:26 +08:00
Running this collection of rules inside [Tabular Editor](https://tabulareditor.com/ "Tabular Editor")'s [Best Practice Analyzer](https://docs.tabulareditor.com/Best-Practice-Analyzer.html "Best Practice Analyzer") will inform you of potential issues to fix or improvements to be made with regard to performance optimization and model design.
2021-02-03 21:08:49 +08:00
## Feedback
We would love to hear feedback on how this tool has helped your organization. Please email feedback to: pbibestpractice@microsoft.com.
2021-02-05 04:08:52 +08:00
If you find any issues or have any requests for new rules, please [submit an issue](https://github.com/microsoft/Analysis-Services/issues "submit an issue") within this repository. Just prefix the issue with "BPARules" to make it easier to track.
2021-02-03 21:08:49 +08:00
2021-02-03 19:47:26 +08:00
## Setup (automated)
Following these steps will automatically load the Best Practice Rules into your local Tabular Editor. Note that this will overwrite the existing BPARules.json file (if you are already have one).
1. Open [Tabular Editor](https://tabulareditor.com/ "Tabular Editor").
2. Connect to a model.
3. Run the following code in the Advanced Scripting window.
2021-05-19 19:12:46 +08:00
```C#
System.Net.WebClient w = new System.Net.WebClient();
string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData);
string url = "https://raw.githubusercontent.com/microsoft/Analysis-Services/master/BestPracticeRules/BPARules.json";
string downloadLoc = path+@"\TabularEditor\BPARules.json";
w.DownloadFile(url, downloadLoc);
```
2021-02-03 19:47:26 +08:00
4. Close and reopen [Tabular Editor](https://tabulareditor.com/ "Tabular Editor").
5. Connect to a model.
6. Select 'Tools' from the File menu and select 'Best Practice Analyzer'.
7. Click the Refresh icon (in blue).
## Setup (manual)
2021-03-23 21:46:53 +08:00
1. Download the BPARules.json file from GitHub (in this repository).
2. Within the Start Menu, type %localappdata% and click Enter.
3. Navigate to the 'TabularEditor' folder.
4. Copy the rules file (.json) and paste it into the TabularEditor folder.*
5. Open [Tabular Editor](https://tabulareditor.com/ "Tabular Editor") and connect to your model.
6. Select 'Tools' from the File menu and select 'Best Practice Analyzer'.
7. Click the Refresh icon (in blue).
2021-02-03 19:47:26 +08:00
## Notes
* The following rules require running an additional script before running the Best Practice Analyzer
2021-02-05 04:28:48 +08:00
* Avoid bi-directional relationships against high-cardinality columns *
* Large tables should be partitioned *
* Reduce usage of long-length columns with high cardinality *^
* Split date and time ***
2021-02-03 19:47:26 +08:00
2021-02-05 04:22:45 +08:00
*These rules use [Vertipaq Analyzer](https://www.sqlbi.com/tools/vertipaq-analyzer/) data. There are 2 methods to load this data into Tabular Editor:
1. Load Vertipaq Analyzer data directly from a server ([instructions](https://www.elegantbi.com/post/vertipaqintabulareditor)) ([script](https://github.com/m-kovalsky/Tabular/blob/master/VertipaqAnnotations.cs)).
2021-02-03 19:47:26 +08:00
2021-02-05 04:22:45 +08:00
2. Load Vertipaq Analyzer data from .vpax file ([instructions](https://www.elegantbi.com/post/vpaxtotabulareditor)) ([script](https://github.com/m-kovalsky/Tabular/blob/master/VpaxToTabularEditor.cs)).
2021-02-03 19:47:26 +08:00
2021-02-05 04:28:48 +08:00
^Run this [script](https://github.com/m-kovalsky/Tabular/blob/master/BestPracticeRule_LongLengthColumns.cs "script") while live-connected to the model.
2021-02-05 04:22:45 +08:00
***Run this [script](https://github.com/m-kovalsky/Tabular/blob/master/BestPracticeRule_SplitDateAndTime.cs "script") while live-connected to the model.
2021-02-03 19:47:26 +08:00
## Requirements
2021-05-19 19:12:46 +08:00
[Tabular Editor](https://tabulareditor.com/ "Tabular Editor") version 2.16.1 or higher.
2021-05-20 12:05:11 +08:00
2021-05-21 17:50:18 +08:00
## Version History
2021-05-20 12:05:11 +08:00
2021-06-13 12:35:34 +08:00
* 2021-06-13 Version 1.1.2
* Modified Rules
* [DAX Expressions] Use the DIVIDE function for division
* Updated the rule logic to not mistake comments for division
2021-05-26 12:08:14 +08:00
* 2021-05-26 Version 1.1.1
2021-05-26 12:12:25 +08:00
* Modified Rules
2021-05-26 12:08:14 +08:00
* [DAX Expressions] Inactive relationships that are never activated
* Expanded the scope to include Calculation Items ([#110](https://github.com/microsoft/Analysis-Services/issues/110))
2021-05-21 17:50:18 +08:00
* 2021-05-20 Version 1.1 (make sure to read the [blog post](https://powerbi.microsoft.com/en-us/blog/best-practice-rules-to-improve-your-models-performance-and-design-v1-1/ "blog post"))
2021-05-20 12:05:11 +08:00
* New Rules
* [DAX Expressions] Filter column values with proper syntax
* [DAX Expressions] Fllter measure values by columns, not tables
* [DAX Expressions] Inactive relationships that are never activated
* [Maintenance] Perspectives with no objects
* [Maintenance] Calculation groups with no calculation items
* Modified Rules
* [Naming Conventions] Partition name should match table name for single partition tables
* Added Fix Expression (must use Tabular Editor 2.16.1 or higher)
* [Error Prevention] Calculated columns must have an expression
* New name: Expression-reliant objects must have an expression
* [Maintenance] Objects with no description
* New name: Visible objects with no description
* Removed Rules
* [DAX Expressions] No two measures should have the same definition
2021-05-21 17:50:18 +08:00
* 2021-02-03 Version 1.0