1.2.6
This commit is contained in:
parent
e4694f8121
commit
19ea5b171b
@ -151,6 +151,16 @@
|
||||
"Expression": "\nSourceType.ToString() = \"M\"\r\nand\r\n(\r\nQuery.Contains(\"Table.Combine(\")\r\nor\r\n\nQuery.Contains(\"Table.Join(\")\r\nor\r\n\nQuery.Contains(\"Table.NestedJoin(\")\r\nor\r\nQuery.Contains(\"Table.AddColumn(\")\r\nor\r\nQuery.Contains(\"Table.Group(\")\r\nor\r\nQuery.Contains(\"Table.Sort(\")\r\nor\r\nQuery.Contains(\"Table.Pivot(\")\r\nor\r\nQuery.Contains(\"Table.Unpivot(\")\r\nor\r\nQuery.Contains(\"Table.UnpivotOtherColumns(\")\r\nor\r\nQuery.Contains(\"Table.Distinct(\")\r\nor\r\nQuery.Contains(\"[Query=\"\"SELECT\")\r\nor\r\nQuery.Contains(\"Value.NativeQuery\")\r\nor\r\nQuery.Contains(\"OleDb.Query\")\r\nor\r\nQuery.Contains(\"Odbc.Query\")\r\n)",
|
||||
"CompatibilityLevel": 1200
|
||||
},
|
||||
{
|
||||
"ID": "AVOID_USING_MANY-TO-MANY_RELATIONSHIPS_ON_TABLES_USED_FOR_DYNAMIC_ROW_LEVEL_SECURITY",
|
||||
"Name": "[パフォーマンス] 動的な行レベルセキュリティ(RLS)に使用されるテーブルでの多対多の関係の使用を避ける",
|
||||
"Category": "パフォーマンス",
|
||||
"Description": "多対多のリレーションシップを動的な行レベルセキュリティ(RLS)を使用するテーブルに適用すると、クエリのパフォーマンスが大幅に低下する可能性があります。このパターンに関連するパフォーマンスの問題は、多数の多対多のリレーションシップがRLSを組み込んだテーブルにスノーフレーク方式で接続された場合にさらに顕著になります。代わりに、以下の記事で紹介されているパターンのいずれかを使用し、単一のディメンションテーブルがセキュリティテーブルとの多対一の関係を確立することを推奨します。参考:https://www.elegantbi.com/post/dynamicrlspatterns",
|
||||
"Severity": 3,
|
||||
"Scope": "Table",
|
||||
"Expression": "UsedInRelationships.Any(FromCardinality == \"Many\" and ToCardinality== \"Many\")\r\nand\r\nRowLevelSecurity.Any(it.Length > 0)",
|
||||
"CompatibilityLevel": 1200
|
||||
},
|
||||
{
|
||||
"ID": "UNPIVOT_PIVOTED_(MONTH)_DATA",
|
||||
"Name": "[パフォーマンス]クロス集計された(月の)データのピボット解除を行う",
|
||||
@ -167,7 +177,7 @@
|
||||
"Category": "パフォーマンス",
|
||||
"Severity": 2,
|
||||
"Scope": "Relationship",
|
||||
"Expression": "FromCardinality == \"Many\"\nand\nToCardinality == \"Many\"\nand\nCrossFilteringBehavior == \"BothDirections\"",
|
||||
"Expression": "FromCardinality == \"Many\"\n\r\nand\r\n\nToCardinality == \"Many\"\r\n\nand\r\n\nCrossFilteringBehavior == \"BothDirections\"",
|
||||
"CompatibilityLevel": 1200,
|
||||
"Description": ""
|
||||
},
|
||||
@ -423,6 +433,17 @@
|
||||
"FixExpression": "Description = string.Concat( it.Description.ToCharArray().Select( c => (char.IsControl(c) && !char.IsWhiteSpace(c)) ? ' ': c ))",
|
||||
"CompatibilityLevel": 1200
|
||||
},
|
||||
{
|
||||
"ID": "SET_ISAVAILABLEINMDX_TO_TRUE_ON_NECESSARY_COLUMNS",
|
||||
"Name": "[エラー防止] 必要な列に対してIsAvailableInMdxをtrueに設定する",
|
||||
"Category": "エラー防止",
|
||||
"Description": "エラーを避けるためには、列が他の列の並べ替えに使用される場合、階層内で使用される場合、バリエーション(Variation Class)で使用される場合、または他の列で並べ替えられる場合には、属性の階層が有効になっていることを確認してください。",
|
||||
"Severity": 3,
|
||||
"Scope": "DataColumn, CalculatedColumn, CalculatedTableColumn",
|
||||
"Expression": "IsAvailableInMDX = false\r\n\r\nand\r\n(\r\nUsedInSortBy.Any()\r\nor\r\nUsedInHierarchies.Any()\r\nor\r\nUsedInVariations.Any()\r\nor\r\nSortByColumn != null\r\n)",
|
||||
"FixExpression": "IsAvailableInMDX = true",
|
||||
"CompatibilityLevel": 1200
|
||||
},
|
||||
{
|
||||
"ID": "UNNECESSARY_COLUMNS",
|
||||
"Name": "[メンテナンス]不要な列を削除する",
|
||||
@ -430,7 +451,7 @@
|
||||
"Description": "DAX式、リレーションシップ、階層レベル、「列で並び替え」で参照されていない非表示列は削除しておくべきです",
|
||||
"Severity": 2,
|
||||
"Scope": "DataColumn, CalculatedColumn, CalculatedTableColumn",
|
||||
"Expression": "(IsHidden or Table.IsHidden)\n\n\r\nand ReferencedBy.Count = 0\r\n\n\nand (not UsedInRelationships.Any())\n\n\r\nand (not UsedInSortBy.Any())\n\n\r\nand (not UsedInHierarchies.Any())\n\n\r\nand (not Table.RowLevelSecurity.Any(\nit <> null and it.IndexOf(\"[\" + current.Name + \"]\", \"OrdinalIgnoreCase\") >= 0\n))\n\n and (not Model.Roles.Any(RowLevelSecurity.Any(\nit <> null and \n(\nit.IndexOf(current.Table.Name + \"[\" + current.Name + \"]\", \"OrdinalIgnoreCase\") >= 0 or\n it.IndexOf(\"'\" + current.Table.Name + \"'[\" + current.Name + \"]\", \"OrdinalIgnoreCase\") >= 0\n )\n)))",
|
||||
"Expression": "(IsHidden or Table.IsHidden)\n\n\r\nand ReferencedBy.Count = 0\r\n\n\nand (not UsedInRelationships.Any())\n\n\r\nand (not UsedInSortBy.Any())\n\n\r\nand (not UsedInHierarchies.Any())\n\n\r\nand (not Table.RowLevelSecurity.Any(\nit <> null and it.IndexOf(\"[\" + current.Name + \"]\", \"OrdinalIgnoreCase\") >= 0\n))\n\n and (not Model.Roles.Any(RowLevelSecurity.Any(\nit <> null and \n(\nit.IndexOf(current.Table.Name + \"[\" + current.Name + \"]\", \"OrdinalIgnoreCase\") >= 0 or\n it.IndexOf(\"'\" + current.Table.Name + \"'[\" + current.Name + \"]\", \"OrdinalIgnoreCase\") >= 0\n )\n)))\r\nand not (\r\nObjectLevelSecurity.Any(it.ToString() == \"None\"))\r\nand not (\r\nTable.ObjectLevelSecurity.Any(it.ToString() == \"None\"))",
|
||||
"FixExpression": "Delete()",
|
||||
"CompatibilityLevel": 1200
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user